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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
·Ö²¼Ê½ÏµÍ³ÏûÏ¢Öмä¼þ¡ª¡ªRabbitMQµÄʹÓûù´¡Æª
 
×÷ÕߣºÀÏÓÚ
  1988  次浏览      27
 2021-3-31 
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁËÏûÏ¢Öмä¼þÊÇʲô£¿RabbitMQ¸ÅÊö¡¢RabbitMQʹÓÃÏà¹ØÄÚÈÝ¡£
À´×ÔÓÚ²©¿ÍÔ°,ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

ǰÑÔ#

ÎÒÊÇÔÚ½â¾ö·Ö²¼Ê½ÊÂÎñµÄÒ»ÖÂÐÔÎÊÌâʱÁ˽⵽RabbitMQµÄ£¬µ±Ê±Ö÷ÒªÊÇÒª»ùÓÚRabbitMQÀ´ÊµÏÖÎÒÃÇ·Ö²¼Ê½ÏµÍ³Ö®¼ä¶ÔÓÐÊÂÎñ¿É¿¿ÐÔÒªÇóµÄϵͳ¼äͨÐŵġ£¹ØÓÚ·Ö²¼Ê½ÊÂÎñÒ»ÖÂÐÔÎÊÌâ¼°Æä³£¼ûµÄ½â¾ö·½°¸£¬¿ÉÒÔ¿´ÎÒÁíһƪ²©¿Í¡£Ìáµ½RabbitMQ£¬²»ÄÑÏëµ½µÄ¼¸¸ö¹Ø¼ü×Ö:ÏûÏ¢Öмä¼þ¡¢ÏûÏ¢¶ÓÁС£¶øÏûÏ¢¶ÓÁв»ÓÉÈÃÎÒÏëµ½£¬µ±Ê±ÔÚ´óѧѧϰ²Ù×÷ϵͳÕâÃſΣ¬ÏûÏ¢¶ÓÁв»ÄÑÏëµ½Éú²úÕßÏû·ÑÕßģʽ¡£(PS:²Ù×÷ϵͳÕâÃſγÌÕæµÄºÜºÃÒ²ºÜÖØÒª£¬ÆäÖеÄһЩ˼ÏëÔÚÎÒ¹¤×÷µÄºÜ³¤Ò»¶Îһʱ¼äÄÚ¸øÁËÎҺܴó°ïÖúºÍÆô·¢£¬¸øÎÒÌṩÁËÐí¶à½â¾öÎÊÌâµÄ˼·¡£Ç¿ÁÒ½¨Òéÿһ¸ö³ÌÐòÔ±¶¼È¥Ñ§Ò»Ñ§²Ù×÷ϵͳ£¡)

Ò» ÏûÏ¢Öмä¼þ#

1.1 ¼ò½é#

ÏûÏ¢Öмä¼þÒ²¿ÉÒÔ³ÆÏûÏ¢¶ÓÁУ¬ÊÇÖ¸ÓøßЧ¿É¿¿µÄÏûÏ¢´«µÝ»úÖÆ½øÐÐÓëÆ½Ì¨Î޹صÄÊý¾Ý½»Á÷£¬²¢»ùÓÚÊý¾ÝͨÐÅÀ´½øÐзֲ¼Ê½ÏµÍ³µÄ¼¯³É¡£Í¨¹ýÌṩÏûÏ¢´«µÝºÍÏûÏ¢¶ÓÁÐÄ£ÐÍ£¬¿ÉÒÔÔÚ·Ö²¼Ê½»·¾³ÏÂÀ©Õ¹½ø³ÌµÄͨÐÅ¡£µ±ÏÂÖ÷Á÷µÄÏûÏ¢Öмä¼þÓÐRabbitMQ¡¢Kafka¡¢ActiveMQ¡¢RocketMQµÈ¡£ÆäÄÜÔÚ²»Í¬Æ½Ì¨Ö®¼ä½øÐÐͨÐÅ£¬³£ÓÃÀ´ÆÁ±Î¸÷ÖÖÆ½Ì¨Ð­ÒéÖ®¼äµÄÌØÐÔ£¬ÊµÏÖÓ¦ÓóÌÐòÖ®¼äµÄЭͬ¡£ÆäÓŵãÔÚÓÚÄܹ»ÔÚ¿Í»§¶ËºÍ·þÎñÆ÷Ö®¼ä½øÐÐͬ²½ºÍÒì²½µÄÁ¬½Ó£¬²¢ÇÒÔÚÈκÎʱ¿Ì¶¼¿ÉÒÔ½«ÏûÏ¢½øÐд«ËͺÍת·¢¡£ÊÇ·Ö²¼Ê½ÏµÍ³Öзdz£ÖØÒªµÄ×é¼þ£¬Ö÷ÒªÓÃÀ´½â¾öÓ¦ÓÃñîºÏ¡¢Ò첽ͨÐÅ¡¢Á÷Á¿Ï÷·åµÈÎÊÌâ¡£

1.2 ×÷ÓÃ#

ÏûÏ¢Öмä¼þ¼¸´óÖ÷Òª×÷ÓÃÈçÏÂ:

½âñî

ÈßÓà(´æ´¢)

À©Õ¹ÐÔ

Ï÷·å

¿É»Ö¸´ÐÔ

˳Ðò±£Ö¤

»º³å

Ò첽ͨÐÅ

1.3 ÏûÏ¢Öмä¼þµÄÁ½ÖÖģʽ#

1.3.1 P2Pģʽ

P2Pģʽ°üº¬Èý¸ö½ÇÉ«£ºÏûÏ¢¶ÓÁУ¨Queue£©£¬·¢ËÍÕß(Sender)£¬½ÓÊÕÕß(Receiver)¡£Ã¿¸öÏûÏ¢¶¼±»·¢Ë͵½Ò»¸öÌØ¶¨µÄ¶ÓÁУ¬½ÓÊÕÕß´Ó¶ÓÁÐÖлñÈ¡ÏûÏ¢¡£¶ÓÁб£Áô×ÅÏûÏ¢£¬Ö±µ½ËûÃDZ»Ïû·Ñ»ò³¬Ê±¡£

P2PµÄÌØµã:

ÿ¸öÏûÏ¢Ö»ÓÐÒ»¸öÏû·ÑÕߣ¨Consumer£©(¼´Ò»µ©±»Ïû·Ñ£¬ÏûÏ¢¾Í²»ÔÙÔÚÏûÏ¢¶ÓÁÐÖÐ)

·¢ËÍÕߺͽÓÊÕÕßÖ®¼äÔÚʱ¼äÉÏûÓÐÒÀÀµÐÔ£¬Ò²¾ÍÊÇ˵µ±·¢ËÍÕß·¢ËÍÁËÏûÏ¢Ö®ºó£¬²»¹Ü½ÓÊÕÕßÓÐûÓÐÕýÔÚÔËÐÐËü²»»áÓ°Ïìµ½ÏûÏ¢±»·¢Ë͵½¶ÓÁÐ

½ÓÊÕÕßÔڳɹ¦½ÓÊÕÏûÏ¢Ö®ºóÐèÏò¶ÓÁÐÓ¦´ð³É¹¦

Èç¹ûÏ£Íû·¢Ë͵Äÿ¸öÏûÏ¢¶¼»á±»³É¹¦´¦ÀíµÄ»°£¬ÄÇôÐèÒªP2Pģʽ

