Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
RabbitMQ¼¼ÊõÏê½â
 
  30345  次浏览      27
 2018-5-23 
 
±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚÍøÂ磬±¾ÎÄÖ÷Òª½éÉÜÁËRabbitMQÊÇʲô£¬RabbitMQΪºÎ»á³öÏÖ£¬RabbitMQ»ù´¡¸ÅÄRabbitMQ¼¯ÈºµÈ¡£

RabbitMQÊÇʲô

¶¨Òå

RabbitMQÊÇÒ»¸ö¿ªÔ´µÄAMQPʵÏÖ£¬·þÎñÆ÷¶ËÓÃErlangÓïÑÔ±àд£¬Ö§³Ö¶àÖÖ¿Í»§¶Ë£¬È磺Python¡¢Ruby¡¢.NET¡¢Java¡¢JMS¡¢C¡¢PHP¡¢ActionScript¡¢XMPP¡¢STOMPµÈ£¬Ö§³ÖAJAX¡£ÓÃÓÚÔÚ·Ö²¼Ê½ÏµÍ³Öд洢ת·¢ÏûÏ¢£¬ÔÚÒ×ÓÃÐÔ¡¢À©Õ¹ÐÔ¡¢¸ß¿ÉÓÃÐԵȷ½Ãæ±íÏÖ²»Ëס£

AMPQ

AMQP£¬¼´Advanced Message Queuing Protocol£¬¸ß¼¶ÏûÏ¢¶ÓÁÐЭÒ飬ÊÇÓ¦ÓòãЭÒéµÄÒ»¸ö¿ª·Å±ê×¼£¬ÎªÃæÏòÏûÏ¢µÄÖмä¼þÉè¼Æ¡£ÏûÏ¢Öмä¼þÖ÷ÒªÓÃÓÚ×é¼þÖ®¼äµÄ½âñÏûÏ¢µÄ·¢ËÍÕßÎÞÐèÖªµÀÏûϢʹÓÃÕߵĴæÔÚ£¬·´Ö®ÒàÈ»¡£

Ëü¿ÉÒÔʹ¶ÔÓ¦µÄ¿Í»§¶Ë£¨client£©Óë¶ÔÓ¦µÄÏûÏ¢Öмä¼þ£¨broker£©½øÐн»»¥¡£ÏûÏ¢Öмä¼þ´Ó·¢²¼Õߣ¨publisher£©ÄÇÀïÊÕµ½ÏûÏ¢£¨·¢²¼ÏûÏ¢µÄÓ¦Óã¬Ò²³ÆÎªproducer£©£¬È»ºó½«ËûÃÇת·¢¸øÏû·ÑÕߣ¨consumers£¬´¦ÀíÏûÏ¢µÄÓ¦Óã©¡£ÓÉÓÚAMQPÊÇÒ»¸öÍøÂçЭÒ飬ËùÒÔ·¢²¼Õß¡¢Ïû·ÑÕßÒÔ¼°ÏûÏ¢Öмä¼þ¿ÉÒÔ²¿Êðµ½²»Í¬µÄÎïÀí»úÆ÷ÉÏÃæ¡£

ËäÈ»ÔÚͬ²½ÏûϢͨѶµÄÊÀ½çÀïÓкܶ๫¿ª±ê×¼£¨Èç COBARµÄ IIOP £¬»òÕßÊÇ SOAP µÈ£©£¬µ«ÊÇÔÚÒì²½ÏûÏ¢´¦ÀíÖÐÈ´²»ÊÇÕâÑù£¬Ö»ÓдóÆóÒµÓÐһЩÉÌҵʵÏÖ£¨Èç΢ÈíµÄ MSMQ £¬IBM µÄ Websphere MQ µÈ£©£¬Òò´Ë£¬ÔÚ 2006 ÄêµÄ 6 Ô£¬Cisco ¡¢Redhat¡¢iMatix µÈÁªºÏÖÆ¶¨ÁË AMQP µÄ¹«¿ª±ê×¼¡£

RabbitMQÊÇÓÉRabbitMQ Technologies Ltd¿ª·¢²¢ÇÒÌṩÉÌÒµÖ§³ÖµÄ¡£¸Ã¹«Ë¾ÔÚ2010Äê4Ô±»SpringSource£¨VMWareµÄÒ»¸ö²¿ÃÅ£©ÊÕ¹º¡£ÔÚ2013Äê5Ô±»²¢ÈëPivotal¡£ÆäʵVMWare£¬PivotalºÍEMC±¾ÖÊÉÏÊÇÒ»¼ÒµÄ¡£²»Í¬µÄÊÇVMWareÊǶÀÁ¢ÉÏÊÐ×Ó¹«Ë¾£¬¶øPivotalÊÇÕûºÏÁËEMCµÄijЩ×ÊÔ´£¬ÏÖÔÚ²¢Ã»ÓÐÉÏÊС£

ͬÀà²úÆ·

ÏûÏ¢Öмä¼þÊÇÒ»ÖÖÓÉÏûÏ¢´«ËÍ»úÖÆ»òÏûÏ¢¶ÓÁÐģʽ×é³ÉµÄÖмä¼þ¼¼Êõ£¬ÀûÓøßЧ¿É¿¿µÄÏûÏ¢´«µÝ»úÖÆ½øÐÐÆ½Ì¨Î޹صÄÊý¾Ý½»Á÷£¬²¢»ùÓÚÊý¾ÝͨÐÅÀ´½øÐзֲ¼Ê½ÏµÍ³µÄ¼¯³É¡£

Redis

ÊÇÒ»¸öKey-ValueµÄNoSQLÊý¾Ý¿â£¬¿ª·¢Î¬»¤ºÜ»îÔ¾£¬ËäÈ»ËüÊÇÒ»¸öKey-ValueÊý¾Ý¿â´æ´¢ÏµÍ³£¬µ«Ëü±¾ÉíÖ§³ÖMQ¹¦ÄÜ£¬ËùÒÔÍê³É¿ÉÒÔµ±×öÒ»¸öÇáÁ¿¼¶µÄ¶ÓÁзþÎñÀ´Ê¹Ó᣶ÔÓÚRabbitMQºÍRedisµÄÈë¶ÓºÍ³ö¶Ó²Ù×÷£¬¸÷Ö´ÐÐ100Íò´Î£¬Ã¿10Íò´Î¼Ç¼һ´ÎÖ´ÐÐʱ¼ä¡£²âÊÔÊý¾Ý·ÖΪ128Bytes¡¢512Bytes¡¢1KºÍ10KËĸö²»Í¬´óСµÄÊý¾Ý¡£ÊµÑé±íÃ÷£ºÈë¶Óʱ£¬µ±Êý¾Ý±È½ÏСʱ£¬RedisµÄÐÔÄÜÒª¸ßÓÚRabbitMQ£¬¶øÈç·ñÊý¾Ý´óС³¬¹ýÁË10K£¬RedisÔòÂýµÄÎÞ·¨ÈÌÊÜ£»³ö¶Óʱ£¬ÎÞÂÛÊý¾Ý´óС£¬Redis¶¼±íÏÖ³ö·Ç³£ºÃµÄÐÔÄÜ£¬¶øRabbitMQµÄ³ö¶ÓÐÔÄÜÔòÔ¶µÍÓÚRedis¡£

MemcacheQ

³Ö¾Ã»¯ÏûÏ¢¶ÓÁУ¨¼ò³Æmcq£©ÊÇÒ»¸öÇáÁ¿¼¶µÄÏûÏ¢¶ÓÁУ¬ÌØÐÔÈçÏ£º

¼òµ¥Ò×ÓÃ

´¦ÀíËÙ¶È¿ì

¶àÌõ¶ÓÁÐ

²¢·¢ÐÔÄܺÃ

ÓëmemcacheµÄЭÒ鼿ÈÝ¡£Òâζ×ÅֻҪװÁËǰÕßµÄextension¼´¿É£¬²»ÐèÒª¶îÍâµÄ²å¼þ

ÔÚzend frameworkÖÐʹÓúܷ½±ã

MSMQ

