±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚÍøÂ磬±¾ÎÄÖ÷Òª½éÉÜÁË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.´ÅÅ̽ڵ㣺±£´æ×´Ì¬µ½ÄÚ´æºÍ´ÅÅÌ¡£
ÄÚ´æ½ÚµãËäÈ»²»Ð´Èë´ÅÅÌ£¬µ«ÊÇËüÖ´ÐбȴÅÅ̽ڵãÒªºÃ¡£¼¯ÈºÖУ¬Ö»ÐèÒªÒ»¸ö´ÅÅ̽ڵãÀ´±£´æ×´Ì¬ ¾Í×ã¹»ÁËÈç¹û¼¯ÈºÖÐÖ»ÓÐÄÚ´æ½Úµã£¬ÄÇô²»ÄÜÍ£Ö¹ËüÃÇ£¬·ñÔòËùÓеÄ״̬£¬ÏûÏ¢µÈ¶¼»á¶ªÊ§¡£
|