1.3.2 Pub/Subģʽ

Pub/Subģʽ°üº¬Èý¸ö½ÇÉ«Ö÷Ì⣨Topic£©£¬·¢²¼Õߣ¨Publisher£©£¬¶©ÔÄÕߣ¨Subscriber£© ¡£¶à¸ö·¢²¼Õß½«ÏûÏ¢·¢Ë͵½Topic,ϵͳ½«ÕâЩÏûÏ¢´«µÝ¸ø¶à¸ö¶©ÔÄÕß¡£

Pub/SubµÄÌØµã

ÿ¸öÏûÏ¢¿ÉÒÔÓжà¸öÏû·ÑÕß

·¢²¼ÕߺͶ©ÔÄÕßÖ®¼äÓÐʱ¼äÉϵÄÒÀÀµÐÔ¡£Õë¶Ôij¸öÖ÷Ì⣨Topic£©µÄ¶©ÔÄÕߣ¬Ëü±ØÐë´´½¨Ò»¸ö¶©ÔÄÕßÖ®ºó£¬²ÅÄÜÏû·Ñ·¢²¼ÕßµÄÏûÏ¢¡£

ΪÁËÏû·ÑÏûÏ¢£¬¶©ÔÄÕß±ØÐë±£³ÖÔËÐеÄ״̬¡£

Èç¹ûÏ£Íû·¢Ë͵ÄÏûÏ¢¿ÉÒÔ²»±»×öÈκδ¦Àí¡¢»òÕßÖ»±»Ò»¸öÏûÏ¢Õß´¦Àí¡¢»òÕß¿ÉÒÔ±»¶à¸öÏû·ÑÕß´¦ÀíµÄ»°£¬ÄÇô¿ÉÒÔ²ÉÓÃPub/SubÄ£ÐÍ¡£

1.4 ³£ÓÃÖмä¼þ½éÉÜÓë¶Ô±È#

KafkaÊÇLinkedIn¿ªÔ´µÄ·Ö²¼Ê½·¢²¼-¶©ÔÄÏûϢϵͳ£¬Ä¿Ç°¹éÊôÓÚApache¶¨¼¶ÏîÄ¿¡£KafkaÖ÷ÒªÌØµãÊÇ»ùÓÚPullµÄģʽÀ´´¦ÀíÏûÏ¢Ïû·Ñ£¬×·Çó¸ßÍÌÍÂÁ¿£¬Ò»¿ªÊ¼µÄÄ¿µÄ¾ÍÊÇÓÃÓÚÈÕÖ¾ÊÕ¼¯ºÍ´«Êä¡£0.8°æ±¾¿ªÊ¼Ö§³Ö¸´ÖÆ£¬²»Ö§³ÖÊÂÎñ£¬¶ÔÏûÏ¢µÄÖØ¸´¡¢¶ªÊ§¡¢´íÎóûÓÐÑϸñÒªÇó£¬ÊʺϲúÉú´óÁ¿Êý¾ÝµÄ»¥ÁªÍø·þÎñµÄÊý¾ÝÊÕ¼¯ÒµÎñ¡£

RabbitMQÊÇʹÓÃErlangÓïÑÔ¿ª·¢µÄ¿ªÔ´ÏûÏ¢¶ÓÁÐϵͳ£¬»ùÓÚAMQPЭÒéÀ´ÊµÏÖ¡£AMQPµÄÖ÷ÒªÌØÕ÷ÊÇÃæÏòÏûÏ¢¡¢¶ÓÁС¢Â·ÓÉ£¨°üÀ¨µã¶ÔµãºÍ·¢²¼/¶©ÔÄ£©¡¢¿É¿¿ÐÔ¡¢°²È«¡£AMQPЭÒé¸ü¶àÓÃÔÚÆóҵϵͳÄÚ£¬¶ÔÊý¾ÝÒ»ÖÂÐÔ¡¢Îȶ¨ÐԺͿɿ¿ÐÔÒªÇóºÜ¸ßµÄ³¡¾°£¬¶ÔÐÔÄܺÍÍÌÍÂÁ¿µÄÒªÇó»¹ÔÚÆä´Î¡£

RocketMQÊǰ¢À↑ԴµÄÏûÏ¢Öмä¼þ£¬ËüÊÇ´¿Java¿ª·¢£¬¾ßÓиßÍÌÍÂÁ¿¡¢¸ß¿ÉÓÃÐÔ¡¢Êʺϴó¹æÄ£·Ö²¼Ê½ÏµÍ³Ó¦ÓõÄÌØµã¡£RocketMQ˼·ÆðÔ´ÓÚKafka£¬µ«²¢²»ÊÇKafkaµÄÒ»¸öCopy£¬Ëü¶ÔÏûÏ¢µÄ¿É¿¿´«Êä¼°ÊÂÎñÐÔ×öÁËÓÅ»¯£¬Ä¿Ç°ÔÚ°¢ÀOÍű»¹ã·ºÓ¦ÓÃÓÚ½»Òס¢³äÖµ¡¢Á÷¼ÆËã¡¢ÏûÏ¢ÍÆËÍ¡¢ÈÕÖ¾Á÷ʽ´¦Àí¡¢binglog·Ö·¢µÈ³¡¾°¡£

RabbitMQ±ÈKafka¿É¿¿£¬kafka¸üÊʺÏIO¸ßÍÌ͵Ĵ¦Àí£¬Ò»°ãÓ¦ÓÃÔÚ´óÊý¾ÝÈÕÖ¾´¦Àí»ò¶ÔʵʱÐÔ£¨ÉÙÁ¿ÑÓ³Ù£©£¬¿É¿¿ÐÔ£¨ÉÙÁ¿¶ªÊý¾Ý£©ÒªÇóÉԵ͵ij¡¾°Ê¹Ó㬱ÈÈçELKÈÕÖ¾ÊÕ¼¯¡£

¶þ RabbitMQÁ˽â

2.1 ¼ò½é

RabbitMQÊÇÁ÷ÐеĿªÔ´ÏûÏ¢¶ÓÁÐϵͳ¡£RabbitMQÊÇAMQP£¨¸ß¼¶ÏûÏ¢¶ÓÁÐЭÒ飩µÄ±ê׼ʵÏÖ¡£Ö§³Ö¶àÖÖ¿Í»§¶Ë£¬È磺Python¡¢Ruby¡¢.NET¡¢Java¡¢JMS¡¢C¡¢PHP¡¢ActionScript¡¢XMPP¡¢STOMPµÈ£¬Ö§³ÖAJAX£¬³Ö¾Ã»¯¡£ÓÃÓÚÔÚ·Ö²¼Ê½ÏµÍ³Öд洢ת·¢ÏûÏ¢£¬ÔÚÒ×ÓÃÐÔ¡¢À©Õ¹ÐÔ¡¢¸ß¿ÉÓÃÐԵȷ½Ãæ±íÏÖ²»Ëס£ÊÇʹÓÃErlang±àдµÄÒ»¸ö¿ªÔ´µÄÏûÏ¢¶ÓÁУ¬±¾ÉíÖ§³ÖºÜ¶àµÄЭÒ飺AMQP£¬XMPP, SMTP, STOMP£¬Ò²ÕýÊÇÈç´Ë£¬Ê¹µÄËü±äµÄ·Ç³£ÖØÁ¿¼¶£¬¸üÊʺÏÓÚÆóÒµ¼¶µÄ¿ª·¢¡£Í¬Ê±ÊµÏÖÁËÒ»¸öBroker¹¹¼Ü£¬ÕâÒâζ×ÅÏûÏ¢ÔÚ·¢Ë͸ø¿Í»§¶ËʱÏÈÔÚÖÐÐĶÓÁÐÅŶӡ£¶Ô·ÓÉ(Routing)£¬¸ºÔؾùºâ(Load balance)»òÕßÊý¾Ý³Ö¾Ã»¯¶¼ÓкܺõÄÖ§³Ö¡£ÆäÖ÷ÒªÌØµãÈçÏÂ:

¿É¿¿ÐÔ

Áé»îµÄ·ÓÉ

À©Õ¹ÐÔ

¸ß¿ÉÓÃÐÔ

¶àÖÖЭÒé

¶àÓïÑÔ¿Í»§¶Ë

¹ÜÀí½çÃæ

²å¼þ»úÖÆ

2.2 ¸ÅÄî#

RabbitMQ´ÓÕûÌåÉÏÀ´¿´ÊÇÒ»¸öµäÐ͵ÄÉú²úÕßÏû·ÑÕßÄ£ÐÍ£¬Ö÷Òª¸ºÔð½ÓÊÕ¡¢´æ´¢ºÍת·¢ÏûÏ¢¡£ÆäÕûÌåÄ£Ðͼܹ¹ÈçÏÂͼËùʾ:

ÎÒÃÇÏÈÀ´¿´Ò»¸öRabbitMQµÄÔËתÁ÷³Ì£¬ÉÔºó»á¶ÔÕâ¸öÁ÷³ÌÖÐËùÉæ¼°µ½µÄһЩ¸ÅÄî½øÐÐÏêϸµÄ½âÊÍ¡£

Éú²úÕß:

(1)Éú²úÕßÁ¬½Óµ½RabbitMQ Broker£¬½¨Á¢Ò»¸öÁ¬½Ó( Connection)¿ªÆôÒ»¸öÐŵÀ(Channel)

(2)Éú²úÕßÉùÃ÷Ò»¸ö½»»»Æ÷£¬²¢ÉèÖÃÏà¹ØÊôÐÔ£¬±ÈÈç½»»»»úÀàÐÍ¡¢ÊÇ·ñ³Ö¾Ã»¯µÈ

(3)Éú²úÕßÉùÃ÷Ò»¸ö¶ÓÁо®ÉèÖÃÏà¹ØÊôÐÔ£¬±ÈÈçÊÇ·ñÅÅËû¡¢ÊÇ·ñ³Ö¾Ã»¯¡¢ÊÇ·ñ×Ô¶¯É¾³ýµÈ

(4)Éú²úÕßͨ¹ý·Óɼü½«½»»»Æ÷ºÍ¶ÓÁÐ°ó¶¨ÆðÀ´

(5)Éú²úÕß·¢ËÍÏûÏ¢ÖÁRabbitMQ Broker£¬ÆäÖаüº¬Â·Óɼü¡¢½»»»Æ÷µÈÐÅÏ¢¡£

(6)ÏàÓ¦µÄ½»»»Æ÷¸ù¾Ý½ÓÊÕµ½µÄ·Óɼü²éÕÒÏàÆ¥ÅäµÄ¶ÓÁС£

(7)Èç¹ûÕÒµ½£¬Ôò½«´ÓÉú²úÕß·¢Ë͹ýÀ´µÄÏûÏ¢´æÈëÏàÓ¦µÄ¶ÓÁÐÖС£

(8)Èç¹ûûÓÐÕÒµ½£¬Ôò¸ù¾ÝÉú²úÕßÅäÖõÄÊôÐÔÑ¡Ôñ¶ªÆú»¹ÊÇ»ØÍ˸øÉú²úÕß

(9)¹Ø±ÕÐŵÀ¡£

(10)¹Ø±ÕÁ¬½Ó¡£'

Ïû·ÑÕß:

(1)Ïû·ÑÕßÁ¬½Óµ½RabbitMQ Broker £¬½¨Á¢Ò»¸öÁ¬½Ó(Connection)£¬¿ªÆôÒ»¸öÐŵÀ(Channel) ¡£

(2)Ïû·ÑÕßÏòRabbitMQ Broker ÇëÇóÏû·ÑÏàÓ¦¶ÓÁÐÖеÄÏûÏ¢£¬¿ÉÄÜ»áÉèÖÃÏàÓ¦µÄ»Øµ÷º¯Êý£¬

(3)µÈ´ýRabbitMQ Broker »ØÓ¦²¢Í¶µÝÏàÓ¦¶ÓÁÐÖеÄÏûÏ¢£¬Ïû·ÑÕß½ÓÊÕÏûÏ¢¡£

(4)Ïû·ÑÕßÈ·ÈÏ(ack) ½ÓÊÕµ½µÄÏûÏ¢¡£

(5)RabbitMQ ´Ó¶ÓÁÐÖÐɾ³ýÏàÓ¦¼º¾­±»È·ÈϵÄÏûÏ¢¡£

(6)¹Ø±ÕÐŵÀ¡£

(7)¹Ø±ÕÁ¬½Ó¡£

2.2.1 ÐŵÀ

ÕâÀïÎÒÃÇÖ÷ÒªÌÖÂÛÁ½¸öÎÊÌ⣺

ΪºÎÒªÓÐÐŵÀ?

Ö÷ÒªÔ­Òò»¹ÊÇÔÚÓÚTCPÁ¬½ÓµÄ"°º¹ó"ÐÔ¡£ÎÞÂÛÊÇÉú²úÕß»¹ÊÇÏû·ÑÕߣ¬¶¼ÐèÒªºÍRabbitMQ Broker ½¨Á¢Á¬½Ó£¬Õâ¸öÁ¬½Ó¾ÍÊÇÒ»ÌõTCP Á¬½Ó¡£¶ø²Ù×÷ϵͳ¶ÔÓÚTCPÁ¬½ÓµÄ´´½¨ÓëÏú»ÙÊǷdz£°º¹óµÄ¿ªÏú¡£¼ÙÉèÏû·ÑÕßÒªÏû·ÑÏûÏ¢£¬²¢¸ù¾Ý·þÎñÐèÇóºÏÀíµ÷¶ÈỊ̈߳¬ÈôÖ»½øÐÐTCPÁ¬½Ó£¬ÄÇôµ±¸ß²¢·¢µÄʱºò£¬Ã¿Ãë¿ÉÄܶ¼ÓгÉǧÉÏÍòµÄTCPÁ¬½Ó£¬²»½ö½öÊǶÔTCPÁ¬½ÓµÄÀË·Ñ£¬Ò²ºÜ¿ì»á³¬¹ý²Ù×÷ϵͳÿÃëËùÄܽ¨Á¢Á¬½ÓµÄÊýÁ¿¡£Èç¹ûÄÜÔÚÒ»ÌõTCPÁ¬½ÓÉϲÙ×÷£¬ÓÖÄܱ£Ö¤¸÷¸öÏß³ÌÖ®¼äµÄ˽ÃÜÐÔ¾ÍÍêÃÀÁË£¬ÓÚÊÇÐŵÀµÄ¸ÅÄî³öÏÖÁË¡£