ÕâÊÇ΢ÈíµÄ²úÆ·Á¦Î¨Ò»±»ÈÏΪÓмÛÖµµÄ¶«Î÷¡£Èç¹ûMSMQÄÜÖ¤Ã÷¿ÉÒÔÓ¦¶ÔÕâÖÖÈÎÎñ£¬ËûÃǽ«Ñ¡ÔñʹÓÃËü¡£

¹Ø¼üÊÇËü²¢²»¸´ÔÓ£¬³ýÁ˽ÓÊպͷ¢ËÍ£¬Ã»ÓбðµÄ£»ËüÓÐһЩӲÐÔÏÞÖÆ£¬±ÈÈç×î´óÏûÏ¢Ìå»ýÊÇ4MB¡£

È»¶ø£¬Í¨¹ýºÍһЩÏëMassTransit»òNServiceBusÕâÑùµÄÈí¼þµÄÁ¬½Ó£¬ËüÍêÈ«¿ÉÒÔ½â¾öÕâЩÎÊÌâ¡£

ZeroMQ

ZeroMQÊÇÒ»¸ö·Ç³£ÇáÁ¿¼¶µÄÏûϢϵͳ£¬ºÅ³Æ×î¿ìµÄÏûÏ¢¶ÓÁÐϵͳ£¬×¨ÃÅΪ¸ßÍÌÍÂÁ¿/µÍÑӳٵij¡¾°¿ª·¢£¬ÔÚ½ðÈÚ½çµÄÓ¦ÓÃÖо­³£¿ÉÒÔ·¢ÏÖËü¡£

ÓëRabbitMQÏà±È£¬ZeroMQÖ§³ÖÐí¶à¸ß¼¶ÏûÏ¢³¡¾°£¬Äܹ»ÊµÏÖRabbitMQ²»Éó¤µÄ¸ß¼¶/¸´ÔӵĶÓÁУ¬µ«ÊÇÄã±ØÐëʵÏÖZeroMQ¿ò¼ÜÖеĸ÷¸ö¿é£¨±ÈÈçSocket»òDeviceµÈ£©¡£

ZeroMQ¾ßÓÐÒ»¸ö¶ÀÌØµÄ·ÇÖмä¼þµÄģʽ£¬Äã²»ÐèÒª°²×°ºÍÔËÐÐÒ»¸öÏûÏ¢·þÎñÆ÷»òÖмä¼þ£¬ÒòΪÄãµÄÓ¦ÓóÌÐò½«°çÑÝÕâ¸ö·þÎñ½ÇÉ«¡£ÄãÖ»ÐèÒª¼òµ¥µØÒýÓÃZeroMQ³ÌÐò¿â£¬¿ÉÒÔʹÓÃNuGet°²×°£¬È»ºóÄã¾Í¿ÉÒÔÓä¿ìµØÔÚÓ¦ÓóÌÐòÖ®¼ä·¢ËÍÏûÏ¢ÁË¡£

µ«ÊÇZeroMQ½öÌṩ·Ç³Ö¾ÃÐԵĶÓÁУ¬¼´Ã»Óеط½¿ÉÒÔ¹Û²ìËüÊÇ·ñÓÐÎÊÌâ³öÏÖ£¬Ò²¾ÍÊÇ˵Èç¹ûdown»ú£¬Êý¾Ý½«»á¶ªÊ§¡£

ZeroMQ·Ç³£Áé»î£¬µ«ÊÇÄã±ØÐëѧϰËüµÄ80Ò³µÄÊֲᣨÈç¹ûÄãҪдһ¸ö·Ö²¼Ê½ÏµÍ³£¬Ò»¶¨ÒªÔĶÁËü£©¡£

Jafka/Kafka

Kafka£¨Äܽ«ÏûÏ¢·ÖÉ¢µ½²»Í¬µÄ½ÚµãÉÏ£©ÊÇLinkedInÓÚ2010Äê12Ô¿ª·¢²¢¿ªÔ´µÄÒ»¸ö·Ö²¼Ê½MQϵͳ£¬ÏÖÔÚÊÇApacheµÄÒ»¸ö·õ»¯ÏîÄ¿£¬ÊÇÒ»¸ö¸ßÐÔÄÜ¿çÓïÑÔ·Ö²¼Ê½Publish/SubscribeÏûÏ¢¶ÓÁÐϵͳ£¬¶øJafkaÊÇÔÚKafkaÖ®ÉÏ·õ»¯¶øÀ´µÄ£¬¼´KafkaµÄÒ»¸öÉý¼¶°æ¡£¾ßÓÐÒÔÏÂÌØÐÔ£º

¿ìËٳ־û¯£¬¿ÉÒÔÔÚO(1)µÄϵͳ¿ªÏúϽøÐÐÏûÏ¢³Ö¾Ã»¯£»

¸ßÍÌÍ£¬ÔÚһ̨ÆÕͨµÄ·þÎñÆ÷ÉϼȿÉÒÔ´òµ½10W/sµÄÍÌÍÂËÙÂÊ£»

ÍêÈ«µÄ·Ö²¼Ê½ÏµÍ³£¬Broker¡¢Producer¡¢Consumer¶¼Ô­Éú×Ô¶¯Ö§³Ö·Ö²¼Ê½£¬×Ô¶¯ÊµÏÖ¸´ÔÓ¾ùºâ£»

Ö§³ÖHadoopÊý¾Ý²¢ÐмÓÔØ£¬Í³Ò»ÁËÔÚÏߺÍÀëÏßµÄÏûÏ¢´¦Àí£¬¶ÔÓÚÏñHadoopÒ»ÑùµÄÈÕÖ¾Êý¾ÝºÍÀëÏß·ÖÎöϵͳ£¬µ«ÓÖÒªÇóʵʱ´¦ÀíµÄÏÞÖÆ£¬ÕâÊÇÒ»¸ö¿ÉÐеĽâ¾ö·½°¸¡£

Ïà¶ÔÓÚActiveMQÊÇÒ»¸ö·Ç³£ÇáÁ¿¼¶µÄÏûϢϵͳ£¬³ýÁËÐÔÄܷdz£ºÃÖ®Í⣬»¹ÊÇÒ»¸ö¹¤×÷Á¼ºÃµÄ·Ö²¼Ê½ÏµÍ³¡£

Apache ActiveMQ

ActiveMQ¾ÓÓÚ£¨RabbitMQ&ZeroMQ£©Ö®¼ä£¬ÀàËÆÓÚZemoMQ£¬Ëü¿ÉÒÔ²¿ÊðÓÚ´úÀíģʽºÍP2Pģʽ¡£

ActiveMQ±»ÓþΪJavaÊÀ½çµÄÖмáÁ¦Á¿¡£ËüÓкܳ¤µÄÀúÊ·£¬ÇÒ±»¹ã·ºÊ¹Óá£Ëü»¹ÊÇ¿çÆ½Ì¨µÄ£¬¸øÄÇЩ·Ç΢ÈíÆ½Ì¨µÄ²úÆ·ÌṩÁËÒ»¸öÌìÈ»µÄ¼¯³É½ÓÈëµã¡£

È»¶øËüÖ»ÓÐÅܹýÁËMSMQ²ÅÓпÉÄܱ»¿¼ÂÇ¡£ÈçÐèÅäÖÃActiveMQÔòÐèÒªÔÚÄ¿±ê»úÆ÷Éϰ²×°Java»·¾³¡£

ÀàËÆÓÚRabbitMQ£¬ËüÒ×ÓÚʵÏָ߼¶³¡¾°£¬¶øÇÒÖ»Ð踶³öµÍÏûºÄ¡£Ëü±»ÓþΪÏûÏ¢Öмä¼þµÄ¡°ÈðÊ¿¾üµ¶¡±¡£

RabbitMQ

RabbitMQÊÇʹÓÃErlang±àдµÄÒ»¸ö¿ªÔ´ÏûÏ¢¶ÓÁУ¬±¾ÉíÖ§³ÖºÜ¶àµÄЭÒ飺AMQP£¬ XMPP£¬ SMTP£¬ STONP£¬Ò²ÕýÊÇÈç´Ë£¬Ê¹µÄËü±äµÄ·Ç³£ÖØÁ¿¼¶£¬¸üÊʺÏÓÚÆóÒµ¼¶µÄ¿ª·¢¡£

