±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËÏûÏ¢Öмä¼þÊÇʲô£¿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ʵÏÖÑÓ³Ù¶ÓÁÐ......
|