ÐŵÀΪºÎ?

ÐŵÀÊǽ¨Á¢ÔÚConnection Ö®ÉϵÄÐéÄâÁ¬½Ó¡£µ±Ó¦ÓóÌÐòÓëRabbit Broker½¨Á¢TCPÁ¬½ÓµÄʱºò£¬¿Í»§¶Ë½ô½Ó×Å¿ÉÒÔ´´½¨Ò»¸öAMQP ÐŵÀ(Channel) £¬Ã¿¸öÐŵÀ¶¼»á±»Ö¸ÅÉÒ»¸öΨһµÄID¡£RabbitMQ ´¦ÀíµÄÿÌõAMQP Ö¸Áî¶¼ÊÇͨ¹ýÐŵÀÍê³ÉµÄ¡£ÐŵÀ¾ÍÏñµçÀÂÀïµÄ¹âÏËÊø¡£Ò»ÌõµçÀÂÄÚº¬ÓÐÐí¶à¹âÏËÊø£¬ÔÊÐíËùÓеÄÁ¬½Óͨ¹ý¶àÌõ¹âÏßÊø½øÐд«ÊäºÍ½ÓÊÕ¡£

2.2.2 Éú²úÕßÏû·ÑÕß

¹ØÓÚÉú²úÕßÏû·ÑÕßÎÒÃÇÐèÒªÁ˽⼸¸ö¸ÅÄî:

Producer:Éú²úÕߣ¬¼´ÏûϢͶµÝÕßÒ»·½¡£

ÏûÏ¢:ÏûÏ¢Ò»°ã·ÖÁ½¸ö²¿·Ö:ÏûÏ¢Ìå(payload)ºÍ±êÇ©¡£±êÇ©ÓÃÀ´ÃèÊöÕâÌõÏûÏ¢£¬Èç:Ò»¸ö½»»»Æ÷µÄÃû³Æ»òÕßÒ»¸ö·ÓÉKey£¬Rabbitͨ¹ý½âÎö±êÇ©À´È·¶¨ÏûÏ¢µÄÈ¥Ïò£¬payloadÊÇÏûÏ¢ÄÚÈÝ¿ÉÒÔʹһ¸öjson£¬Êý×éµÈµÈ¡£

Consumer:Ïû·ÑÕߣ¬¾ÍÊǽÓÊÕÏûÏ¢µÄÒ»·½¡£Ïû·ÑÕß¶©ÔÄRabbitMQµÄ¶ÓÁУ¬µ±Ïû·ÑÕßÏû·ÑÒ»ÌõÏûϢʱ£¬Ö»ÊÇÏû·ÑÏûÏ¢µÄÏûÏ¢Ìå¡£ÔÚÏûϢ·ÓɵĹý³ÌÖУ¬»á¶ªÆú±êÇ©£¬´æÈëµ½¶ÓÁÐÖеÄÖ»ÓÐÏûÏ¢Ìå¡£

Broker:ÏûÏ¢Öмä¼þµÄ·þÎñ½Úµã¡£

2.2.3 ¶ÓÁС¢½»»»Æ÷¡¢Â·ÓÉkey¡¢°ó¶¨

´ÓRabbitMQµÄÔËתÁ÷³ÌÎÒÃÇ¿ÉÒÔÖªµÀÉú²úÕßµÄÏûÏ¢ÊÇ·¢²¼µ½½»»»Æ÷Éϵġ£¶øÏû·ÑÕßÔòÊÇ´Ó¶ÓÁÐÉÏ»ñÈ¡ÏûÏ¢µÄ¡£ÄÇôÏûÏ¢µ½µ×ÊÇÈçºÎ´Ó½»»»Æ÷µ½¶ÓÁеÄÄØ?ÎÒÃÇÏȾßÌåÁ˽âÒ»ÏÂÕ⼸¸ö¸ÅÄî¡£

Queue:¶ÓÁУ¬ÊÇRabbitMQµÄÄÚ²¿¶ÔÏó£¬ÓÃÓÚ´æ´¢ÏûÏ¢¡£RabbitMQÖÐÏûÏ¢Ö»ÄÜ´æ´¢ÔÚ¶ÓÁÐÖС£Éú²úÕßͶµÝÏûÏ¢µ½¶ÓÁУ¬Ïû·ÑÕß´Ó¶ÓÁÐÖлñÈ¡ÏûÏ¢²¢Ïû·Ñ¡£¶à¸öÏû·ÑÕß¿ÉÒÔ¶©ÔÄͬһ¸ö¶ÓÁУ¬Õâʱ¶ÓÁÐÖеÄÏûÏ¢»á±»Æ½¾ù·Ö̯(ÂÖѯ)¸ø¶à¸öÏû·ÑÕß½øÐÐÏû·Ñ£¬¶ø²»ÊÇÿ¸öÏû·ÑÕß¶¼ÊÕµ½ËùÓеÄÏûÏ¢½øÐÐÏû·Ñ¡£(×¢Ò⣺RabbitMQ²»Ö§³Ö¶ÓÁвãÃæµÄ¹ã²¥Ïû·Ñ£¬Èç¹ûÐèÒª¹ã²¥Ïû·Ñ£¬¿ÉÒÔ²ÉÓÃÒ»¸ö½»»»Æ÷ͨ¹ý·ÓÉKey°ó¶¨¶à¸ö¶ÓÁУ¬Óɶà¸öÏû·ÑÕßÀ´¶©ÔÄÕâЩ¶ÓÁеķ½Ê½¡£)

Exchange£º½»»»Æ÷¡£ÔÚRabbitMQÖУ¬Éú²úÕß²¢·ÇÖ±½Ó½«ÏûϢͶµÝµ½¶ÓÁÐÖС£ÕæÊµÇé¿öÊÇ£¬Éú²úÕß½«ÏûÏ¢·¢Ë͵½Exchange(½»»»Æ÷)£¬Óɽ»»»Æ÷½«ÏûϢ·Óɵ½Ò»¸ö»ò¶à¸ö¶ÓÁÐÖС£Èç¹û·Óɲ»µ½£¬»ò·µ»Ø¸øÉú²úÕߣ¬»òÖ±½Ó¶ªÆú£¬»ò×öÆäËü´¦Àí¡£

RoutingKey:·ÓÉKey¡£Éú²úÕß½«ÏûÏ¢·¢Ë͸ø½»»»Æ÷µÄʱºò£¬Ò»°ã»áÖ¸¶¨Ò»¸öRoutingKey£¬ÓÃÀ´Ö¸¶¨Õâ¸öÏûÏ¢µÄ·ÓɹæÔò¡£Õâ¸ö·ÓÉKeyÐèÒªÓë½»»»Æ÷ÀàÐͺͰ󶨼ü(BindingKey)ÁªºÏʹÓòÅÄÜ×îÖÕÉúЧ¡£ÔÚ½»»»Æ÷ÀàÐͺͰ󶨼ü¹Ì¶¨µÄÇé¿öÏ£¬Éú²úÕß¿ÉÒÔÔÚ·¢ËÍÏûÏ¢¸ø½»»»Æ÷ʱͨ¹ýÖ¸¶¨RoutingKeyÀ´¾ö¶¨ÏûÏ¢Á÷ÏòÄÄÀï¡£