ËüʵÏÖÁË´úÀí(Broker)¼Ü¹¹£¬Òâζ×ÅÏûÏ¢ÔÚ·¢Ë͵½¿Í»§¶Ë֮ǰ¿ÉÒÔÔÚÖÐÑë½ÚµãÉÏÅŶӡ£´ËÌØÐÔʹµÃRabbitMQÒ×ÓÚʹÓúͲ¿Êð£¬ÊÊÒËÓںܶೡ¾°Èç·ÓÉ¡¢¸ºÔؾùºâ»òÏûÏ¢³Ö¾Ã»¯µÈ£¬ÓÃÏûÏ¢¶ÓÁÐÖ»Ð輸ÐдúÂë¼´¿É¸ã¶¨¡£

µ«ÊÇ£¬ÕâʹµÃËüµÄ¿ÉÀ©Õ¹ÐԲËٶȽÏÂý£¬ÒòΪÖÐÑë½ÚµãÔö¼ÓÁËÑÓ³Ù£¬ÏûÏ¢·â×°ºóÒ²±È½Ï´ó¡£

ÈçÐèÅäÖÃRabbitMQÔòÐèÒªÔÚÄ¿±ê»úÆ÷Éϰ²×°Erlang»·¾³¡£

×ܽá

×îÖÕ£¬ÉÏÊöͬÀà²úÆ·£º

1.¶¼Óи÷×Ô¿Í»§¶ËAPI»òÖ§³Ö¶àÖÖ±à³ÌÓïÑÔ

2.¶¼ÓдóÁ¿µÄÎĵµ

3.¶¼ÌṩÁË»ý¼«µÄÖ§³Ö

4.ActiveMQ¡¢RabbitMQ¡¢MSMQ¡¢Redis¶¼ÐèÒªÆô¶¯·þÎñ½ø³Ì£¬ÕâЩ¶¼¿ÉÒÔ¼à¿ØºÍÅäÖã¬ÆäËû¼¸¸ö¾ÍÓÐÎÊÌâÁË

5.¶¼Ïà¶ÔÌṩÁËÁ¼ºÃµÄ¿É¿¿ÐÔ£¨Ò»ÖÂÐÔ£©¡¢À©Õ¹ÐԺ͸ºÔؾùºâ£¬µ±È»»¹ÓÐÐÔÄÜ

ÏÂÃæÊÇÍøÓѵĶÔËÄÖÖÏûÏ¢¶ÓÁеľßÌå²âÊÔ½á¹û£¬ÏÔʾµÄÊÇ·¢ËͺͽÓÊܵÄÿÃëÖÓµÄÏûÏ¢Êý£¬Õû¸ö¹ý³Ì¹²²úÉú1°ÙÍòÌõ1KµÄÏûÏ¢£¬²âÊÔµÄÖ´ÐÐÊÇÔÚWIndows VistaÉϽøÐеġ££¨Óдý×Ô¼ºÑéÖ¤£©

ÈçÉÏͼËù¼û£¬ZeroMQºÍÆäËûµÄ²»ÊÇÒ»¸ö¼¶±ð£¬ËüµÄÐÔÄܾªÈ˵ĸߡ£½áÂÛºÜÇå³þ£ºÈç¹ûÏ£ÍûÒ»¸öÓ¦ÓóÌÐò·¢ËÍÏûÏ¢Ô½¿ìÔ½ºÃ£¬Ñ¡ÔñZeroMQ£¬²¢ÇÒÔÚÄ㲻̫ÔÚÒâżȻ»á¶ªÊ§Ä³Ð©ÏûÏ¢µÄÇé¿öϸüÓмÛÖµ¡£

RabbitMQΪºÎ»á³öÏÖ

»òÕß˵AMPQΪºÎ»á³öÏÖ£¬ËüµÄÓ¦Óó¡¾°ÓÖÊÇʲô£¿

½â¾öʲôÎÊÌâ

ÄãÊÇ·ñÓöµ½¹ýÁ½¸ö£¨¶à¸ö£©ÏµÍ³¼äÐèҪͨ¹ý¶¨Ê±ÈÎÎñÀ´Í¬²½Ä³Ð©Êý¾Ý£¿ÄãÊÇ·ñÔÚΪÒ칹ϵͳµÄ²»Í¬½ø³Ì¼äÏ໥µ÷Óá¢Í¨Ñ¶µÄÎÊÌâ¶ø¿àÄÕ¡¢ÕõÔú£¿

ÔÚWebÓ¦Óø߲¢·¢»·¾³Ï£¬ÓÉÓÚÀ´²»¼°Í¬²½´¦Àí£¬ÇëÇóÍùÍù»á·¢Éú¶ÂÈû¡£±ÈÈç˵£¬´óÁ¿µÄinsert¡¢updateÇëÇóͬʱµ½´ïmysql£¬»á´øÀ´ÎÞÊýµÄÐÐËø±íËø£¬×îºóµ¼ÖÂÇëÇóÊý¹ý¶à£¬´¥·¢too many connections´íÎó¡£

ÏûÏ¢·þÎñÉó¤ÓÚ½â¾ö¶àϵͳ¡¢Ò칹ϵͳ¼äµÄÊý¾Ý½»»»£¨ÏûϢ֪ͨ/ͨѶ£©ÎÊÌ⣬ÄãÒ²¿ÉÒÔ°ÑËüÓÃÓÚϵͳ¼ä·þÎñµÄÏ໥µ÷Óã¨RPC£©Í¨¹ýʹÓÃÏûÏ¢¶ÓÁУ¬ÎÒÃÇ¿ÉÒÔÒì²½´¦ÀíÇëÇ󣬴Ӷø»º½âϵͳµÄѹÁ¦¡£

Ó¦Óó¡¾°

¶ÔÓÚÒ»¸ö´óÐ͵ÄÈí¼þϵͳÀ´Ëµ£¬Ëü»áÓкܶàµÄ×é¼þ»òÕß˵ģ¿é»òÕß˵×Óϵͳ»òÕߣ¨Subsystem or Component or Submodule£©¡£ÄÇôÕâЩģ¿éµÄÈçºÎͨÐÅ£¿ÕâºÍ´«Í³µÄIPCÓкܴóµÄÇø±ð¡£´«Í³µÄIPCºÜ¶à¶¼ÊÇÔÚµ¥Ò»ÏµÍ³Éϵģ¬Ä£¿éñîºÏÐԺܴ󣬲»ÊʺÏÀ©Õ¹£¨Scalability£©£»Èç¹ûʹÓÃsocketÄÇô²»Í¬µÄÄ£¿éµÄÈ·¿ÉÒÔ²¿Êðµ½²»Í¬µÄ»úÆ÷ÉÏ£¬µ«ÊÇ»¹ÊÇÓкܶàÎÊÌâÐèÒª½â¾ö¡£±ÈÈ磺

1.ÐÅÏ¢µÄ·¢ËÍÕߺͽÓÊÕÕßÈçºÎά³ÖÕâ¸öÁ¬½Ó£¬Èç¹ûÒ»·½µÄÁ¬½ÓÖжϣ¬ÕâÆÚ¼äµÄÊý¾ÝÈçºÎ·½Ê½¶ªÊ§£¿

2.ÈçºÎ½µµÍ·¢ËÍÕߺͽÓÊÕÕßµÄñîºÏ¶È£¿

3.ÈçºÎÈÃPriority¸ßµÄ½ÓÊÕÕßÏȽӵ½Êý¾Ý£¿

4.ÈçºÎ×öµ½Load balance£¿ÓÐЧ¾ùºâ½ÓÊÕÕߵĸºÔØ£¿

5.ÈçºÎÓÐЧµÄ½«Êý¾Ý·¢Ë͵½Ïà¹ØµÄ½ÓÊÕÕߣ¿Ò²¾ÍÊÇ˵½«½ÓÊÕÕßsubscribe ²»Í¬µÄÊý¾Ý£¬ÈçºÎ×öÓÐЧµÄfilter¡£