Binding£ºRabbitMQͨ¹ý°ó¶¨½«½»»»Æ÷ºÍ¶ÓÁйØÁªÆðÀ´£¬Ôڰ󶨵ÄʱºòÒ»°ã»áÖ¸¶¨Ò»¸ö°ó¶¨¼ü£¬ÕâÑùRabbitMQ¾Í¿ÉÒÔÖ¸¶¨ÈçºÎÕýÈ·µÄ·Óɵ½¶ÓÁÐÁË¡£

´ÓÕâÀïÎÒÃÇ¿ÉÒÔ¿´µ½ÔÚRabbitMQÖн»»»Æ÷ºÍ¶ÓÁÐʵ¼ÊÉÏ¿ÉÒÔÊÇÒ»¶Ô¶à£¬Ò²¿ÉÒÔÊǶà¶Ô¶à¹ØÏµ¡£½»»»Æ÷ºÍ¶ÓÁоÍÏñÎÒÃǹØÏµÊý¾Ý¿âÖеÄÁ½ÕÅ±í¡£ËûÃÇͬ¹éBindingKey×ö¹ØÁª(¶à¶Ô¶à¹ØÏµ±í)¡£ÔÚÎÒÃÇͶµÝÏûϢʱ£¬¿ÉÒÔͨ¹ýExchangeºÍRoutingKey(¶ÔÓ¦BindingKey)¾Í¿ÉÒÔÕÒµ½Ïà¶ÔÓ¦µÄ¶ÓÁС£

RabbitMQÖ÷ÒªÓÐËÄÖÖÀàÐ͵Ľ»»»Æ÷:

fanout£ºÉÈÐν»»»Æ÷£¬Ëü»á°Ñ·¢Ë͵½¸Ã½»»»Æ÷µÄÏûϢ·Óɵ½ËùÓÐÓë¸Ã½»»»Æ÷°ó¶¨µÄ¶ÓÁÐÖС£Èç¹ûʹÓÃÉÈÐν»»»Æ÷£¬Ôò²»»áÆ¥Åä·ÓÉKey¡£

direct:direct½»»»Æ÷£¬»á°ÑÏûϢ·Óɵ½RoutingKeyÓëBindingKeyÍêȫƥÅäµÄ¶ÓÁÐÖС£

topic:ÍêȫƥÅäBindingKeyºÍRoutingKeyµÄdirect½»»»Æ÷ ÓÐЩʱºò²¢²»ÄÜÂú×ãʵ¼ÊÒµÎñµÄÐèÇó¡£topic ÀàÐ͵Ľ»»»Æ÷ÔÚÆ¥Å乿ÔòÉϽøÐÐÁËÀ©Õ¹£¬ËüÓëdirect ÀàÐ͵Ľ»»»Æ÷ÏàËÆ£¬Ò²Êǽ«ÏûϢ·Óɵ½BindingKey ºÍRoutingKey ÏàÆ¥ÅäµÄ¶Ó

ÁÐÖУ¬µ«ÕâÀïµÄÆ¥Å乿ÔòÓÐЩ²»Í¬£¬ËüÔ¼¶¨:

RoutingKey Ϊһ¸öµãºÅ"."·Ö¸ôµÄ×Ö·û´®(±»µãºÅ"."·Ö¸ô¿ªµÄÿһ¶Î¶ÀÁ¢µÄ×Ö·û

´®³ÆÎªÒ»¸öµ¥´Ê)¦Ë£¬Èç"hs.rabbitmq.client"£¬"com.rabbit.client"µÈ¡£

BindingKey ºÍRoutingKey Ò»ÑùÒ²ÊǵãºÅ"."·Ö¸ôµÄ×Ö·û´®;

BindingKey ÖпÉÒÔ´æÔÚÁ½ÖÖÌØÊâ×Ö·û´®"*"ºÍ"#"£¬ÓÃÓÚ×öÄ£ºýÆ¥Å䣬ÆäÖÐ"*"ÓÃÓÚÆ¥ÅäÒ»¸öµ¥´Ê£¬"#"ÓÃÓÚÆ¥Åä¶à¹æ¸ñµ¥´Ê(¿ÉÒÔÊÇÁã¸ö)¡£

Èçͼ:

¡¤ ·ÓɼüΪ" apple.rabbit.client" µÄÏûÏ¢»áͬʱ·Óɵ½Queuel ºÍQueue2;

¡¤ ·ÓɼüΪ" orange.mq.client" µÄÏûÏ¢Ö»»á·Óɵ½Queue2 ÖÐ:

¡¤ ·ÓɼüΪ" apple.mq.demo" µÄÏûÏ¢Ö»»á·Óɵ½Queue2 ÖÐ:

¡¤ ·ÓɼüΪ" banana.rabbit.demo" µÄÏûÏ¢Ö»»á·Óɵ½Queuel ÖÐ:

¡¤ ·ÓɼüΪ" orange.apple.banana" µÄÏûÏ¢½«»á±»¶ªÆú»òÕß·µ»Ø¸øÉú²úÕßÒòΪËüûÓÐÆ¥ÅäÈκηÓɼü¡£

header:headers ÀàÐ͵Ľ»»»Æ÷²»ÒÀÀµÓÚ·ÓɼüµÄÆ¥Å乿ÔòÀ´Â·ÓÉÏûÏ¢£¬¶øÊǸù¾Ý·¢Ë͵ÄÏûÏ¢ÄÚÈÝÖÐ

µÄheaders ÊôÐÔ½øÐÐÆ¥Åä¡£Ôڰ󶨶ÓÁкͽ»»»Æ÷Ê±ÖÆ¶¨Ò»×é¼üÖµ¶Ô£¬ µ±·¢ËÍÏûÏ¢µ½½»»»Æ÷ʱ£¬

RabbitMQ »á»ñÈ¡µ½¸ÃÏûÏ¢µÄheaders (Ò²ÊÇÒ»¸ö¼üÖµ¶ÔµÄÐÎʽ) £¬¶Ô±ÈÆäÖеļüÖµ¶ÔÊÇ·ñÍêÈ«

Æ¥Åä¶ÓÁкͽ»»»Æ÷°ó¶¨Ê±Ö¸¶¨µÄ¼üÖµ¶Ô£¬Èç¹ûÍêȫƥÅäÔòÏûÏ¢»á·Óɵ½¸Ã¶ÓÁУ¬·ñÔò²»»á·ÓÉ

µ½¸Ã¶ÓÁС£(×¢:¸Ã½»»»Æ÷ÀàÐÍÐÔÄܽϲîÇÒ²»ÊµÓã¬Òò´ËÒ»°ã²»»áÓõ½)¡£

Á˽âÁËÉÏÃæµÄ¸ÅÄÎÒÃÇÔÙÀ´Ë¼¿¼ÏûÏ¢ÊÇÈçºÎ´Ó½»»»Æ÷µ½¶ÓÁеġ£Ê×ÏÈRabbitÔÚ½ÓÊÕµ½ÏûϢʱ£¬»á½âÎöÏûÏ¢µÄ±êÇ©´Ó¶øµÃµ½ÏûÏ¢µÄ½»»»Æ÷Óë·ÓÉkeyÐÅÏ¢¡£È»ºó¸ù¾Ý½»»»Æ÷µÄÀàÐÍ¡¢Â·ÓÉkeyÒÔ¼°¸Ã½»»»Æ÷ºÍ¶ÓÁеİ󶨹ØÏµÀ´¾ö¶¨ÏûÏ¢×îÖÕͶµÝµ½Äĸö¶ÓÁÐÀïÃæ¡£

Èý RabbitMQʹÓÃ#

3.1 RabbitMQ°²×°#

ÕâÀïÎÒÃÇ»ùÓÚdockerÀ´°²×°¡£

3.1.1 À­È¡¾µÏñ

docker pull rabbitmq:management

3.1.2 Æô¶¯ÈÝÆ÷

docker run -d --name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS =admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management

3.2 RabbitMQ ¿Í»§¶Ë¿ª·¢Ê¹ÓÃ#

ÕâÀïÎÒÃÇÒÔdotnetƽ̨ÏÂRabbitMQ.Client3.6.9(¿ÉÒÔ´ÓnugetÖÐÏÂÔØ)ΪʾÀý£¬¼òµ¥½éÉÜdotnetƽ̨϶ÔRabbitMQµÄ¼òµ¥²Ù×÷¡£¸üÏêϸµÄÄÚÈÝ¿ÉÒÔ´ÓnugetÖÐÏÂÔØÔ´ÂëºÍÎĵµ½øÐв鿴¡£

3.2.1 Á¬½ÓRabbit

ConnectionFactory factory = new ConnectionFactory();
factory.UserName = "admin";//Óû§Ãû
factory.Password = "admin";//ÃÜÂë
factory.HostName = "192.168.17.205";//Ö÷»úÃû
factory.VirtualHost = "";//ÐéÄâÖ÷»ú(Õâ¸öÔÝʱ²»ÐèÒª£¬ÉÔºóµÄÎÄÕÂÀï»á½éÉÜÐéÄâÖ÷»úµÄ¸ÅÄî)
factory.Port = 15672;//¶Ë¿Ú
IConnection conn = factory.CreateConnection();//´´½¨Á¬½Ó

3.2.2 ´´½¨ÐŵÀ

IModel channel = conn.CreateModel();

˵Ã÷£ºConnection ¿ÉÒÔÓÃÀ´´´½¨¶à¸öChannel ʵÀý£¬µ«ÊÇChannel ʵÀý²»ÄÜÔÚÏ̼߳乲Ïí£¬Ó¦ÓóÌÐòÓ¦¸ÃΪÿһ¸öÏ߳̿ª±ÙÒ»¸öChannel ¡£Ä³Ð©Çé¿öÏÂChannel µÄ²Ù×÷¿ÉÒÔ²¢·¢ÔËÐУ¬µ«ÊÇÔÚÆäËûÇé¿öÏ»ᵼÖÂÔÚÍøÂçÉϳöÏÖ´íÎóµÄͨÐÅÖ¡½»´í£¬Í¬Ê±Ò²»áÓ°ÏìÓÑËÍ·½È·ÈÏ( publisherconfrrm)»úÖÆµÄÔËÐУ¬ËùÒÔ¶àÏß³ÌÎʹ²ÏíChannelʵÀýÊÇ·ÇḬ̈߳²È«µÄ¡£

3.2.3 ½»»»Æ÷¡¢¶ÓÁкͰó¶¨

channel.ExchangeDeclare ("exchangeName", "direct", true);
String queueName = channel.QueueDeclare().QueueName;
channel.QueueBind (queueName, "exchangeName", "routingKey");

ÈçÉÏ´´½¨ÁËÒ»¸ö³Ö¾Ã»¯µÄ¡¢·Ç×Ô¶¯É¾³ýµÄ¡¢°ó¶¨ÀàÐÍΪdirect µÄ½»»»Æ÷£¬Í¬Ê±Ò²´´½¨ÁËÒ»¸ö·Ç³Ö¾Ã»¯µÄ¡¢ÅÅËûµÄ¡¢×Ô¶¯É¾³ýµÄ¶ÓÁÐ(´Ë¶ÓÁеÄÃû³ÆÓÉRabbitMQ ×Ô¶¯Éú³É)¡£ÕâÀïµÄ½»»»Æ÷ºÍ¶ÓÁÐÒ²¶¼Ã»ÓÐÉèÖÃÌØÊâµÄ²ÎÊý¡£

ÉÏÃæµÄ´úÂëҲչʾÁËÈçºÎʹÓ÷Óɼü½«¶ÓÁкͽ»»»Æ÷°ó¶¨ÆðÀ´¡£ÉÏÃæÉùÃ÷µÄ¶ÓÁо߱¸ÈçÏÂÌØÐÔ: Ö»¶Ôµ±Ç°Ó¦ÓÃÖÐͬһ¸öConnection ²ãÃæ¿ÉÓã¬Í¬Ò»¸öConnection µÄ²»Í¬Channel¿É¹²Ó㬲¢ÇÒÒ²»áÔÚÓ¦ÓÃÁ¬½Ó¶Ï¿ªÊ±×Ô¶¯É¾³ý¡£

ÉÏÊö·½·¨¸ù¾Ý²ÎÊý²»Í¬£¬¿ÉÒÔÓв»Í¬µÄÖØÔØÐÎʽ£¬¸ù¾Ý×ÔÉíµÄÐèÒª½øÐе÷Óá£

ExchangeDeclare·½·¨Ïê½â£º

ExchangeDeclareÓжà¸öÖØÔØ·½·¨£¬ÕâÐ©ÖØÔØ·½·¨¶¼ÊÇÓÉÏÂÃæÕâ¸ö·½·¨ÖÐȱʡµÄijЩ²ÎÊý¹¹³ÉµÄ¡£

void ExchangeDeclare (string exchange, string type, bool durable, bool autoDelete, IDictionary<string, object> arguments);

exchange : ½»»»Æ÷µÄÃû³Æ¡£

type : ½»»»Æ÷µÄÀàÐÍ£¬³£¼ûµÄÈçfanout¡¢direct ¡¢topic

durable: ÉèÖÃÊÇ·ñ³Ö¾Ã»¯¡£durab l e ÉèÖÃΪtrue ±íʾ³Ö¾Ã»¯£¬ ·´Ö®ÊǷdz־û¯¡£³Ö¾Ã»¯¿ÉÒÔ½«½»»»Æ÷´æÅÌ£¬ÔÚ·þÎñÆ÷ÖØÆôµÄʱºò²»»á¶ªÊ§Ïà¹ØÐÅÏ¢¡£

autoDelete : ÉèÖÃÊÇ·ñ×Ô¶¯É¾³ý¡£autoDelete ÉèÖÃΪtrue Ôò±íʾ×Ô¶¯É¾³ý¡£×Ô¶¯É¾³ýµÄǰÌáÊÇÖÁÉÙÓÐÒ»¸ö¶ÓÁлòÕß½»»»Æ÷ÓëÕâ¸ö½»»»Æ÷°ó¶¨£¬Ö®ºóËùÓÐÓëÕâ¸ö½»»»Æ÷°ó¶¨µÄ¶ÓÁлòÕß½»»»Æ÷¶¼Óë´Ë½â°ó¡£×¢Òâ²»ÄÜ´íÎ󵨰ÑÕâ¸ö²ÎÊýÀí½âΪ:"µ±Óë´Ë½»»»Æ÷Á¬½ÓµÄ¿Í»§¶Ë¶¼¶Ï¿ªÊ±£¬ RabbitMQ »á×Ô¶¯É¾³ý±¾½»»»Æ÷"¡£