6.ÈçºÎ×öµ½¿ÉÀ©Õ¹£¬ÉõÖÁ½«Õâ¸öͨÐÅÄ£¿é·¢µ½clusterÉÏ£¿

7.ÈçºÎ±£Ö¤½ÓÊÕÕß½ÓÊÕµ½ÁËÍêÕû£¬ÕýÈ·µÄÊý¾Ý£¿

AMDQЭÒé½â¾öÁËÒÔÉϵÄÎÊÌ⣬¶øRabbitMQʵÏÖÁËAMQP¡£

RabbitMQ»ù´¡¸ÅÄî

Ó¦Óó¡¾°¼Ü¹¹

RabbitMQ Server£ºÒ²½Ðbroker server£¬Ëü²»ÊÇÔËËÍʳÎïµÄ¿¨³µ£¬¶øÊÇÒ»ÖÖ´«Êä·þÎñ¡£Ô­»°ÊÇRabbitMQ isn¡¯t a food truck, it¡¯s a delivery service. ËûµÄ½ÇÉ«¾ÍÊÇά»¤Ò»Ìõ´ÓProducerµ½ConsumerµÄ·Ïߣ¬±£Ö¤Êý¾ÝÄܹ»°´ÕÕÖ¸¶¨µÄ·½Ê½½øÐд«Êä¡£µ«ÊÇÕâ¸ö±£Ö¤Ò²²»ÊÇ100%µÄ±£Ö¤£¬µ«ÊǶÔÓÚÆÕͨµÄÓ¦ÓÃÀ´ËµÕâÒѾ­×ã¹»ÁË¡£µ±È»¶ÔÓÚÉÌҵϵͳÀ´Ëµ£¬¿ÉÒÔÔÙ×öÒ»²ãÊý¾ÝÒ»ÖÂÐÔµÄguard£¬¾Í¿ÉÒÔ³¹µ×±£Ö¤ÏµÍ³µÄÒ»ÖÂÐÔÁË¡£

Client A & B£ºÒ²½ÐProducer£¬Êý¾ÝµÄ·¢ËÍ·½¡£Create messages and Publish (Send) them to a broker server (RabbitMQ)¡£Ò»¸öMessageÓÐÁ½¸ö²¿·Ö£ºPayload£¨ÓÐÐ§ÔØºÉ£©ºÍLabel£¨±êÇ©£©¡£Payload¹ËÃû˼Òå¾ÍÊÇ´«ÊäµÄÊý¾Ý£¬LabelÊÇExchangeµÄÃû×Ö»òÕß˵ÊÇÒ»¸ötag£¬ËüÃèÊöÁËpayload£¬¶øÇÒRabbitMQÒ²ÊÇͨ¹ýÕâ¸ölabelÀ´¾ö¶¨°ÑÕâ¸öMessage·¢¸øÄĸöConsumer¡£AMQP½ö½öÃèÊöÁËlabel£¬¶øRabbitMQ¾ö¶¨ÁËÈçºÎʹÓÃÕâ¸ölabelµÄ¹æÔò¡£

Client 1£¬2£¬3£ºÒ²½ÐConsumer£¬Êý¾ÝµÄ½ÓÊÕ·½¡£Consumers attach to a broker server (RabbitMQ) and subscribe to a queue¡£°Ñqueue±È×÷ÊÇÒ»¸öÓÐÃû×ÖµÄÓÊÏä¡£µ±ÓÐMessageµ½´ïij¸öÓÊÏäºó£¬RabbitMQ°ÑËü·¢Ë͸øËüµÄij¸ö¶©ÔÄÕß¼´Consumer¡£µ±È»¿ÉÄÜ»á°Ñͬһ¸öMessage·¢Ë͸øºÜ¶àµÄConsumer¡£ÔÚÕâ¸öMessageÖУ¬Ö»ÓÐpayload£¬labelÒѾ­±»É¾µôÁË¡£¶ÔÓÚConsumerÀ´Ëµ£¬ËüÊDz»ÖªµÀË­·¢Ë͵ÄÕâ¸öÐÅÏ¢µÄ¡£¾ÍÊÇЭÒé±¾Éí²»Ö§³Ö¡£µ«Êǵ±È»ÁËÈç¹ûProducer·¢Ë͵Äpayload°üº¬ÁËProducerµÄÐÅÏ¢¾ÍÁíµ±±ðÂÛÁË¡£

¶ÔÓÚÒ»¸öÊý¾Ý´ÓProducerµ½ConsumerµÄÕýÈ·´«µÝ£¬»¹ÓÐÈý¸ö¸ÅÄîÐèÒªÃ÷È·£ºexchanges, queues and bindings¡£

Exchanges are where producers publish their messages. ÏûÏ¢½»»»»ú£¬ËüÖ¸¶¨ÏûÏ¢°´Ê²Ã´¹æÔò£¬Â·Óɵ½Äĸö¶ÓÁÐ

Queues are where the messages end up and are received by consumers. ÏûÏ¢¶ÓÁÐÔØÌ壬ÿ¸öÏûÏ¢¶¼»á±»Í¶Èëµ½Ò»¸ö»ò¶à¸ö¶ÓÁÐ

Bindings are how the messages get routed from the exchange to particular queues. °ó¶¨£¬ËüµÄ×÷ÓþÍÊǰÑexchangeºÍqueue°´ÕÕ·ÓɹæÔò°ó¶¨ÆðÀ´

Routing Key£ºÂ·Óɹؼü×Ö£¬exchange¸ù¾ÝÕâ¸ö¹Ø¼ü×Ö½øÐÐÏûϢͶµÝ

»¹Óм¸¸ö¸ÅÄîÊÇÉÏÊöͼÖÐûÓбêÃ÷µÄ£¬ÄǾÍÊÇConnection£¨Á¬½Ó£©£¬Channel£¨Í¨µÀ£¬ÆµµÀ£©£¬Vhost£¨ÐéÄâÖ÷»ú£©¡£

Connection£º¾ÍÊÇÒ»¸öTCPµÄÁ¬½Ó¡£ProducerºÍConsumer¶¼ÊÇͨ¹ýTCPÁ¬½Óµ½RabbitMQ ServerµÄ¡£ÒÔºóÎÒÃÇ¿ÉÒÔ¿´µ½£¬³ÌÐòµÄÆðʼ´¦¾ÍÊǽ¨Á¢Õâ¸öTCPÁ¬½Ó¡£

Channel£ºÐéÄâÁ¬½Ó¡£Ëü½¨Á¢ÔÚÉÏÊöµÄTCPÁ¬½ÓÖС£Êý¾ÝÁ÷¶¯¶¼ÊÇÔÚChannelÖнøÐеġ£Ò²¾ÍÊÇ˵£¬Ò»°ãÇé¿öÊdzÌÐòÆðʼ½¨Á¢TCPÁ¬½Ó£¬µÚ¶þ²½¾ÍÊǽ¨Á¢Õâ¸öChannel¡£

Vhost£ºÐéÄâÖ÷»ú£¬Ò»¸öbrokerÀï¿ÉÒÔ¿ªÉè¶à¸övhost£¬ÓÃ×÷²»Í¬Óû§µÄȨÏÞ·ÖÀ롣ÿ¸övirtual host±¾ÖÊÉ϶¼ÊÇÒ»¸öRabbitMQ Server£¬ÓµÓÐËü×Ô¼ºµÄqueue£¬exchagne£¬ºÍbings ruleµÈµÈ¡£Õâ±£Ö¤ÁËÄã¿ÉÒÔÔÚ¶à¸ö²»Í¬µÄapplicationÖÐʹÓÃRabbitMQ¡£

ChannelµÄÑ¡Ôñ

ÄÇô£¬ÎªÊ²Ã´Ê¹ÓÃChannel£¬¶ø²»ÊÇÖ±½ÓʹÓÃTCPÁ¬½Ó£¿