internal : ÉèÖÃÊÇ·ñÊÇÄÚÖõġ£Èç¹ûÉèÖÃΪtrue £¬Ôò±íʾÊÇÄÚÖõĽ»»»Æ÷£¬¿Í»§¶Ë³ÌÐòÎÞ·¨Ö±½Ó·¢ËÍÏûÏ¢µ½Õâ¸ö½»»»Æ÷ÖУ¬Ö»ÄÜͨ¹ý½»»»Æ÷·Óɵ½½»»»Æ÷ÕâÖÖ·½Ê½¡£

argument : ÆäËûһЩ½á¹¹»¯²ÎÊý£¬±ÈÈçalternate - exchange¡£

QueueDeclare·½·¨Ïê½â£º

QueueDeclareÖ»ÓÐÁ½¸öÖØÔØ¡£

QueueDeclareOk QueueDeclare();

QueueDeclareOk QueueDeclare (string queue, bool durable, bool exclusive, bool autoDelete, IDictionary<string, object> arguments);

²»´øÈκβÎÊýµÄqueueDeclare ·½·¨Ä¬ÈÏ´´½¨Ò»¸öÓÉRabbitMQ ÃüÃûµÄ(ÀàËÆÕâÖÖamq.gen-LhQzlgv3GhDOv8PIDabOXA Ãû³Æ£¬ÕâÖÖ¶ÓÁÐÒ²³ÆÖ®ÎªÄäÃû¶ÓÁСµ¡¢ÅÅËûµÄ¡¢×Ô¶¯É¾³ýµÄ¡¢·Ç³Ö¾Ã»¯µÄ¶ÓÁС£

queue : ¶ÓÁеÄÃû³Æ¡£

durable: ÉèÖÃÊÇ·ñ³Ö¾Ã»¯¡£Îªtrue ÔòÉèÖöÓÁÐΪ³Ö¾Ã»¯¡£³Ö¾Ã»¯µÄ¶ÓÁÐ»á´æÅÌ£¬ÔÚ·þÎñÆ÷ÖØÆôµÄʱºò¿ÉÒÔ±£Ö¤²»¶ªÊ§Ïà¹ØÐÅÏ¢¡£

exclusive : ÉèÖÃÊÇ·ñÅÅËû¡£Îªtrue ÔòÉèÖöÓÁÐΪÅÅËûµÄ¡£Èç¹ûÒ»¸ö¶ÓÁб»ÉùÃ÷ΪÅÅËû¶ÓÁУ¬¸Ã¶ÓÁнö¶ÔÊ×´ÎÉùÃ÷ËüµÄÁ¬½Ó¿É¼û£¬²¢ÔÚÁ¬½Ó¶Ï¿ªÊ±×Ô¶¯É¾³ý¡£ÕâÀïÐèҪעÒâÈýµã:ÅÅËû¶ÓÁÐÊÇ»ùÓÚÁ¬½Ó( Connection) ¿É¼ûµÄ£¬Í¬Ò»¸öÁ¬½ÓµÄ²»Í¬ÐŵÀ(Channel)ÊÇ¿ÉÒÔͬʱ·ÃÎÊͬһÁ¬½Ó´´½¨µÄÅÅËû¶ÓÁÐ; "Ê×´Î"ÊÇÖ¸Èç¹ûÒ»¸öÁ¬½Ó¼º¾­ÉùÃ÷ÁËÒ»¸öÅÅËû¶ÓÁУ¬ÆäËûÁ¬½ÓÊDz»ÔÊÐí½¨Á¢Í¬ÃûµÄÅÅËû¶ÓÁеģ¬Õâ¸öÓëÆÕͨ¶ÓÁв»Í¬:¼´Ê¹¸Ã¶ÓÁÐÊdz־û¯µÄ£¬Ò»µ©Á¬½Ó¹Ø±Õ»òÕ߿ͻ§¶ËÍ˳ö£¬¸ÃÅÅËû¶ÓÁж¼»á±»×Ô¶¯É¾³ý£¬ÕâÖÖ¶ÓÁÐÊÊÓÃÓÚÒ»¸ö¿Í»§¶Ëͬʱ·¢ËͺͶÁÈ¡ÏûÏ¢µÄÓ¦Óó¡¾°¡£

autoDelete: ÉèÖÃÊÇ·ñ×Ô¶¯É¾³ý¡£Îªtrue ÔòÉèÖöÓÁÐΪ×Ô¶¯É¾³ý¡£×Ô¶¯É¾³ýµÄǰÌáÊÇ:ÖÁÉÙÓÐÒ»¸öÏû·ÑÕßÁ¬½Óµ½Õâ¸ö¶ÓÁУ¬Ö®ºóËùÓÐÓëÕâ¸ö¶ÓÁÐÁ¬½ÓµÄÏû·ÑÕß¶¼¶Ï¿ªÊ±£¬²Å»á×Ô¶¯É¾³ý¡£²»ÄܰÑÕâ¸ö²ÎÊý´íÎóµØÀí½âΪ:µ±Á¬½Óµ½´Ë¶ÓÁеÄËùÓпͻ§¶Ë¶Ï¿ªÊ±£¬Õâ¸ö¶ÓÁÐ×Ô¶¯É¾³ý"£¬ÒòΪÉú²úÕ߿ͻ§¶Ë´´½¨Õâ¸ö¶ÓÁУ¬»òÕßûÓÐÏû·ÑÕ߿ͻ§¶ËÓëÕâ¸ö¶ÓÁÐÁ¬½Óʱ£¬¶¼²»»á×Ô¶¯É¾³ýÕâ¸ö¶ÓÁС£

argurnents: ÉèÖöÓÁÐµÄÆäËûһЩ²ÎÊý£¬Èçx-rnessage-ttl¡¢x-expires¡¢x-rnax-length¡¢x-rnax-length-bytes¡¢x-dead-letter-exchange¡¢x-deadletter-routing-key, x-rnax-priorityµÈ¡£

×¢Òâ:Éú²úÕߺÍÏû·ÑÕß¶¼Äܹ»Ê¹ÓÃqueueDeclare À´ÉùÃ÷Ò»¸ö¶ÓÁУ¬µ«ÊÇÈç¹ûÏû·ÑÕßÔÚͬһ¸öÐŵÀÉ϶©ÔÄÁËÁíÒ»¸ö¶ÓÁУ¬¾ÍÎÞ·¨ÔÙÉùÃ÷¶ÓÁÐÁË¡£±ØÐëÏÈÈ¡Ïû¶©ÔÄ£¬È»ºó½«ÐŵÀֱΪ"´«Êä"ģʽ£¬Ö®ºó²ÅÄÜÉùÃ÷¶ÓÁС£

QueueBind ·½·¨Ïê½â£º

½«¶ÓÁкͽ»»»Æ÷°ó¶¨µÄ·½·¨ÈçÏ£º

void QueueBind(string queue, string exchange, string routingKey, IDictionary<string, object> arguments);

queue: ¶ÓÁÐÃû³Æ:

exchange: ½»»»Æ÷µÄÃû³Æ:

routingKey: ÓÃÀ´°ó¶¨¶ÓÁкͽ»»»Æ÷µÄ·Óɼü;

argument: ¶¨Òå°ó¶¨µÄһЩ²ÎÊý¡£

½«¶ÓÁÐÓë½»»»Æ÷½â°óµÄ·½·¨ÈçÏÂ:

QueueUnbind(string queue, string exchange, string routingKey, IDictionary<string, object> arguments);

Æä²ÎÊýÓë°ó¶¨ÒâÒåÏàͬ¡£

×¢£º³ý¶ÓÁпÉÒ԰󶨽»»»Æ÷Í⣬½»»»Æ÷ͬÑù¿ÉÒ԰󶨶ÓÁС£¼´:ExchangeBind·½·¨£¬ÆäʹÓ÷½Ê½Óë¶ÓÁаó¶¨ÏàËÆ¡£

3.2.4 ·¢ËÍÏûÏ¢

·¢ËÍÏûÏ¢¿ÉÒÔʹÓÃBasicPublish·½·¨¡£

void BasicPublish(string exchange, string routingKey, bool mandatory,IBasicProperties basicProperties, byte[] body);

exchange: ½»»»Æ÷µÄÃû³Æ£¬Ö¸Ã÷ÏûÏ¢ÐèÒª·¢Ë͵½Äĸö½»»»Æ÷ÖС£Èç¹ûÉèÖÃΪ¿Õ×Ö·û´®£¬ÔòÏûÏ¢»á±»·¢Ë͵½RabbitMQ ĬÈϵĽ»»»Æ÷ÖС£

routingKey : ·Óɼü£¬½»»»Æ÷¸ù¾Ý·Óɼü½«ÏûÏ¢´æ´¢µ½ÏàÓ¦µÄ¶ÓÁÐÖ®ÖС£

basicProperties: ÏûÏ¢µÄ»ù±¾ÊôÐÔ¼¯¡£

body : ÏûÏ¢Ìå( pay1oad ),ÕæÕýÐèÒª·¢Ë͵ÄÏûÏ¢¡£

mandatory: ÊÇ·ñ½«ÏûÏ¢·µ»Ø¸øÉú²úÕß(»áÔÚºóÐøµÄÎÄÕÂÖнéÉÜÕâ¸ö²ÎÊý).

3.2.5 Ïû·ÑÏûÏ¢

RabbitMQ µÄÏû·Ñģʽ·ÖÁ½ÖÖ: ÍÆ(Push)ģʽºÍÀ­(Pull)ģʽ¡£ÍÆÄ£Ê½²ÉÓÃBasicConsume

½øÐÐÏû·Ñ£¬¶øÀ­Ä£Ê½ÔòÊǵ÷ÓÃBasicGet½øÐÐÏû·Ñ¡£

ÍÆÄ£Ê½:

EventingBasicConsumer consumer = new EventingBasicConsumer(channel);//¶¨ÒåÏû·ÑÕß¶ÔÏó
consumer.Received += (model, ea) =>
{
//do someting;
channel.BasicAck(ea.DeliveryTag, multiple: false);//È·ÈÏ
};
channel.BasicConsume(queue: "queueName",
noAck: false,
consumer: consumer);//¶©ÔÄÏûÏ¢

queue : ¶ÓÁеÄÃû³Æ:

noAck : ÉèÖÃÊÇ·ñÐèҪȷÈÏ£¬falseΪÐèҪȷÈÏ¡£

consumerTag: Ïû·ÑÕß±êÇ©£¬ÓÃÀ´Çø·Ö¶à¸öÏû·ÑÕß:

noLocal : ÉèÖÃΪtrue Ôò±íʾ²»Äܽ«Í¬Ò»¸öConnectionÖÐÉú²úÕß·¢Ë͵ÄÏûÏ¢´«Ë͸øÕâ¸öConnectionÖеÄÏû·ÑÕß:

exclusive : ÉèÖÃÊÇ·ñÅÅËû

arguments : ÉèÖÃÏû·ÑÕߵįäËû²ÎÊý

consumer: Ö¸¶¨´¦ÀíÏûÏ¢µÄÏû·ÑÕß¶ÔÏó¡£

À­Ä£Ê½

BasicGetResult result = channel.BasicGet("queueName", noAck: false);//»ñÈ¡ÏûÏ¢
channel.BasicAck(result.DeliveryTag, multiple: false);//È·ÈÏ

3.2.6 ¹Ø±ÕÁ¬½Ó

ÔÚÓ¦ÓóÌÐòʹÓÃÍêÖ®ºó£¬ÐèÒª¹Ø±ÕÁ¬½Ó£¬ÊÍ·Å×ÊÔ´:

channel.close();
conn.close() ;

ÏÔʽµØ¹Ø±ÕChannel ÊǸöºÃϰ¹ß£¬µ«Õâ²»ÊDZØÐëµÄ£¬ÔÚConnection ¹Ø±ÕµÄʱºò£¬Channel Ò²»á×Ô¶¯¹Ø±Õ¡£

½áÊøÓï#

ÒÔÉϼòµ¥½éÉÜÁË·Ö²¼Ê½ÏµÍ³ÖÐÏûÏ¢Öмä¼þµÄ¸ÅÄîÓë×÷Óã¬ÒÔ¼°RabbitMQµÄһЩ»ù±¾¸ÅÄîÓë¼òµ¥Ê¹Óá£ÏÂһƪÎÄÕ½«¼ÌÐøÕë¶ÔRabbitMQ½øÐÐ×ܽᡣÖ÷ÒªÄÚÈݰüÀ¨ºÎʱ´´½¨¶ÓÁС¢RabbitMQµÄÈ·ÈÏ»úÖÆ¡¢¹ýÆÚʱ¼äµÄʹÓá¢ËÀÐŶÓÁС¢ÒÔ¼°ÀûÓÃRabbitMQʵÏÖÑÓ³Ù¶ÓÁÐ......

 

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

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

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

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
¼Ü¹¹Éè¼Æ-̸̸¼Ü¹¹
ʵÏÖSaaS£¨Èí¼þ¼°·þÎñ£©¼Ü¹¹Èý´ó¼¼ÊõÌôÕ½
µ½µ×ʲôÊÇÊý¾ÝÖÐ̨£¿
ÏìӦʽ¼Ü¹¹¼ò½é
ÒµÎñ¼Ü¹¹¡¢Ó¦Óüܹ¹ÓëÔÆ»ù´¡¼Ü¹¹
×îпγÌ
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
´Ó´óÐ͵çÉ̼ܹ¹Ñݽø¿´»¥ÁªÍø¸ß¿ÉÓüܹ¹Éè¼Æ
´óÐÍ»¥ÁªÍø¸ß¿ÉÓüܹ¹Éè¼ÆÊµ¼ù
ÆóÒµ¼Ü¹¹Ê¦ (TOGAF¹Ù·½ÈÏÖ¤)
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
³É¹¦°¸Àý
ijÐÂÄÜÔ´µçÁ¦ÆóÒµ Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
Öк½¹¤ÒµÄ³Ñо¿Ëù ǶÈëʽÈí¼þ¿ª·¢Ö¸ÄÏ
ij¹ìµÀ½»Í¨ÐÐÒµ ǶÈëʽÈí¼þ¸ß¼¶Éè¼ÆÊµ¼ù
±±¾© º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Èí¼þ²âÊԼܹ¹Ê¦
±±¾©Ä³ÁìÏÈÊý×ÖµØÍ¼ ¼Ü¹¹Ê¦£¨Éè¼Æ°¸Àý£©