¶ÔÓÚOSÀ´Ëµ£¬½¨Á¢ºÍ¹Ø±ÕTCPÁ¬½ÓÊÇÓдú¼ÛµÄ£¬Æµ·±µÄ½¨Á¢¹Ø±ÕTCPÁ¬½Ó¶ÔÓÚϵͳµÄÐÔÄÜÓкܴóµÄÓ°Ï죬¶øÇÒTCPµÄÁ¬½ÓÊýÒ²ÓÐÏÞÖÆ£¬ÕâÒ²ÏÞÖÆÁËϵͳ´¦Àí¸ß²¢·¢µÄÄÜÁ¦¡£µ«ÊÇ£¬ÔÚTCPÁ¬½ÓÖн¨Á¢ChannelÊÇûÓÐÉÏÊö´ú¼ÛµÄ¡£¶ÔÓÚProducer»òÕßConsumerÀ´Ëµ£¬¿ÉÒÔ²¢·¢µÄʹÓöà¸öChannel½øÐÐPublish»òÕßReceive¡£

ÓÐʵÑé±íÃ÷£¬1sµÄÊý¾Ý¿ÉÒÔPublish10KµÄÊý¾Ý°ü¡£µ±È»¶ÔÓÚ²»Í¬µÄÓ²¼þ»·¾³£¬²»Í¬µÄÊý¾Ý°ü´óСÕâ¸öÊý¾Ý¿Ï¶¨²»Ò»Ñù£¬µ«ÊÇÎÒÖ»Ïë˵Ã÷£¬¶ÔÓÚÆÕͨµÄConsumer»òÕßProducerÀ´Ëµ£¬ÕâÒѾ­×ã¹»ÁË¡£Èç¹û²»¹»Óã¬Ä㿼ÂǵÄÓ¦¸ÃÊÇÈçºÎϸ»¯splitÄãµÄÉè¼Æ¡£

ÏûÏ¢¶ÓÁÐÖ´Ðйý³Ì

1.¿Í»§¶ËÁ¬½Óµ½ÏûÏ¢¶ÓÁзþÎñÆ÷£¬´ò¿ªÒ»¸öChannel¡£

2.¿Í»§¶ËÉùÃ÷Ò»¸öExchange£¬²¢ÉèÖÃÏà¹ØÊôÐÔ¡£

3.¿Í»§¶ËÉùÃ÷Ò»¸öQueue£¬²¢ÉèÖÃÏà¹ØÊôÐÔ¡£

4.¿Í»§¶ËʹÓÃRouting key£¬ÔÚExchangeºÍQueueÖ®¼ä½¨Á¢ºÃ°ó¶¨¹ØÏµ¡£

5.¿Í»§¶ËͶµÝÏûÏ¢µ½Exchange¡£

Exchange½ÓÊÕµ½ÏûÏ¢ºó£¬¾Í¸ù¾ÝÏûÏ¢µÄkeyºÍÒѾ­ÉèÖõÄBinding£¬½øÐÐÏûϢ·ÓÉ£¬½«ÏûϢͶµÝµ½Ò»¸ö»ò¶à¸ö¶ÓÁÐÀï¡£ÓÐÈýÖÖÀàÐ͵ÄExchanges£ºdirect£¬fanout£¬topic£¬Ã¿¸öʵÏÖÁ˲»Í¬µÄ·ÓÉËã·¨£¨routing algorithm£©£º

Direct exchange£ºÍêÈ«¸ù¾Ýkey½øÐÐͶµÝµÄ½Ð×öDirect½»»»»ú¡£Èç¹ûRouting keyÆ¥Åä, ÄÇôMessage¾Í»á±»´«µÝµ½ÏàÓ¦µÄqueueÖС£ÆäʵÔÚqueue´´½¨Ê±£¬Ëü»á×Ô¶¯µÄÒÔqueueµÄÃû×Ö×÷Ϊrouting keyÀ´°ó¶¨ÄǸöexchange¡£ÀýÈ磬°ó¶¨Ê±ÉèÖÃÁËRouting keyΪ¡±abc¡±£¬ÄÇô¿Í»§¶ËÌá½»µÄÏûÏ¢£¬Ö»ÓÐÉèÖÃÁËkeyΪ¡±abc¡±µÄ²Å»áͶµÝµ½¶ÓÁС£

Fanout exchange£º²»ÐèÒªkeyµÄ½Ð×öFanout½»»»»ú¡£Ëü²ÉÈ¡¹ã²¥Ä£Ê½£¬Ò»¸öÏûÏ¢½øÀ´Ê±£¬Í¶µÝµ½Óë¸Ã½»»»»ú°ó¶¨µÄËùÓжÓÁС£

Topic exchange£º¶Ôkey½øÐÐģʽƥÅäºó½øÐÐͶµÝµÄ½Ð×öTopic½»»»»ú¡£±ÈÈç·ûºÅ¡±#¡±Æ¥ÅäÒ»¸ö»ò¶à¸ö´Ê£¬·ûºÅ¡±¡±Æ¥ÅäÕýºÃÒ»¸ö´Ê¡£ÀýÈ硱abc.#¡±Æ¥Å䡱abc.def.ghi¡±£¬¡±abc.¡±Ö»Æ¥Å䡱abc.def¡±¡£

¸ü¶àÏûÏ¢¶ÓÁÐÏà¹ØÉè¼Æ½éÉÜÇë²Î¿¼£º

RabbitMQϵÁжþ£¨¹¹½¨ÏûÏ¢¶ÓÁУ©

RabbitMQϵÁÐÈý £¨ÉîÈëÏûÏ¢¶ÓÁУ©

ÏûÏ¢¶ÓÁеĴ´½¨

ConsumerºÍProcuder¶¼¿ÉÒÔͨ¹ý queue.declare ´´½¨queue¡£¶ÔÓÚij¸öChannelÀ´Ëµ£¬Consumer²»ÄÜdeclareÒ»¸öqueue£¬È´¶©ÔÄÆäËûµÄqueue¡£µ±È»Ò²¿ÉÒÔ´´½¨Ë½ÓеÄqueue¡£ÕâÑùÖ»ÓÐapp±¾Éí²Å¿ÉÒÔʹÓÃÕâ¸öqueue¡£queueÒ²¿ÉÒÔ×Ô¶¯É¾³ý£¬±»±êΪauto-deleteµÄqueueÔÚ×îºóÒ»¸öConsumer unsubscribeºó¾Í»á±»×Ô¶¯É¾³ý¡£ÄÇôÈç¹ûÊÇ´´½¨Ò»¸öÒѾ­´æÔÚµÄqueueÄØ£¿ÄÇô²»»áÓÐÈκεÄÓ°Ïì¡£ÐèҪעÒâµÄÊÇûÓÐÈκεÄÓ°Ï죬Ҳ¾ÍÊÇ˵µÚ¶þ´Î´´½¨Èç¹û²ÎÊýºÍµÚÒ»´Î²»Ò»Ñù£¬ÄÇô¸Ã²Ù×÷ËäÈ»³É¹¦£¬µ«ÊÇqueueµÄÊôÐÔ²¢²»»á±»Ð޸ġ£

ÄÇô˭Ӧ¸Ã¸ºÔð´´½¨Õâ¸öqueueÄØ£¿ÊÇConsumer£¬»¹ÊÇProducer£¿

Èç¹ûqueue²»´æÔÚ£¬µ±È»Consumer²»»áµÃµ½ÈκεÄMessage¡£µ«ÊÇÈç¹ûqueue²»´æÔÚ£¬ÄÇôProducer PublishµÄMessage»á±»¶ªÆú¡£ËùÒÔ£¬»¹ÊÇΪÁËÊý¾Ý²»¶ªÊ§£¬ConsumerºÍProducer¶¼try to create the queue£¡·´Õý²»¹ÜÔõôÑù£¬Õâ¸ö½Ó¿Ú¶¼²»»á³öÎÊÌâ¡£

Queue¶Ôload balanceµÄ´¦ÀíÊÇÍêÃÀµÄ¡£¶ÔÓÚ¶à¸öConsumerÀ´Ëµ£¬RabbitMQ ʹÓÃÑ­»·µÄ·½Ê½£¨round-robin£©µÄ·½Ê½¾ùºâµÄ·¢Ë͸ø²»Í¬µÄConsumer¡£

ÏûÏ¢µÄack»úÖÆ

ĬÈÏÇé¿öÏ£¬Èç¹ûMessage ÒѾ­±»Ä³¸öConsumerÕýÈ·µÄ½ÓÊÕµ½ÁË£¬ÄÇô¸ÃMessage¾Í»á±»´ÓqueueÖÐÒÆ³ý¡£µ±È»Ò²¿ÉÒÔÈÃͬһ¸öMessage·¢Ë͵½ºÜ¶àµÄConsumer¡£

Èç¹ûÒ»¸öqueueû±»ÈκεÄConsumer Subscribe£¨¶©ÔÄ£©£¬ÄÇô£¬Èç¹ûÕâ¸öqueueÓÐÊý¾Ýµ½´ï£¬ÄÇôÕâ¸öÊý¾Ý»á±»cache£¬²»»á±»¶ªÆú¡£µ±ÓÐConsumerʱ£¬Õâ¸öÊý¾Ý»á±»Á¢¼´·¢Ë͵½Õâ¸öConsumer£¬Õâ¸öÊý¾Ý±»ConsumerÕýÈ·ÊÕµ½Ê±£¬Õâ¸öÊý¾Ý¾Í±»´ÓqueueÖÐɾ³ý¡£

ÄÇôʲôÊÇÕýÈ·ÊÕµ½ÄØ£¿Í¨¹ýack¡£

ÿ¸öMessage¶¼Òª±»acknowledged£¨È·ÈÏ£¬ack£©¡£ÎÒÃÇ¿ÉÒÔÏÔʾµÄÔÚ³ÌÐòÖÐÈ¥ack£¨ConsumerµÄbasic.ack£©£¬Ò²¿ÉÒÔ×Ô¶¯µÄack£¨¶©ÔÄQueueʱָ¶¨auto_ackΪtrue£©¡£

Èç¹ûÓÐÊý¾ÝûÓб»ack£¬ÄÇôRabbitMQ Server»á°ÑÕâ¸öÐÅÏ¢·¢Ë͵½ÏÂÒ»¸öConsumer¡£

Èç¹ûÕâ¸öappÓÐbug£¬Íü¼ÇÁËack£¬ÄÇôRabbitMQ Server²»»áÔÙ·¢ËÍÊý¾Ý¸øËü£¬ÒòΪServerÈÏΪÕâ¸öConsumer´¦ÀíÄÜÁ¦ÓÐÏÞ¡£

¶øÇÒackµÄ»úÖÆ¿ÉÒÔÆðµ½ÏÞÁ÷µÄ×÷Óã¨Benefit to throttling£©£ºÔÚConsumer´¦ÀíÍê³ÉÊý¾Ýºó·¢ËÍack£¬ÉõÖÁÔÚ¶îÍâµÄÑÓʱºó·¢ËÍack£¬½«ÓÐЧµÄbalance ConsumerµÄload¡£

µ±È»¶ÔÓÚʵ¼ÊµÄÀý×Ó£¬±ÈÈçÎÒÃÇ¿ÉÄÜ»á¶ÔijЩÊý¾Ý½øÐÐmerge£¬±ÈÈçmerge 4sÄÚµÄÊý¾Ý£¬È»ºósleep 4sºóÔÙ»ñÈ¡Êý¾Ý¡£ÌرðÊÇÔÚ¼àÌýϵͳµÄstate£¬ÎÒÃDz»Ï£ÍûËùÓеÄstateʵʱµÄ´«µÝÉÏÈ¥£¬¶øÊÇÏ£ÍûÓÐÒ»¶¨µÄÑÓʱ¡£ÕâÑù¿ÉÒÔ¼õÉÙijЩIO£¬¶øÇÒÖÕ¶ËÓû§Ò²²»»á¸Ð¾õµ½¡£

ûÓÐÕýÈ·ÏìӦĨ£¿

Èç¹ûConsumer½ÓÊÕÁËÒ»¸öÏûÏ¢¾Í»¹Ã»Óз¢ËÍack¾ÍÓëRabbitMQ¶Ï¿ªÁË£¬RabbitMQ»áÈÏΪÕâÌõÏûϢûÓÐͶµÝ³É¹¦»áÖØÐÂͶµÝµ½±ðµÄConsumer¡£

Èç¹ûConsumer±¾ÉíÂß¼­ÓÐÎÊÌâûÓз¢ËÍackµÄ´¦Àí£¬RabbitMQ²»»áÔÙÏò¸ÃConsumer·¢ËÍÏûÏ¢¡£RabbitMQ»áÈÏΪÕâ¸öConsumer»¹Ã»Óд¦ÀíÍêÉÏÒ»ÌõÏûÏ¢£¬Ã»ÓÐÄÜÁ¦¼ÌÐø½ÓÊÕÐÂÏûÏ¢¡£

ÎÒÃÇ¿ÉÒÔÉÆ¼ÓÀûÓÃÕâÒ»»úÖÆ£¬Èç¹ûÐèÒª´¦Àí¹ý³ÌÊÇÏ൱¸´Ôӵģ¬Ó¦ÓóÌÐò¿ÉÒÔÑÓ³Ù·¢ËÍackÖ±µ½´¦ÀíÍê³ÉΪֹ¡£Õâ¿ÉÒÔÓÐЧ¿ØÖÆÓ¦ÓóÌÐòÕâ±ßµÄ¸ºÔØ£¬²»ÖÂÓÚ±»´óÁ¿ÏûÏ¢³å»÷¡£

ÏûÏ¢¾Ü¾ø

ÓÉÓÚÒª¾Ü¾øÏûÏ¢£¬ËùÒÔackÏìÓ¦ÏûÏ¢»¹Ã»Óз¢³ö£¬ÕâÀï¾Ü¾øÏûÏ¢¿ÉÒÔÓÐÁ½ÖÖÑ¡Ôñ:

ConsumerÖ±½Ó¶Ï¿ªRabbitMQÕâÑùRabbitMQ½«°ÑÕâÌõÏûÏ¢ÖØÐÂÅŶӣ¬½»ÓÉÆäËüConsumer´¦Àí¡£Õâ¸ö·½·¨ÔÚRabbitMQ¸÷°æ±¾¶¼Ö§³Ö£¬ÕâÑù×öµÄ»µ´¦¾ÍÊÇÁ¬½Ó¶Ï¿ªÔö¼ÓÁËRabbitMQµÄ¶îÍ⸺µ££¬ÌرðÊÇconsumer³öÏÖÒ쳣ÿÌõÏûÏ¢¶¼ÎÞ·¨Õý³£´¦ÀíµÄʱºò¡£

RabbitMQ 2.0.0¿ÉÒÔʹÓà basic.reject ÃüÁÊÕµ½¸ÃÃüÁîRabbitMQ»áÖØÐÂͶµÝµ½ÆäËüµÄConsumer¡£Èç¹ûÉèÖÃrequeueΪfalse£¬RabbitMQ»áÖ±½Ó½«ÏûÏ¢´ÓqueueÖÐÒÆ³ý¡£

Æäʵ»¹ÓÐÒ»ÖÖÑ¡Ôñ¾ÍÊÇÖ±½ÓºöÂÔÕâÌõÏûÏ¢²¢·¢ËÍACK£¬µ±ÄãÃ÷È·ÖªµÀÕâÌõÏûÏ¢ÊÇÒì³£µÄ²»»áÓÐConsumerÄÜ´¦Àí£¬¿ÉÒÔÕâÑù×öÅׯúÒì³£Êý¾Ý¡£

ΪʲôҪ·¢ËÍbasic.rejectÏûÏ¢¶ø²»ÊÇACK£¿RabbitMQºóÃæµÄ°æ±¾¿ÉÄÜ»áÒýÈ롱dead letter¡±¶ÓÁУ¬Èç¹ûÏëÀûÓÃdead letter×öµãÎÄÕ¾ÍʹÓÃbasic.reject²¢ÉèÖÃrequeueΪfalse¡£

ÏûÏ¢³Ö¾Ã»¯

RabbitMQÖ§³ÖÏûÏ¢µÄ³Ö¾Ã»¯£¬Ò²¾ÍÊÇÊý¾ÝдÔÚ´ÅÅÌÉÏ£¬ÎªÁËÊý¾Ý°²È«¿¼ÂÇ£¬´ó¶àÊýÓû§¶¼»áÑ¡Ôñ³Ö¾Ã»¯¡£ÏûÏ¢¶ÓÁг־û¯°üÀ¨3¸ö²¿·Ö£º

1.Exchange³Ö¾Ã»¯£¬ÔÚÉùÃ÷ʱָ¶¨durable => 1

2.Queue³Ö¾Ã»¯£¬ÔÚÉùÃ÷ʱָ¶¨durable => 1

3.ÏûÏ¢³Ö¾Ã»¯£¬ÔÚͶµÝʱָ¶¨delivery_mode => 2£¨1ÊǷdz־û¯£©

ÈôExchangeºÍQueue¶¼Êdz־û¯µÄ£¬ÄÇôËüÃÇÖ®¼äµÄBindingÒ²Êdz־û¯µÄ£»¶øExchangeºÍQueueÁ½ÕßÖ®¼äÓÐÒ»¸ö³Ö¾Ã»¯£¬Ò»¸ö·Ç³Ö¾Ã»¯£¬¾Í²»ÔÊÐí½¨Á¢°ó¶¨¡£

Consumer´Ódurable queueÖÐÈ¡»ØÒ»ÌõÏûÏ¢Ö®ºó²¢·¢»ØÁËackÏûÏ¢£¬RabbitMQ¾Í»á½«Æä±ê¼Ç£¬·½±ãºóÐøÀ¬»ø»ØÊÕ¡£Èç¹ûÒ»Ìõ³Ö¾Ã»¯µÄÏûϢûÓб»consumerÈ¡×ߣ¬RabbitMQÖØÆôÖ®ºó»á×Ô¶¯Öؽ¨exchangeºÍqueue(ÒÔ¼°bingding¹ØÏµ)£¬ÏûϢͨ¹ý³Ö¾Ã»¯ÈÕÖ¾ÖØ½¨ÔٴνøÈë¶ÔÓ¦µÄqueues£¬exchanges¡£

RabbitMQ¼¯Èº

ÓÉÓÚRabbitMQÊÇÓÃerlang¿ª·¢µÄ£¬RabbitMQÍêÈ«ÒÀÀµerlangµÄCluster£¬ÒòΪerlangÌìÉú¾ÍÊÇÒ»ÃÅ·Ö²¼Ê½ÓïÑÔ£¬¼¯Èº·Ç³£·½±ã£¬µ«Æä±¾Éí²¢²»Ö§³Ö¸ºÔؾùºâ¡£ErlangµÄ¼¯ÈºÖи÷½ÚµãÊǾ­Óɹý³ÌÒ»¸ömagic cookieÀ´ÊµÏֵģ¬Õâ¸öcookie´æ·ÅÔÚ $home/.erlang.cookieÖÐ(ÏñÎÒµÄrootÓû§°²×°µÄ¾ÍÊÇ·ÅÔÚÎÒµÄroot/.erlang.cookieÖÐ)£¬ÎļþÊÇ400µÄȨÏÞ¡£ËùÒÔ±ØÐë±£Ö¤¸÷½ÚµãcookieÄÚÈÝÒ»Ö£¬²»È»½ÚµãÖ®¼ä¾ÍÎÞ·¨Í¨ÐÅ¡£

¼¯Èº·½Ê½

Rabbitmq¼¯Èº´ó¸Å·ÖΪ¶þÖÖ·½Ê½£º

1.ÆÕͨģʽ£ºÄ¬Èϵļ¯ÈºÄ£Ê½¡£

¶ÔÓÚQueueÀ´Ëµ£¬ÏûϢʵÌåÖ»´æÔÚÓÚÆäÖÐÒ»¸ö½Úµã£¬A¡¢BÁ½¸ö½Úµã½öÓÐÏàͬµÄÔªÊý¾Ý£¬¼´¶ÓÁнṹ£¬µ«¶ÓÁеÄÔªÊý¾Ý½ö±£´æÓÐÒ»·Ý£¬¼´´´½¨¸Ã¶ÓÁеÄrabbitmq½Úµã£¨A½Úµã£©£¬µ±A½Úµãå´»ú£¬Äã¿ÉÒÔÈ¥ÆäB½Úµã²é¿´£¬./rabbitmqctl list_queues ·¢ÏָöÓÁÐÒѾ­¶ªÊ§£¬µ«ÉùÃ÷µÄexchange»¹´æÔÚ¡£

µ±ÏûÏ¢½øÈëA½ÚµãµÄQueueÖкó£¬consumer´ÓB½ÚµãÀ­È¡Ê±£¬RabbitMQ»áÁÙʱÔÚA¡¢B¼ä½øÐÐÏûÏ¢´«Ê䣬°ÑAÖеÄÏûϢʵÌåÈ¡³ö²¢¾­¹ýB·¢Ë͸øconsumer£¬ËùÒÔconsumerӦƽ¾ùÁ¬½Óÿһ¸ö½Úµã£¬´ÓÖÐÈ¡ÏûÏ¢¡£

¸Ãģʽ´æÔÚÒ»¸öÎÊÌâ¾ÍÊǵ±A½Úµã¹ÊÕϺó£¬B½ÚµãÎÞ·¨È¡µ½A½ÚµãÖл¹Î´Ïû·ÑµÄÏûϢʵÌå¡£Èç¹û×öÁ˶ÓÁг־û¯»òÏûÏ¢³Ö¾Ã»¯£¬ÄÇôµÃµÈA½Úµã»Ö¸´£¬È»ºó²Å¿É±»Ïû·Ñ£¬²¢ÇÒÔÚA½Úµã»Ö¸´Ö®Ç°ÆäËü½Úµã²»ÄÜÔÙ´´½¨A½ÚµãÒѾ­´´½¨¹ýµÄ³Ö¾Ã¶ÓÁУ»Èç¹ûûÓг־û¯µÄ»°£¬ÏûÏ¢¾Í»áʧ¶ª¡£

ÕâÖÖģʽ¸üÊʺϷdz־û¯¶ÓÁУ¬Ö»ÓиöÓÁÐÊǷdz־õģ¬¿Í»§¶Ë²ÅÄÜÖØÐÂÁ¬½Óµ½¼¯ÈºÀïµÄÆäËû½Úµã£¬²¢ÖØÐ´´½¨¶ÓÁС£¼ÙÈç¸Ã¶ÓÁÐÊdz־û¯µÄ£¬ÄÇôΨһ°ì·¨Êǽ«¹ÊÕϽڵã»Ö¸´ÆðÀ´¡£

2.¾µÏñģʽ£º°ÑÐèÒªµÄ¶ÓÁÐ×ö³É¾µÏñ¶ÓÁУ¬´æÔÚÓÚ¶à¸ö½Úµã¡£

¸Ãģʽ½â¾öÁËÆÕͨģʽµÄÎÊÌ⣬ÆäʵÖʲ»Í¬Ö®´¦ÔÚÓÚ£¬ÏûϢʵÌå»áÖ÷¶¯ÔÚ¾µÏñ½Úµã¼äͬ²½£¬¶ø²»ÊÇÔÚconsumerÈ¡Êý¾ÝʱÁÙʱÀ­È¡¡£

¸Ãģʽ´øÀ´µÄ¸±×÷ÓÃÒ²ºÜÃ÷ÏÔ£¬³ýÁ˽µµÍϵͳÐÔÄÜÍ⣬Èç¹û¾µÏñ¶ÓÁÐÊýÁ¿¹ý¶à£¬¼ÓÖ®´óÁ¿µÄÏûÏ¢½øÈ룬¼¯ÈºÄÚ²¿µÄÍøÂç´ø¿í½«»á±»ÕâÖÖͬ²½Í¨Ñ¶´ó´óÏûºÄµô¡£

ËùÒÔÔÚ¶Ô¿É¿¿ÐÔÒªÇó½Ï¸ßµÄ³¡ºÏÖÐÊÊÓã¬Ò»¸ö¶ÓÁÐÏë×ö³É¾µÏñ¶ÓÁУ¬ÐèÒªÏÈÉèÖÃpolicy£¬È»ºó¿Í»§¶Ë´´½¨¶ÓÁеÄʱºò£¬rabbitmq¼¯Èº¸ù¾Ý¡°¶ÓÁÐÃû³Æ¡±×Ô¶¯ÉèÖÃÊÇÆÕͨ¼¯ÈºÄ£Ê½»ò¾µÏñ¶ÓÁС£¾ßÌåÈçÏ£º

¶ÓÁÐͨ¹ý²ßÂÔÀ´Ê¹ÄܾµÏñ¡£²ßÂÔÄÜÔÚÈκÎʱ¿Ì¸Ä±ä£¬rabbitmq¶ÓÁÐÒ²½ü¿ÉÄܵĽ«¶ÓÁÐËæ×ŲßÂԱ仯¶ø±ä»¯£»·Ç¾µÏñ¶ÓÁк;µÏñ¶ÓÁÐÖ®¼äÊÇÓÐÇø±ðµÄ£¬Ç°Õßȱ·¦¶îÍâµÄ¾µÏñ»ù´¡ÉèÊ©£¬Ã»ÓÐÈκÎslave£¬Òò´Ë»áÔËÐеøü¿ì¡£

ΪÁËʹ¶ÓÁгÆÎª¾µÏñ¶ÓÁУ¬Ä㽫»á´´½¨Ò»¸ö²ßÂÔÀ´Æ¥Åä¶ÓÁУ¬ÉèÖòßÂÔÓÐÁ½¸ö¼ü¡°ha-modeºÍ ha-params£¨¿ÉÑ¡£©¡±¡£ha-params¸ù¾Ýha-modeÉèÖò»Í¬µÄÖµ£¬ÏÂÃæ±í¸ñ˵Ã÷ÕâЩkeyµÄÑ¡Ïî¡£

ΪʲôRabbitMQ²»½«¶ÓÁи´ÖƵ½¼¯ÈºÀïÿ¸ö½ÚµãÄØ£¿ÕâÓëËüµÄ¼¯ÈºµÄÉè¼Æ±¾ÒâÏà³åÍ»£¬¼¯ÈºµÄÉè¼ÆÄ¿µÄ¾ÍÊÇÔö¼Ó¸ü¶à½Úµãʱ£¬ÄÜÏßÐÔµÄÔö¼ÓÐÔÄÜ£¨CPU¡¢Äڴ棩ºÍÈÝÁ¿£¨ÄÚ´æ¡¢´ÅÅÌ£©¡£ÀíÓÉÈçÏ£º

Storage Space: If every cluster node had a full copy of every queue, adding nodes wouldn¡¯t give you more storage capacity. For example, if one node could store 1GB of messages, adding two more nodes would simply give you two more copies of the same 1GB of messages.£¨´æ´¢¿Õ¼ä£ºÈç¹ûÿ¸ö¼¯Èº½Úµãÿ¸ö¶ÓÁеÄÒ»¸öÍêÕû¸±±¾£¬Ôö¼Ó½ÚµãÐèÒª¸ü¶àµÄ´æ´¢ÈÝÁ¿¡£ÀýÈ磬Èç¹ûÒ»¸ö½Úµã¿ÉÒÔ´æ´¢1 gbµÄÏûÏ¢£¬Ìí¼ÓÁ½¸ö½ÚµãÐèÒªÁ½·ÝÏàͬµÄ1gbµÄÏûÏ¢£©

Performance: Publishing messages would require replicating those messages to every cluster node. For durable messages that would require triggering disk activity on all nodes for every message. Your network and disk load would increase every time you added a node, keeping the performance of the cluster the same (or possibly worse).£¨ÐÔÄÜ£º·¢²¼ÏûÏ¢ÐèÒª½«ÕâЩÐÅÏ¢¸´ÖƵ½Ã¿¸ö¼¯Èº½Úµã¡£¶Ô³Ö¾ÃÏûÏ¢£¬ÒªÇóΪÿÌõÏûÏ¢´¥·¢´ÅÅ̻ÔÚËùÓнڵãÉÏ¡£Ã¿´ÎÌí¼ÓÒ»¸ö½Úµã¶¼»á´øÀ´ ÍøÂçºÍ´ÅÅ̵ĸºÔØ¡££©

µ±È»RabbitMQа汾¼¯ÈºÒ²Ö§³Ö¶ÓÁи´ÖÆ£¨ÓиöÑ¡Ïî¿ÉÒÔÅäÖã©¡£±ÈÈçÔÚÓÐÎå¸ö½ÚµãµÄ¼¯ÈºÀ¿ÉÒÔÖ¸¶¨Ä³¸ö¶ÓÁеÄÄÚÈÝÔÚ2¸ö½ÚµãÉϽøÐд洢£¬´Ó¶øÔÚÐÔÄÜÓë¸ß¿ÉÓÃÐÔÖ®¼äÈ¡µÃÒ»¸öƽºâ£¨Ó¦¸Ã¾ÍÊÇÖ¸¾µÏñģʽ£©¡£

¼¯Èº½Úµã

RabbitMQµÄ¼¯Èº½Úµã°üÀ¨ÄÚ´æ½Úµã¡¢´ÅÅ̽ڵ㡣¹ËÃû˼ÒåÄÚ´æ½Úµã¾ÍÊǽ«ËùÓÐÊý¾Ý·ÅÔÚÄڴ棬´ÅÅ̽ڵ㽫Êý¾Ý·ÅÔÚ´ÅÅÌ¡£²»¹ý£¬Èç¹ûÔÚͶµÝÏûϢʱ£¬´ò¿ªÁËÏûÏ¢µÄ³Ö¾Ã»¯£¬ÄÇô¼´Ê¹ÊÇÄÚ´æ½Úµã£¬Êý¾Ý»¹Êǰ²È«µÄ·ÅÔÚ´ÅÅÌ¡£

Ò»¸örabbitmq¼¯ ȺÖпÉÒÔ¹²Ïí user£¬vhost£¬queue£¬exchangeµÈ£¬ËùÓеÄÊý¾ÝºÍ״̬¶¼ÊDZØÐëÔÚËùÓнڵãÉϸ´ÖƵģ¬Ò»¸öÀýÍâÊÇ£¬ÄÇЩµ±Ç°Ö»ÊôÓÚ´´½¨ËüµÄ½ÚµãµÄÏûÏ¢¶ÓÁУ¬¾¡¹ÜËüÃǿɼûÇҿɱ»ËùÓнڵã¶ÁÈ¡¡£rabbitmq½Úµã¿ÉÒÔ¶¯Ì¬µÄ¼ÓÈëµ½¼¯ÈºÖУ¬Ò»¸ö½ÚµãËü¿ÉÒÔ¼ÓÈëµ½¼¯ÈºÖУ¬Ò²¿ÉÒÔ´Ó¼¯Èº»·¼¯Èº»á½øÐÐÒ»¸ö»ù±¾µÄ¸ºÔؾùºâ¡£

¼¯ÈºÖÐÓÐÁ½Öֽڵ㣺

1.ÄÚ´æ½Úµã£ºÖ»±£´æ×´Ì¬µ½Äڴ棨һ¸öÀýÍâµÄÇé¿öÊÇ£º³Ö¾ÃµÄqueueµÄ³Ö¾ÃÄÚÈݽ«±»±£´æµ½disk£©

2.´ÅÅ̽ڵ㣺±£´æ×´Ì¬µ½ÄÚ´æºÍ´ÅÅÌ¡£

ÄÚ´æ½ÚµãËäÈ»²»Ð´Èë´ÅÅÌ£¬µ«ÊÇËüÖ´ÐбȴÅÅ̽ڵãÒªºÃ¡£¼¯ÈºÖУ¬Ö»ÐèÒªÒ»¸ö´ÅÅ̽ڵãÀ´±£´æ×´Ì¬ ¾Í×ã¹»ÁËÈç¹û¼¯ÈºÖÐÖ»ÓÐÄÚ´æ½Úµã£¬ÄÇô²»ÄÜÍ£Ö¹ËüÃÇ£¬·ñÔòËùÓеÄ״̬£¬ÏûÏ¢µÈ¶¼»á¶ªÊ§¡£

   
30345 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù