±à¼ÍƼö: |
±¾ÆªÎÄÕ£¬ÎÒÃÇ˼¿¼ÁËʹÓÃRabbitMQ¹ý³ÌÖÐÐèҪעÒâµÄ¼¸¸öÎÊÌâ¡£
À´×ÔÓÚ²©¿ÍÔ°,ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
ǰÑÔ#
Ç°ÃæµÄÁ½ÆªÎÄÕ·ֲ¼Ê½ÏµÍ³ÏûÏ¢Öмä¼þ¡ª¡ªRabbitMQµÄʹÓûù´¡ÆªÓë·Ö²¼Ê½ÏµÍ³ÏûÏ¢Öмä¼þ¡ª¡ªRabbitMQµÄʹÓýø½×ƪ£¬ÎÒÃǼòµ¥½éÉÜÁËÏûÏ¢Öмä¼þÓëRabbitMQµÄһЩ»ù±¾¸ÅÄî¡¢»ù´¡Ó÷¨ÒÔ¼°³£ÓõöÌØÐÔ¡£µ«Èç¹ûÎÒÃÇÏë¸üºÃµÄÈ¥½áºÏÎÒÃǵÄÒµÎñ³¡¾°Ê¹ÓúÃRabbitMQ£¬ÎÒÃÇ»¹ÐèҪ˼¿¼Ò»Ð©ÎÊÌâ¡£±ÈÈç:ºÎʱȥ´´½¨¶ÓÁÐ,RabbitMQµÄ³Ö¾Ã»¯£¬ÈçºÎ±£Ö¤ÏûÏ¢µ½´ïRabbitMQ£¬ÒÔ¼°Ïû·ÑÕßÈçºÎÈ·ÈÏÏûÏ¢......
Ò»¡¢ºÎʱ´´½¨¶ÓÁÐ#
´ÓÇ°ÃæµÄÎÄÕÂÎÒÃÇÖªµÀ£¬RabbitMQ¿ÉÒÔÑ¡ÔñÔÚÉú²úÕß´´½¨¶ÓÁУ¬Ò²¿ÉÒÔÔÚÏû·ÑÕß¶Ë´´½¨¶ÓÁУ¬Ò²¿ÉÒÔÌáǰ´´½¨ºÃ¶ÓÁУ¬¶øÉú²úÕßÏû·ÑÕßÖ±½ÓʹÓü´¿É¡£
RabbitMQµÄÏûÏ¢´æ´¢ÔÚ¶ÓÁÐÖУ¬½»»»Æ÷µÄʹÓò¢²»ÕæÕýºÄ·Ñ·þÎñÆ÷µÄÐÔÄÜ£¬¶ø¶ÓÁлᡣÈçÔÚʵ¼ÊÒµÎñÓ¦ÓÃÖУ¬ÐèÒª¶ÔËù´´½¨µÄ¶ÓÁеÄÁ÷Á¿¡¢ÄÚ´æÕ¼Óü°Íø¿¨Õ¼ÓÃÓÐÒ»¸öÇåÎúµÄÈÏÖª£¬Ô¤¹ÀÆäƽ¾ùÖµºÍ·åÖµ£¬ÒÔ±ãÔڹ̶¨Ó²¼þ×ÊÔ´µÄÇé¿öÏÂÄܹ»½øÐкÏÀíÓÐЧµÄ·ÖÅä¡£
°´ÕÕRabbitMQ¹Ù·½½¨Ò飬Éú²úÕߺÍÏû·ÑÕß¶¼Ó¦¸Ã³¢ÊÔ´´½¨(ÕâÀïÖ¸ÉùÃ÷²Ù×÷)¶ÓÁС£ÕâËäÈ»ÊÇÒ»¸öºÜºÃµÄ½¨Ò飬µ«ÊÇÔÚÎÒ¿´À´Õâ¸öʱ¼äÉÏûÓÐ×îºÃµÄ·½°¸£¬Ö»ÓÐ×îÊʺϵķ½°¸¡£ÎÒÃÇÍùÍùÐèÒª½áºÏÒµÎñ¡¢×ÊÔ´µÈ·½ÃæÔÚ¸÷ÖÖ·½°¸ÀïÃæÑ¡ÔñÒ»¸ö×îÊʺÏÎÒÃǵķ½°¸¡£
Èç¹ûÒµÎñ±¾ÉíÔڼܹ¹Éè¼ÆÖ®³õ¼º¾³ä·ÖµØÔ¤¹ÀÁ˶ÓÁеÄʹÓÃÇé¿ö£¬ÍêÈ«¿ÉÒÔÔÚÒµÎñ³ÌÐòÉÏÏß֮ǰÔÚ·þÎñÆ÷ÉÏ´´½¨ºÃ(±ÈÈçͨ¹ýÒ³Ãæ¹ÜÀí¡¢RabbitMQÃüÁî»òÕ߸üºÃµÄÊÇ´ÓÅäÖÃÖÐÐÄÏ·¢)£¬ÕâÑùÒµÎñ³ÌÐòÒ²¿ÉÒÔÃâÈ¥ÉùÃ÷µÄ¹ý³Ì£¬Ö±½ÓʹÓü´¿É¡£Ô¤ÏÈ´´½¨ºÃ×ÊÔ´»¹ÓÐÒ»¸öºÃ´¦ÊÇ£¬¿ÉÒÔÈ·±£½»»»Æ÷ºÍ¶ÓÁÐÖ®¼äÕýÈ·µØ°ó¶¨Æ¥Åä¡£ºÜ¶àʱºò£¬ÓÉÓÚÈËΪÒòËØ¡¢´úÂëȱÏݵȣ¬·¢ËÍÏûÏ¢µÄ½»»»Æ÷²¢Ã»Óаó¶¨ÈκζÓÁУ¬ÄÇôÏûÏ¢½«»á¶ªÊ§:»òÕß½»»»Æ÷°ó¶¨ÁËij¸ö¶ÓÁУ¬µ«ÊÇ·¢ËÍÏûϢʱµÄ·ÓɼüÎÞ·¨ÓëÏÖ´æµÄ¶ÓÁÐÆ¥Å䣬ÄÇôÏûÏ¢Ò²»á¶ªÊ§¡£µ±È»¿ÉÒÔÅäºÏmandatory²ÎÊý»òÕß±¸·Ý½»»»Æ÷(¹ØÓÚmandatory²ÎÊýµÄʹÓÃÏêϸ¿É²Î¿¼ÎÒµÄÉÏһƪÎÄÕÂ)
À´Ìá¸ß³ÌÐòµÄ½¡×³ÐÔ¡£Óë´Ëͬʱ£¬Ô¤¹ÀºÃ¶ÓÁеÄʹÓÃÇé¿ö·Ç³£ÖØÒª£¬Èç¹ûÔÚºóÆÚÔËÐйý³ÌÖг¬¹ýÔ¤¶¨µÄãÐÖµ£¬¿ÉÒÔ¸ù¾Ýʵ¼ÊÇé¿ö¶Ôµ±Ç°¼¯Èº½øÐÐÀ©ÈÝ»òÕß½«ÏàÓ¦µÄ¶ÓÁÐÇ¨ÒÆµ½ÆäËû¼¯Èº¡£Ç¨ÒƵĹý³ÌÒ²¿ÉÒÔ¶ÔÒµÎñ³ÌÐòÍêȫ͸Ã÷¡£´ËÖÖ·½·¨Ò²¸üÓÐÀûÓÚ¿ª·¢ºÍÔËά·Ö¹¤£¬±ãÓÚÏàÓ¦×ÊÔ´µÄ¹ÜÀí¡£Èç¹û¼¯Èº×ÊÔ´³ä×㣬¶ø¼´½«Ê¹ÓõĶÓÁÐËùÕ¼ÓõÄ×ÊÔ´ÓÖÔڿɿصķ¶Î§Ö®ÄÚ£¬ÎªÁËÔö¼ÓÒµÎñ³ÌÐòµÄÁé»îÐÔ£¬Ò²ÍêÈ«¿ÉÒÔÔÚÒµÎñ³ÌÐòÖÐÉùÃ÷¶ÓÁС£ÖÁÓÚÊÇʹÓÃÔ¤ÏÈ·ÖÅä´´½¨×ÊÔ´µÄ¾²Ì¬·½Ê½»¹ÊǶ¯Ì¬µÄ´´½¨·½Ê½£¬ÐèÒª´ÓÒµÎñÂß¼±¾Éí¡¢¹«Ë¾ÔËάÌåϵºÍ¹«Ë¾Ó²¼þ×ÊÔ´µÈ·½Ã濼ÂÇ¡£
¶þ¡¢³Ö¾Ã»¯¼°²ßÂÔ#
×÷Ϊһ¸öÄÚ´æÖмä¼þ£¬ÔÚ±£Ö¤ÁËËٶȵÄÇé¿öÏ£¬²»¿É±ÜÃâ´æÔÚÈçÄÚ´æÊý¾Ý¿âͬÑùµÄÎÊÌ⣬¼´¶ªÊ§ÎÊÌâ¡£³Ö¾Ã»¯¿ÉÒÔÌá¸ßRabbitMQ
µÄ¿É¿¿ÐÔ£¬ÒÔ·ÀÔÚÒì³£Çé¿ö(ÖØÆô¡¢¹Ø±Õ¡¢å´»úµÈ)ϵÄÊý¾Ý¶ªÊ§¡£RabbitMQµÄ³Ö¾Ã»¯·ÖΪÈý¸ö²¿·Ö:½»»»Æ÷µÄ³Ö¾Ã»¯¡¢¶ÓÁеij־û¯ºÍÏûÏ¢µÄ³Ö¾Ã»¯¡£
½»»»Æ÷µÄ³Ö¾Ã»¯
½»»»Æ÷µÄ³Ö¾Ã»¯ÊÇͨ¹ýÔÚÉùÃ÷¶ÓÁÐÊǽ«durable ²ÎÊýÖÃΪtrue ʵÏÖµÄ(¸Ã²ÎÊýĬÈÏΪfalse)¡£Èç¹û½»»»Æ÷²»ÉèÖó־û¯£¬ÄÇôÔÚRabbitMQ
·þÎñÖØÆôÖ®ºó£¬Ïà¹ØµÄ½»»»Æ÷ÔªÊý¾Ý»á¶ªÊ§£¬²»¹ýÏûÏ¢²»»á¶ªÊ§£¬Ö»ÊDz»Äܽ«ÏûÏ¢·¢Ë͵½Õâ¸ö½»»»Æ÷ÖÐÁË¡£¶ÔÒ»¸ö³¤ÆÚʹÓõĽ»»»Æ÷À´Ëµ£¬½¨Ò齫ÆäÖÃΪ³Ö¾Ã»¯µÄ¡£
¶ÓÁеij־û¯
¶ÓÁеij־û¯ÊÇͨ¹ýÔÚÉùÃ÷¶ÓÁÐʱ½«durable ²ÎÊýÖÃΪtrue ʵÏÖµÄ(¸Ã²ÎÊýĬÈÏΪfalse)£¬Èç¹û¶ÓÁв»ÉèÖó־û¯£¬ÄÇôÔÚRabbitMQ
·þÎñÖØÆôÖ®ºó£¬Ïà¹Ø¶ÓÁеÄÔªÊý¾Ý»á¶ªÊ§£¬´ËʱÊý¾ÝÒ²»á¶ªÊ§¡£ÕýËùν"Ƥ֮²»´æ£¬Ã«½«Ñɸ½"£¬¶ÓÁж¼Ã»ÓÐÁË£¬ÏûÏ¢ÓÖÄÜ´æÔÚÄÄÀïÄØ?
ÏûÏ¢µÄ³Ö¾Ã»¯
¶ÓÁеij־û¯Äܱ£Ö¤Æä±¾ÉíµÄÔªÊý¾Ý²»»áÒòÒì³£Çé¿ö¶ø¶ªÊ§£¬µ«ÊDz¢²»Äܱ£Ö¤ÄÚ²¿Ëù´æ´¢µÄÏûÏ¢²»»á¶ªÊ§¡£ÒªÈ·±£ÏûÏ¢²»»á¶ªÊ§£¬ÐèÒª½«ÆäÉèÖÃΪ³Ö¾Ã»¯¡£Í¨¹ý½«ÏûÏ¢µÄͶµÝģʽ(BasicPropertiesÖеÄDeliveryModeÊôÐÔ)ÉèÖÃΪ2¼´¿ÉʵÏÖÏûÏ¢µÄ³Ö¾Ã»¯¡£
Òò´Ë£¬ÏûÏ¢Èç¹ûÒªÏëÔÚRabbitÖØÆô¡¢¹Ø±Õ¡¢å´»úʱÄܹ»»Ö¸´£¬ÐèÒª×öµ½ÒÔÏÂÈýµã:
°ÑÏûÏ¢µÄͶµÝģʽÉèÖÃΪ2
·¢Ë͵½³Ö¾Ã»¯µÄ½»»»Æ÷
µ½´ï³Ö¾Ã»¯µÄ¶ÓÁÐ
×¢Òâ:RabbitMQ È·±£³Ö¾Ã»¯ÏûÏ¢ÄÜ´Ó·þÎñÆ÷ÖØÆôÖлָ´µÄ·½Ê½Êǽ«ËüÃÇдÈë´ÅÅÌÉϵÄÒ»¸ö³Ö¾Ã»¯ÈÕÖ¾ÎļþÖС£µ±·¢²¼Ò»Ìõ³Ö¾Ã»¯ÏûÏ¢µ½³Ö¾Ã»¯½»»»Æ÷ʱ£¬Rabbit»áÔÚÈÕÖ¾Ìá½»µ½ÈÕÖ¾Îļþºó²Å·¢ËÍÏìÓ¦(¿ªÆôÉú²úÕßÈ·ÈÏ»úÖÆ)¡£Ö®ºó£¬Èç¹ûÏûÏ¢µ½Á˷dz־û¯¶ÓÁУ¬Ëü»á×Ô¶¯´ÓÈÕÖ¾ÎļþÖÐɾ³ý£¬²¢ÇÒÎÞ·¨ÔÚ·þÎñÆ÷ÖØÆôºó»Ö¸´¡£Òò´Ëµ¥µ¥Ö»ÉèÖöÓÁг־û¯£¬ÖØÆôÖ®ºóÏûÏ¢»á¶ªÊ§;µ¥µ¥Ö»ÉèÖÃÏûÏ¢µÄ³Ö¾Ã»¯£¬ÖØÆôÖ®ºó¶ÓÁÐÏûʧ£¬¼Ì¶øÏûÏ¢Ò²¶ªÊ§¡£µ¥µ¥ÉèÖÃÏûÏ¢³Ö¾Ã»¯¶ø²»ÉèÖöÓÁеij־û¯ÊǺÁÎÞÒâÒåµÄ¡£µ±´Ó³Ö¾Ã»¯¶ÓÁÐÖÐÏû·ÑÁËÏûÏ¢ºó(²¢ÇÒÈ·ÈϺó)£¬RabbitMQ»áÔڳ־û¯ÈÕÖ¾ÖаÑÕâÌõÏûÏ¢±ê¼ÇΪµÈ´ýÀ¬»øÊÕ¼¯¡£¶øÔÚÏû·Ñ³Ö¾Ã»¯ÏûϢ֮ǰ£¬ÈôRabbitMQ·þÎñÆ÷ÖØÆô£¬»á×Ô¶¯Öؽ¨½»»»Æ÷¡¢¶ÓÁÐÒÔ¼°°ó¶¨£¬Öز¥³Ö¾Ã»¯ÈÕÖ¾ÎļþÖеÄÏûÏ¢µ½ºÏÊʵĶÓÁлòÕß½»»»Æ÷ÉÏ(È¡¾öÓÚå´»úʱ£¬ÏûÏ¢´¦ÔÚ·ÓɵÄÄĸö»·½Ú)¡£
ΪÁ˱£ÕÏÏûÏ¢²»»á¶ªÊ§£¬Ò²ÐíÎÒÃÇ¿ÉÒÔ¼òµ¥´Ö±©µÄ½«ËùÓеÄÏûÏ¢±ê¼ÇΪ³Ö¾Ã»¯£¬µ«ÕâÑùÎÒÃǻḶ³öÐÔÄܵĴú¼Û¡£Ð´Èë´ÅÅ̵ÄËٶȱÈдÈëÄÚ´æµÄËÙ¶ÈÂýµÃ²»Ö»Ò»µãµã¡£¶ÔÓÚ¿É¿¿ÐÔ²»ÊÇÄÇô¸ßµÄÏûÏ¢¿ÉÒÔ²»²ÉÓó־û¯´¦ÀíÒÔÌá¸ßÕûÌåµÄÍÌÍÂÁ¿¡£ÔÚÑ¡ÔñÊÇ·ñÒª½«ÏûÏ¢³Ö¾Ã»¯Ê±£¬ÐèÒªÔÚ¿É¿¿ÐÔºÍÍÂÍÌÁ¿Ö®¼ä×öÒ»¸öȨºâ¡£
½«½»»»Æ÷¡¢¶ÓÁС¢ÏûÏ¢¶¼ÉèÖÃÁ˳־û¯Ö®ºó¾ÍÄܰٷÖÖ®°Ù±£Ö¤Êý¾Ý²»¶ªÊ§ÁËÂð?
´ÓÏû·ÑÕßÀ´Ëµ£¬Èç¹ûÔÚ¶©ÔÄÏû·Ñ¶ÓÁÐʱ½«noAck²ÎÊýÉèÖÃΪtrue £¬ÄÇôµ±Ïû·ÑÕß½ÓÊÕµ½Ïà¹ØÏûÏ¢Ö®ºó£¬»¹Ã»À´µÃ¼°´¦Àí¾Íå´»úÁË£¬ÕâÑùÒ²ËãÊý¾Ý¶ªÊ§¡£
Ôڳ־û¯µÄÏûÏ¢ÕýÈ·´æÈëRabbitMQ Ö®ºó£¬»¹ÐèÒªÓÐÒ»¶Îʱ¼ä(ËäÈ»ºÜ¶Ì£¬µ«ÊDz»¿ÉºöÊÓ¡µ²ÅÄÜ´æÈë´ÅÅÌÖ®ÖС£RabbitMQ
²¢²»»áΪÿÌõÏûÏ¢¶¼½øÐÐͬ²½´æÅ̵Ĵ¦Àí£¬¿ÉÄܽö½ö±£´æµ½²Ù×÷ϵͳ»º´æÖ®Öжø²»ÊÇÎïÀí´ÅÅÌÖ®ÖС£Èç¹ûÔÚÕâ¶Îʱ¼äÄÚRabbitMQ
·þÎñ½Úµã·¢ÉúÁËÑÒ»ú¡¢ÖØÆôµÈÒì³£Çé¿ö£¬ÏûÏ¢±£´æ»¹Ã»À´µÃ¼°ÂäÅÌ£¬ÄÇôÕâЩÏûÏ¢½«»á¶ªÊ§¡£
¹ØÓÚµÚÒ»¸öÎÊÌ⣬¿ÉÒÔͨ¹ýÏû·ÑÕßÈ·ÈÏ»úÖÆÀ´½â¾ö¡£¶øµÚ¶þ¸öÎÊÌâ¿ÉÒÔͨ¹ýÉú²úÕßÈ·ÈÏ»úÖÆÀ´½â¾ö£¬Ò²¿ÉÒÔʹÓþµÏñ¶ÓÁлúÖÆ(¾µÏñ¶ÓÁлúÖÆ£¬½«ÔÚÔËάƪ×ܽá)¡£Éú²úÕßÈ·ÈÏÏû·ÑÕßÈ·ÈÏÇëÍùÏ¿´¡£
Èý¡¢Éú²úÕßÈ·ÈÏ#
ÉÏÎÄÎÒÃÇÖªµÀ£¬ÔÚʹÓÃRabbitMQµÄʱºò£¬¿ÉÒÔͨ¹ýÏûÏ¢³Ö¾Ã»¯²Ù×÷À´½â¾öÒòΪ·þÎñÆ÷µÄÒì³£±ÀÀ£¶øµ¼ÖµÄÏûÏ¢¶ªÊ§£¬³ý´ËÖ®Í⣬ÎÒÃÇ»¹»áÓöµ½Ò»¸öÎÊÌ⣬µ±ÏûÏ¢µÄÉú²úÕß½«ÏûÏ¢·¢ËͳöÈ¥Ö®ºó£¬ÏûÏ¢µ½µ×ÓÐûÓÐÕýÈ·µØµ½´ï·þÎñÆ÷ÄØ?Èç¹û²»½øÐÐÌØÊâÅäÖã¬Ä¬ÈÏÇé¿öÏ·¢ËÍÏûÏ¢µÄ²Ù×÷ÊDz»»á·µ»ØÈκÎÐÅÏ¢¸øÉú²úÕߵģ¬Ò²¾ÍÊÇĬÈÏÇé¿öÏÂÉú²úÕßÊDz»ÖªµÀÏûÏ¢ÓÐûÓÐÕýÈ·µØµ½´ï·þÎñÆ÷¡£Èç¹ûÔÚÏûÏ¢µ½´ï·þÎñÆ÷֮ǰ¼º¾¶ªÊ§£¬³Ö¾Ã»¯²Ù×÷Ò²½â¾ö²»ÁËÕâ¸öÎÊÌ⣬ÒòΪÏûÏ¢¸ù±¾Ã»Óе½´ï·þÎñÆ÷£¬ºÎ̸³Ö¾Ã»¯?
RabbitMQÕë¶ÔÕâ¸öÎÊÌ⣬ÌṩÁËÁ½ÖÖ½â¾ö·½Ê½:
ͨ¹ýÊÂÎñ»úÖÆÊµÏÖ:
ͨ¹ý·¢ËÍ·½È·ÈÏ(publisher confirm)»úÖÆÊµÏÖ¡£
3.1 RabbitMQ ÊÂÎñ»úÖÆ#
RabbitMQ ¿Í»§¶ËÖÐÓëÊÂÎñ»úÖÆÏà¹ØµÄ·½·¨ÓÐÈý¸ö:channel.TxSelect(ÓÃÓÚ½«µ±Ç°ÐŵÀÉèÖÃΪÊÂÎñģʽ);channel.TxCommit(ÓÃÓÚÌá½»ÊÂÎñ)£¬channel.TxRollback(ÓÃÓڻعöÊÂÎñ)¡£ÔÚͨ¹ýchannel.TxSelect·½·¨¿ªÆôÊÂÎñÖ®ºó£¬ÎÒÃDZã¿ÉÒÔ·¢²¼ÏûÏ¢¸øRabbitMQÁË£¬Èç¹ûÊÂÎñÌá½»³É¹¦£¬ÔòÏûÏ¢Ò»¶¨µ½´ïÁËRabbitMQ
ÖУ¬Èç¹ûÔÚÊÂÎñÌá½»Ö´ÐÐ֮ǰÓÉÓÚRabbitMQÒì³£±ÀÀ£»òÕ߯äËûÔÒòÅ׳öÒì³££¬Õâ¸öʱºòÎÒÃDZã¿ÉÒÔ½«Æä²¶»ñ£¬½ø¶øÍ¨¹ýÖ´ÐÐchannel.TxRollback·½·¨À´ÊµÏÖÊÂÎñ»Ø¹ö¡£Ê¾Àý´úÂëÈçÏÂËùʾ:
channel.TxSelect();//½«ÐŵÀÉèÖÃΪÊÂÎñģʽ
try
{
//do something
var message = Encoding.UTF8.GetBytes("TestMsg");
channel.BasicPublish("normalExchange",
"NormalRoutingKey", true, null, message);
//do something
channel.TxCommit();//Ìá½»ÊÂÎñ
}
catch (Exception ex)
{
//log(ex);
channel.TxRollback();
} |
ÊÂÎñȷʵÄܹ»½â¾öÏûÏ¢·¢ËÍ·½ºÍRabbitMQÖ®¼äÏûϢȷÈϵÄÎÊÌ⣬ֻÓÐÏûÏ¢³É¹¦±»RabbitMQ½ÓÊÕ£¬ÊÂÎñ²ÅÄÜÌá½»³É¹¦£¬·ñÔò±ã¿ÉÔÚ²¶»ñÒì³£Ö®ºó½øÐÐÊÂÎñ»Ø¹ö£¬Óë´Ëͬʱ¿ÉÒÔ½øÐÐÏûÏ¢ÖØ·¢¡£µ«ÊÇʹÓÃÊÂÎñͬÑù»á´øÀ´Ò»Ð©ÎÊÌâ¡£
»á×èÈû£¬·¢²¼Õß±ØÐëµÈ´ýbroker´¦Àíÿ¸öÏûÏ¢¡£
ÊÂÎñÊÇÖØÁ¿¼¶µÄ£¬Ã¿´ÎÌá½»¶¼ÐèÒªfsync()£¬ÐèÒªºÄ·Ñ´óÁ¿µÄʱ¼ä
ÊÂÎñ·Ç³£ºÄÐÔÄÜ£¬»á½µµÍRabbitMQµÄÏûÏ¢ÍÌÍÂÁ¿¡£
3.2 ·¢ËÍ·½È·ÈÏ»úÖÆ#
Ç°Ãæ½éÉÜÁËRabbitMQ¿ÉÄÜ»áÓöµ½µÄÒ»¸öÎÊÌ⣬¼´ÏûÏ¢·¢ËÍ·½(Éú²úÕß¡µ²¢²»ÖªµÀÏûÏ¢ÊÇ·ñÕæÕýµØµ½´ïÁËRabbitMQ¡£ËæºóÁ˽⵽ÔÚAMQPÐÒé²ãÃæÌṩÁËÊÂÎñ»úÖÆÀ´½â¾öÕâ¸öÎÊÌ⣬µ«ÊDzÉÓÃÊÂÎñ»úÖÆÊµÏÖ»áÑÏÖØ½µµÍRabbitMQµÄÏûÏ¢ÍÌÍÂÁ¿£¬ÕâÀï¾ÍÒýÈëÁËÒ»ÖÖÇáÁ¿¼¶µÄ·½Ê½Ò»·¢ËÍ·½È·ÈÏ(publisher
confirm)»úÖÆ¡£Éú²úÕß½«ÐŵÀÉèÖóÉconfirmÈ·ÈÏ)ģʽ£¬Ò»µ©ÐŵÀ½øÈëconfirmģʽ£¬ËùÓÐÔÚ¸ÃÐŵÀÉÏÃæ·¢²¼µÄÏûÏ¢¶¼»á±»Ö¸ÅÉÒ»¸öΨһµÄID(
´Ó1¿ªÊ¼)£¬Ò»µ©ÏûÏ¢±»Í¶µÝµ½ËùÓÐÆ¥ÅäµÄ¶ÓÁÐÖ®ºó£¬RabbitMQ¾Í»á·¢ËÍÒ»¸öÈ·ÈÏ(BasicAck)
¸øÉú²úÕß(°üº¬ÏûÏ¢µÄΨһID)£¬Õâ¾ÍʹµÃÉú²úÕßÖªÏþÏûÏ¢ÒѾÕýÈ·µ½´ïÁËÄ¿µÄµØÁË¡£Èç¹ûÏûÏ¢ºÍ¶ÓÁÐÊǿɳ־û¯µÄ£¬ÄÇôȷÈÏÏûÏ¢»áÔÚÏûϢдÈë´ÅÅÌÖ®ºó·¢³ö¡£

·¢ËÍ·½È·ÈÏģʽ£¬Ê¾Àý´úÂëÈçÏÂ:
//ʾÀý1--ͬ²½µÈ´ý
channel.ConfirmSelect();//¿ªÆôÈ·ÈÏģʽ
var message = Encoding.UTF8.GetBytes("TestMsg");
channel.ExchangeDeclare("normalExchange",
"direct", true, false, null);
channel.QueueDeclare("normalQueue",
true, false, false, null);
channel.QueueBind("normalQueue", "normalExchange",
"NormalRoutingKey");
channel.BasicPublish("normalExchange",
"NormalRoutingKey", true, null, message);
//var result=channel.WaitForConfirmsOrDie(Timeout);
//WaitForConfirmsOrDie ʹÓÃWaitForConfirmsOrDie
ÔÚRabbit·¢ËÍNackÃüÁî»ò³¬Ê±Ê±»áÅ׳öÒ»¸öÒì³£
var result = channel.WaitForConfirms();//µÈ´ý¸ÃÐŵÀËùÓÐδȷÈϵÄÏûÏ¢½á¹û
if(!result){
//send message failed;
} |
//ʾÀý2--Ò첽֪ͨ
channel.ConfirmSelect();//¿ªÆôÈ·ÈÏģʽ
var message = Encoding.UTF8.GetBytes("TestMsg");
channel.ExchangeDeclare("normalExchange",
"direct", true, false, null);
channel.QueueDeclare("normalQueue",
true, false, false, null);
channel.QueueBind("normalQueue", "normalExchange",
"NormalRoutingKey");
channel.BasicPublish("normalExchange",
"NormalRoutingKey", true, null, message);
channel.BasicAcks += (model, ea) =>
{
//ÏûÏ¢±»Í¶µÝµ½ËùÓÐÆ¥ÅäµÄ¶ÓÁÐÖ®ºó£¬RabbitMQ¾Í»á·¢ËÍÒ»¸öÈ·ÈÏ(Basic.Ack)¸øÉú²úÕß(°üº¬ÏûÏ¢µÄΨһID)
//ea.MultipleΪTrue´ú±í ea.DeliveryTag±àºÅ֮ǰµÄÏûÏ¢¾ùÒѱ»È·ÈÏ¡£
//do something;
};
channel.BasicNacks += (model, ea) =>
{
//Èç¹ûRabbitMQ ÒòΪ×ÔÉíÄÚ²¿´íÎóµ¼ÖÂÏûÏ¢¶ªÊ§£¬¾Í»á·¢ËÍÒ»Ìõnack(BasicNack)
ÃüÁî
//do something;
}; |
¹ØÓÚÉú²úÕßÈ·ÈÏ»úÖÆÍ¬Ñù»áÓÐһЩÎÊÌ⣬broker²»Äܱ£Ö¤ÏûÏ¢»á±»confirm£¬Ö»ÖªµÀ½«»á½øÐÐconfirm¡£ÕâÑùÈç¹ûbrokerÓëÉú²úÕßÖ®¼äµÄÁ¬½Ó¶Ï¿ª£¬µ¼ÖÂÉú²úÕß²»ÄÜÊÕµ½È·ÈÏÏûÏ¢£¬¿ÉÄÜ»áÖØ¸´½øÐз¢²¼¡£×ÜÖ®£¬Éú²úÕßÈ·ÈÏģʽ¸ø¿Í»§¶ËÌṩÁËÒ»ÖÖ½ÏΪÇáÁ¿¼¶µÄ·½Ê½£¬Äܹ»¸ú×ÙÄÄЩÏûÏ¢±»broker´¦Àí£¬ÄÄЩ¿ÉÄÜÒòΪbrokerå´µô»òÕßÍøÂçʧ°ÜµÄÇé¿ö¶øÖØÐ·¢²¼¡£
×¢Òâ:ÊÂÎñ»úÖÆºÍpublisher confirm»úÖÆÁ½ÕßÊÇ»¥³âµÄ£¬²»Äܹ²´æ¡£Èç¹ûÆóͼ½«ÒÑ¿ªÆôÊÂÎñģʽµÄÐŵÀÔÙÉèÖÃΪpublisher
confmnģʽ£¬ RabbitMQ»á±¨´í,»òÕßÈç¹ûÆóͼ½«ÒÑ¿ªÆôpublisher confirmģʽµÄÐŵÀÉèÖÃΪÊÂÎñģʽ£¬
RabbitMQÒ²»á±¨´í¡£ÔÚÐÔÄÜÉÏÀ´¿´£¬¶øµ½µ×Ó¦¸ÃÑ¡ÔñÊÂÎñ»úÖÆ»¹ÊÇConfirm»úÖÆ£¬ÔòÐèÒª½áºÏÎÒÃǵÄÒµÎñ³¡¾°¡£
ËÄ¡¢Ïû·ÑÕßÈ·ÈÏ#
ΪÁ˱£Ö¤ÏûÏ¢´Ó¶ÓÁпɿ¿µØ´ïµ½Ïû·ÑÕߣ¬RabbitMQÌṩÁËÏûϢȷÈÏ»úÖÆ(message acknowledgement)¡£Ïû·ÑÕßÔÚ¶©ÔĶÓÁÐʱ£¬¿ÉÒÔÖ¸¶¨noAck²ÎÊý£¬µ±noAckµÈÓÚfalseʱ£¬RabbitMQ»áµÈ´ýÏû·ÑÕßÏÔʽµØ»Ø¸´È·ÈÏÐźźó²Å´ÓÄÚ´æ(»òÕß´ÅÅÌ)ÖÐÒÆÈ¥ÏûÏ¢(ʵÖÊÉÏÊÇÏÈ´òÉÏɾ³ý±ê¼Ç£¬Ö®ºóÔÙɾ³ý)¡£µ±noAckµÈÓÚtrueʱ£¬RabbitMQ»á×Ô¶¯°Ñ·¢ËͳöÈ¥µÄÏûÏ¢ÖÃΪȷÈÏ£¬È»ºó´ÓÄÚ´æ(»òÕß´ÅÅÌ)ÖÐɾ³ý£¬¶ø²»¹ÜÏû·ÑÕßÊÇ·ñÕæÕýµØÏû·Ñµ½ÁËÕâЩÏûÏ¢¡£
²ÉÓÃÏûϢȷÈÏ»úÖÆºó£¬Ö»ÒªÉèÖÃnoAck²ÎÊýΪfalse£¬Ïû·ÑÕß¾ÍÓÐ×ã¹»µÄʱ¼ä´¦ÀíÏûÏ¢(ÈÎÎñ)£¬²»Óõ£ÐÄ´¦ÀíÏûÏ¢¹ý³ÌÖÐÏû·ÑÕß½ø³Ì¹ÒµôºóÏûÏ¢¶ªÊ§µÄÎÊÌ⣬ÒòΪRabbitMQ»áÒ»Ö±µÈ´ý³ÖÓÐÏûÏ¢Ö±µ½Ïû·ÑÕßÏÔʽµ÷ÓÃBasicAckÃüÁîΪֹ¡£
µ±noAck²ÎÊýÖÃΪfalse£¬¶ÔÓÚRabbitMQ·þÎñ¶Ë¶øÑÔ£¬¶ÓÁÐÖеÄÏûÏ¢·Ö³ÉÁËÁ½¸ö²¿·Ö:Ò»²¿·ÖÊǵȴýͶµÝ¸øÏû·ÑÕßµÄÏûÏ¢:Ò»²¿·ÖÊǼº¾Í¶µÝ¸øÏû·ÑÕߣ¬µ«ÊÇ»¹Ã»ÓÐÊÕµ½Ïû·ÑÕßÈ·ÈÏÐźŵÄÏûÏ¢¡£Èç¹ûRabbitMQ
һֱûÓÐÊÕµ½Ïû·ÑÕßµÄÈ·ÈÏÐźţ¬²¢ÇÒÏû·Ñ´ËÏûÏ¢µÄÏû·ÑÕß¼º¾¶Ï¿ªÁ¬½Ó£¬ÔòRabbitMQ»á°²ÅŸÃÏûÏ¢ÖØÐ½øÈë¶ÓÁУ¬µÈ´ýͶµÝ¸øÏÂÒ»¸öÏû·ÑÕߣ¬µ±È»Ò²ÓпÉÄÜ»¹ÊÇÔÀ´µÄÄǸöÏû·ÑÕß¡£
RabbitMQ²»»áΪδȷÈϵÄÏûÏ¢ÉèÖùýÆÚʱ¼ä£¬ËüÅжϴËÏûÏ¢ÊÇ·ñÐèÒªÖØÐÂͶµÝ¸øÏû·ÑÕßµÄΨһÒÀ¾ÝÊÇÏû·Ñ¸ÃÏûÏ¢µÄÏû·ÑÕßÁ¬½ÓÊÇ·ñ¼º¾¶Ï¿ª£¬ÕâôÉè¼ÆµÄÔÒòÊÇRabbitMQ
ÔÊÐíÏû·ÑÕßÏû·ÑÒ»ÌõÏûÏ¢µÄʱ¼ä¿ÉÒԺܾúܾá£
¹ØÓÚRabbitMQÏû·ÑÕßÈ·ÈÏ»úÖÆÊ¾Àý´úÂëÈçÏÂ:
//ÍÆÄ£Ê½
EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
//¶¨ÒåÏû·ÑÕ߻ص÷ʼþ
consumer.Received += (model, ea) =>
{
//do someting;
//channel.BasicReject(ea.DeliveryTag, requeue:
true);//¾Ü¾ø
//requeue²ÎÊýΪtrue»áÖØÐ½«ÕâÌõÏûÏ¢´æÈë¶ÓÁУ¬ÒÔ±ã¿ÉÒÔ·¢Ë͸øÏÂÒ»¸ö¶©ÔĵÄÏû·ÑÕß
channel.BasicAck(ea.DeliveryTag, multiple: false);//È·ÈÏ
//Èô:multiple²ÎÊýΪtrue£¬ÔòÈ·ÈÏDeliverTagÕâ¸ö±àºÅ֮ǰµÄÏûÏ¢
};
channel.BasicConsume(queue: "queueName",
noAck: false,
consumer: consumer);
//Àģʽ
BasicGetResult result = channel.BasicGet("queueName",
noAck: false);
//È·ÈÏ
channel.BasicAck(result.DeliveryTag, multiple:
false); |

ÈçÉÏ£¬Ïû·ÑÕßÔÚÏû·ÑÏûÏ¢µÄͬʱ£¬Rabbit»áͬ²½¸øÓèÏû·ÑÕßÒ»¸öDeliveryTag£¬Õâ¸öDeliveryTag¾ÍÏñÎÒÃÇÊý¾Ý¿âÖеÄÖ÷¼ü£¬Ïû·ÑÕßÔÚÏû·ÑÍê±ÏºóÄÃ×ÅÕâ¸öDeliveryTagÈ¥RabbitÈ·ÈÏ»ò¾Ü¾øÕâ¸öÏûÏ¢¡£
void BasicAck(ulong
deliveryTag, bool multiple);
void BasicReject(ulong deliveryTag, bool requeue);
void BasicNack(ulong deliveryTag, bool multiple,
bool requeue); |
deliveryTag:¿ÉÒÔ¿´×÷ÏûÏ¢µÄ±àºÅ£¬ËüÊÇÒ»¸ö64λµÄ³¤ÕûÐÍÖµ£¬×î´óÖµÊÇ9223372036854775807¡£
requeue:Èç¹ûrequeue ²ÎÊýÉèÖÃΪtrue£¬ÔòRabbitMQ»áÖØÐ½«ÕâÌõÏûÏ¢´æÈë¶ÓÁУ¬ÒÔ±ã¿ÉÒÔ·¢Ë͸øÏÂÒ»¸ö¶©ÔĵÄÏû·ÑÕß;Èç¹ûrequeue
²ÎÊýÉèÖÃΪfalse£¬ÔòRabbitMQÁ¢¼´»á°ÑÏûÏ¢´Ó¶ÓÁÐÖÐÒÆ³ý£¬¶ø²»»á°ÑËü·¢Ë͸øÐµÄÏû·ÑÕß¡£
BasicRejectÃüÁîÒ»´ÎÖ»ÄܾܾøÒ»ÌõÏûÏ¢£¬Èç¹ûÏëÒªÅúÁ¿¾Ü¾øÏûÏ¢£¬Ôò¿ÉÒÔʹÓÃBasic.NackÕâ¸öÃüÁî¡£
multiple:ÔÚBasicAckÖУ¬multiple ²ÎÊýÉèÖÃΪtrue Ôò±íʾȷÈÏdeliveryTag±àºÅ֮ǰËùÓÐÒѱ»µ±Ç°Ïû·ÑÕßÈ·ÈϵÄÏûÏ¢¡£ÔÚBasicNackÖУ¬multiple
²ÎÊýÉèÖÃΪtrue Ôò±íʾ¾Ü¾ødeliveryTag ±àºÅ֮ǰËùÓÐδ±»µ±Ç°Ïû·ÑÕßÈ·ÈϵÄÏûÏ¢¡£
˵Ã÷:½«channel.BasicReject »òÕßchannel.BasicNackÖеÄrequeueÉèÖÃΪfalse
£¬¿ÉÒÔÆôÓÃ"ËÀÐŶÓÁÐ"µÄ¹¦ÄÜ¡£(¹ØÓÚËÀÐŶÓÁÐÇë¿´ÎÒµÄÉÏһƪÎÄÕ https://www.cnblogs.com/hunternet/p/9697754.html£©¡£
ÉÏÊörequeue£¬¶¼»á½«ÏûÏ¢ÖØÐ´æÈë¶ÓÁз¢Ë͸øÏÂÒ»¸öÏû·ÑÕß(Ò²ÓпÉÄÜÊÇÆäËüÏû·ÑÕß)¡£¹ØÓÚrequeue»¹ÓÐÏÂÃæÒ»ÖÖÓ÷¨¡£¿ÉÒÔÑ¡ÔñÊÇ·ñ²¹·¢¸øµ±Ç°µÄconsumer¡£
//²¹·¢ÏûÏ¢ trueÍ˻ص½queueÖÐ
/falseÖ»²¹·¢¸øµ±Ç°µÄconsumer
channel.BasicRecover(true); |
×¢Ò⣺RabbitMQ½ö½öͨ¹ýConsumerµÄÁ¬½ÓÖжÏÀ´È·ÈϸÃMessage²¢Ã»Óб»ÕýÈ·´¦Àí¡£Ò²¾ÍÊÇ˵£¬RabbitMQ¸øÁËConsumer×ã¹»³¤µÄʱ¼äÀ´×öÊý¾Ý´¦Àí¡£Èç¹ûÍü¼ÇÁËack£¬ÄÇôºó¹ûºÜÑÏÖØ¡£µ±ConsumerÍ˳öʱ£¬Message»áÖØÐ·ַ¢¡£È»ºóRabbitMQ»áÕ¼ÓÃÔ½À´Ô½¶àµÄÄڴ棬ÓÉÓÚRabbitMQ»á³¤Ê±¼äÔËÐУ¬Õâ¸ö¡°ÄÚ´æÐ¹Â©¡±ÊÇÖÂÃüµÄ¡£
Îå¡¢ÏûÏ¢·Ö·¢Óë˳Ðò#
5.1 ÏûÏ¢·Ö·¢#
µ±RabbitMQ ¶ÓÁÐÓµÓжà¸öÏû·ÑÕßʱ£¬¶ÓÁÐÊÕµ½µÄÏûÏ¢½«ÒÔÂÖѯ(round-robin)µÄ·Ö·¢·½Ê½·¢Ë͸øÏû·ÑÕß¡£Ã¿ÌõÏûÏ¢Ö»»á·¢Ë͸ø¶©ÔÄÁбíÀïµÄÒ»¸öÏû·ÑÕß¡£ÕâÖÖ·½Ê½·Ç³£ÊʺÏÀ©Õ¹£¬¶øÇÒËüÊÇרÃÅΪ²¢·¢³ÌÐòÉè¼ÆµÄ¡£Èç¹ûÏÖÔÚ¸ºÔؼÓÖØ£¬ÄÇôֻÐèÒª´´½¨¸ü¶àµÄÏû·ÑÕßÀ´Ïû·Ñ´¦ÀíÏûÏ¢¼´¿É¡£
ºÜ¶àʱºòÂÖѯµÄ·Ö·¢»úÖÆÒ²²»ÊÇÄÇôÓÅÑÅ¡£Ä¬ÈÏÇé¿öÏ£¬Èç¹ûÓÐn¸öÏû·ÑÕߣ¬ÄÇôRabbitMQ»á½«µÚmÌõÏûÏ¢·Ö·¢¸øµÚm%n
(È¡ÓàµÄ·½Ê½)¸öÏû·ÑÕߣ¬ RabbitMQ ²»¹ÜÏû·ÑÕßÊÇ·ñÏû·Ñ²¢¼º¾È·ÈÏÁËÏûÏ¢¡£ÊÔÏëһϣ¬Èç¹ûijЩÏû·ÑÕßÈÎÎñ·±ÖØ£¬À´²»¼°Ïû·ÑÄÇô¶àµÄÏûÏ¢£¬¶øÄ³Ð©ÆäËûÏû·ÑÕßÓÉÓÚijЩÔÒò(±ÈÈçÒµÎñÂß¼¼òµ¥¡¢»úÆ÷ÐÔÄÜ׿ԽµÈ)ºÜ¿ìµØ´¦ÀíÍêÁËËù·ÖÅäµ½µÄÏûÏ¢£¬½ø¶ø½ø³Ì¿ÕÏУ¬ÕâÑù¾Í»áÔì³ÉÕûÌåÓ¦ÓÃÍÌÍÂÁ¿µÄϽµ¡£ÄÇô¸ÃÈçºÎ´¦ÀíÕâÖÖÇé¿öÄØ?ÕâÀï¾ÍÒªÓõ½channel.BasicQos(int
prefetchCount)Õâ¸ö·½·¨£¬channel.BasicQos·½·¨ÔÊÐíÏÞÖÆÐŵÀÉϵÄÏû·ÑÕßËùÄܱ£³ÖµÄ×î´óδȷÈÏÏûÏ¢µÄÊýÁ¿¡£
¾ÙÀý˵Ã÷£¬ÔÚ¶©ÔÄÏû·Ñ¶ÓÁÐ֮ǰ£¬Ïû·Ñ¶Ë³ÌÐòµ÷ÓÃÁËchannel.BasicQos(5)£¬Ö®ºó¶©ÔÄÁËij¸ö¶ÓÁнøÐÐÏû·Ñ¡£RabbitMQ
»á±£´æÒ»¸öÏû·ÑÕßµÄÁÐ±í£¬Ã¿·¢ËÍÒ»ÌõÏûÏ¢¶¼»áΪ¶ÔÓ¦µÄÏû·ÑÕß¼ÆÊý£¬Èç¹û´ïµ½ÁËËùÉ趨µÄÉÏÏÞ£¬ÄÇôRabbitMQ
¾Í²»»áÏòÕâ¸öÏû·ÑÕßÔÙ·¢ËÍÈκÎÏûÏ¢¡£Ö±µ½Ïû·ÑÕßÈ·ÈÏÁËijÌõÏûÏ¢Ö®ºó£¬ RabbitMQ ½«ÏàÓ¦µÄ¼ÆÊý¼õ1£¬Ö®ºóÏû·ÑÕß¿ÉÒÔ¼ÌÐø½ÓÊÕÏûÏ¢£¬Ö±µ½Ôٴε½´ï¼ÆÊýÉÏÏÞ¡£
×¢Òâ:Basic.Qos µÄʹÓöÔÓÚÀģʽµÄÏû·Ñ·½Ê½ÎÞЧ.
void BasicQos
(uint prefetchSize, ushort prefetchCount, bool
global); |
prefetchCount£ºÔÊÐíÏÞÖÆÐŵÀÉϵÄÏû·ÑÕßËùÄܱ£³ÖµÄ×î´óδȷÈÏÏûÏ¢µÄÊýÁ¿£¬ÉèÖÃΪ0±íʾûÓÐÉÏÏÞ¡£
prefetchSize£ºÏû·ÑÕßËùÄܽÓÊÕδȷÈÏÏûÏ¢µÄ×ÜÌå´óСµÄÉÏÏÞ£¬µ¥Î»ÎªB£¬ÉèÖÃΪ0±íʾûÓÐÉÏÏÞ¡£
global£º¶ÔÓÚÒ»¸öÐŵÀÀ´Ëµ£¬Ëü¿ÉÒÔͬʱÏû·Ñ¶à¸ö¶ÓÁУ¬µ±ÉèÖÃÁËprefetchCount
´óÓÚ0 ʱ£¬Õâ¸öÐŵÀÐèÒªºÍ¸÷¸ö¶ÓÁÐе÷ÒÔÈ·±£·¢Ë͵ÄÏûÏ¢¶¼Ã»Óг¬¹ýËùÏÞ¶¨µÄprefetchCount
µÄÖµ£¬ÕâÑù»áʹRabbitMQ µÄÐÔÄܽµµÍ£¬ÓÈÆäÊÇÕâЩ¶ÓÁзÖÉ¢ÔÚ¼¯ÈºÖеĶà¸öBroker½ÚµãÖ®ÖС£RabbitMQ
ΪÁËÌáÉýÏà¹ØµÄÐÔÄÜ£¬ÔÚAMQPO-9-1 ÐÒéÖ®ÉÏÖØÐ¶¨ÒåÁËglobalÕâ¸ö²ÎÊý¡£ÈçϱíËùʾ:
global²ÎÊý |
AMQP 0-9-1 |
RabbitMQ |
false |
ÐŵÀÉÏËùÓеÄÏû·ÑÕß¶¼ÐèÒª×ñ´ÓprefetchCount
µÄÏÞÐŵÀÉÏеÄÏû·ÑÕßÐèÒª×ñ´ÓprefetchCount µÄÏÞ¶¨Öµ |
ÐŵÀÉÏеÄÏû·ÑÕßÐèÒª×ñ´ÓprefetchCount
µÄÏÞ¶¨Öµ |
true |
µ±Ç°Í¨ÐÅÁ´Â·( Connection)
ÉÏËùÓеÄÏû·ÑÕß¶¼ÐèÐŵÀÉÏËùÓеÄÏû·ÑÕß¶¼ÐèÒª×ñ´ÓprefetchCountµÄÏÞ¶¨Öµ |
ÐŵÀÉÏËùÓеÄÏû·ÑÕßÐèÒª×ñ´ÓprefetchCount
µÄÏÞ¶¨Öµ |
global²ÎÊý AMQP 0-9-1 RabbitMQ
false ÐŵÀÉÏËùÓеÄÏû·ÑÕß¶¼ÐèÒª×ñ´ÓprefetchCount µÄÏÞÐŵÀÉÏеÄÏû·ÑÕßÐèÒª×ñ´ÓprefetchCount
µÄÏÞ¶¨Öµ ÐŵÀÉÏеÄÏû·ÑÕßÐèÒª×ñ´ÓprefetchCount µÄÏÞ¶¨Öµ
true µ±Ç°Í¨ÐÅÁ´Â·( Connection) ÉÏËùÓеÄÏû·ÑÕß¶¼ÐèÐŵÀÉÏËùÓеÄÏû·ÑÕß¶¼ÐèÒª×ñ´ÓprefetchCountµÄÏÞ¶¨Öµ
ÐŵÀÉÏËùÓеÄÏû·ÑÕßÐèÒª×ñ´ÓprefetchCount µÄÏÞ¶¨Öµ
×¢Òâ:
1.¶ÔÓÚͬһ¸öÐŵÀÉϵĶà¸öÏû·ÑÕß¶øÑÔ£¬Èç¹ûÉèÖÃÁËprefetchCount
µÄÖµ£¬ÄÇô¶¼»áÉúЧ¡£
//α´úÂë
Consumer consumer1 = ...;
Consumer consumer2 = ...;
channel.BasicQos(10) ;
channel.BasicConsume("my-queue1" , false
, consumer1);
channel.BasicConsume("my-queue2" , false
, consumer2);
//Á½¸öÏû·ÑÕ߸÷×ÔµÄÄܽÓÊÕµ½µÄδȷÈÏÏûÏ¢µÄÉÏÏÞ¶¼Îª10 ¡£ |
2.Èç¹ûÔÚ¶©ÔÄÏûϢ֮ǰ£¬¼ÈÉèÖÃÁËglobal Ϊtrue µÄÏÞÖÆ£¬ÓÖÉèÖÃÁËglobalΪfalseµÄÏÞÖÆ,RabbitMQ
»áÈ·±£Á½Õß¶¼»áÉúЧ¡£µ«»áÔö¼ÓRabbitMQµÄ¸ºÔØÒòΪRabbitMQ ÐèÒª¸ü¶àµÄ×ÊÔ´À´Ðµ÷Íê³ÉÕâЩÏÞÖÆ¡£
//α´úÂë
Channel channel = ...;
Consumer consumerl = ...;
Consumer consumer2 = ...;
channel.BasicQos(3 , false);
channel.BasicQos(5 , true);
channel.BasicConsume("queuel" , false
, consumerl) ;
channel.BasicConsume("queue2" , false
, consumer2) ;
//ÕâÀïÿ¸öÏû·ÑÕß×î¶àÖ»ÄÜÊÕµ½3¸öδȷÈϵÄÏûÏ¢£¬Á½¸öÏû·ÑÕßÄÜÊÕµ½µÄδȷÈϵÄÏûÏ¢¸öÊýÖ®ºÍµÄÉÏÏÞΪ5 |
5.2 ÏûϢ˳Ðò#
ÏûÏ¢µÄ˳ÐòÐÔÊÇÖ¸Ïû·ÑÕßÏû·Ñµ½µÄÏûÏ¢ºÍ·¢ËÍÕß·¢²¼µÄÏûÏ¢µÄ˳ÐòÊÇÒ»Öµġ£¾Ù¸öÀý×Ó£¬²»¿¼ÂÇÏûÏ¢ÖØ¸´µÄÇé¿ö£¬Èç¹ûÉú²úÕß·¢²¼µÄÏûÏ¢·Ö±ðΪmsgl¡¢msg2¡¢msg3£¬ÄÇôÏû·ÑÕß±ØÈ»Ò²Êǰ´ÕÕmsgl¡¢msg2¡¢msg3µÄ˳Ðò½øÐÐÏû·ÑµÄ¡£
ĿǰºÜ¶à×ÊÁÏÏÔʾRabbitMQµÄÏûÏ¢Äܹ»±£ÕÏ˳ÐòÐÔ£¬ÕâÊDz»ÕýÈ·µÄ£¬»òÕß˵Õâ¸ö¹ÛµãÓкܴóµÄ¾ÖÏÞÐÔ¡£ÔÚ²»Ê¹ÓÃÈκÎRabbitMQµÄ¸ß¼¶ÌØÐÔ£¬Ò²Ã»ÓÐÏûÏ¢¶ªÊ§¡¢ÍøÂç¹ÊÕÏÖ®ÀàÒì³£µÄÇé¿ö·¢Éú£¬²¢ÇÒÖ»ÓÐÒ»¸öÏû·ÑÕßµÄÇé¿öÏ£¬×îºÃÒ²Ö»ÓÐÒ»¸öÉú²úÕßµÄÇé¿öÏ¿ÉÒÔ±£Ö¤ÏûÏ¢µÄ˳ÐòÐÔ¡£Èç¹ûÓжà¸öÉú²úÕßͬʱ·¢ËÍÏûÏ¢£¬ÎÞ·¨È·¶¨ÏûÏ¢µ½´ïBroker
µÄǰºó˳Ðò£¬Ò²¾ÍÎÞ·¨ÑéÖ¤ÏûÏ¢µÄ˳ÐòÐÔ¡£
ÄÇôÄÄЩÇé¿öÏÂRabbitMQ µÄÏûϢ˳ÐòÐԻᱻ´òÆÆÄØ?ÏÂÃæ½éÉܼ¸ÖÖ³£¼ûµÄÇéÐΡ£
Èç¹ûÉú²úÕßʹÓÃÁËÊÂÎñ»úÖÆ£¬ÔÚ·¢ËÍÏûÏ¢Ö®ºóÓöµ½Òì³£½øÐÐÁËÊÂÎñ»Ø¹ö£¬ÄÇôÐèÒªÖØÐ²¹³¥·¢ËÍÕâÌõÏûÏ¢£¬Èç¹û²¹³¥·¢ËÍÊÇÔÚÁíÒ»¸öÏß³ÌʵÏֵģ¬ÄÇôÏûÏ¢ÔÚÉú²úÕßÕâ¸öÔ´Í·¾Í³öÏÖÁË´íÐò¡£Í¬Ñù£¬Èç¹ûÆôÓÃpublisher
confirmʱ£¬ÔÚ·¢Éú³¬Ê±¡¢Öжϣ¬ÓÖ»òÕßÊÇÊÕµ½RabbitMQµÄBasicNackÃüÁîʱ£¬ÄÇôͬÑùÐèÒª²¹³¥·¢ËÍ£¬½á¹ûÓëÊÂÎñ»úÖÆÒ»Ñù»á´íÐò¡£»òÕßÕâÖÖ˵·¨ÓÐЩǣǿ£¬ÎÒÃÇ¿ÉÒÔ¹ÌÖ´µØÈÏΪÏûÏ¢µÄ˳ÐòÐÔ±£ÕÏÊÇ´Ó´æÈë¶ÓÁÐÖ®ºó¿ªÊ¼µÄ£¬¶ø²»ÊÇÔÚ·¢µüµÄʱºò¿ªÊ¼µÄ¡£
¿¼ÂÇÁíÒ»ÖÖÇéÐΣ¬Èç¹ûÉú²úÕß·¢Ë͵ÄÏûÏ¢ÉèÖÃÁ˲»Í¬µÄ³¬Ê±Ê±¼ä£¬¾®ÇÒÒ²ÉèÖÃÁËËÀÐŶÓÁУ¬ÕûÌåÉÏÀ´ËµÏ൱ÓÚÒ»¸öÑÓ³Ù¶ÓÁУ¬ÄÇôÏû·ÑÕßÔÚÏû·ÑÕâ¸öÑÓ³Ù¶ÓÁеÄʱºò£¬ÏûÏ¢µÄ˳Ðò±ØÈ»²»»áºÍÉú²úÕß·¢ËÍÏûÏ¢µÄ˳ÐòÒ»Ö¡£
Èç¹ûÏûÏ¢ÉèÖÃÁËÓÅÏȼ¶£¬ÄÇôÏû·ÑÕßÏû·Ñµ½µÄÏûÏ¢Ò²±ØÈ»²»ÊÇ˳ÐòÐԵġ£
Èç¹ûÒ»¸ö¶ÓÁа´ÕÕǰºó˳Ðò·ÖÓÐmsg1£¬ msg2¡¢msg3¡¢msg4Õâ4 ¸öÏûÏ¢£¬Í¬Ê±ÓÐConsumerAºÍConsumerB
ÕâÁ½¸öÏû·ÑÕßͬʱ¶©ÔÄÁËÕâ¸ö¶ÓÁС£¶ÓÁÐÖеÄÏûÏ¢ÂÖѯ·Ö·¢µ½¸÷¸öÏû·ÑÕßÖ®ÖУ¬ConsumerA ÖеÄÏûϢΪmsg1ºÍmsg3£¬ConsumerBÖеÄÏûϢΪmsg2¡¢msg4¡£ConsumerAÊÕµ½ÏûÏ¢msg1Ö®ºó²¢²»Ïë´¦Àí¶øµ÷ÓÃÁËBasicNack/BasicReject½«ÏûÏ¢¾Ü¾ø£¬Óë´Ëͬʱ½«requeueÉèÖÃΪtrue£¬ÕâÑùÕâÌõÏûÏ¢¾Í¿ÉÒÔÖØÐ´æÈë¶ÓÁÐÖС£ÏûÏ¢msg1Ö®ºó±»·¢Ë͵½ÁËConsumerBÖУ¬´ËʱConsumerB¼º¾Ïû·ÑÁËmsg2¡¢msg4£¬Ö®ºóÔÙÏû·Ñmsg1.ÕâÑùÏûϢ˳ÐòÐÔÒ²¾Í´íÂÒÁË¡£
°üÀ¨µ«²»½öÏÞÓÚÒÔÉϼ¸ÖÖÇéÐλáʹRabbitMQ ÏûÏ¢´íÐò¡£Èç¹ûÒª±£Ö¤ÏûÏ¢µÄ˳ÐòÐÔ£¬ÐèÒªÒµÎñ·½Ê¹ÓõÄʱºò×ö½øÒ»²½µÄ´¦Àí¡£ÈçÔÚÏûÏ¢ÌåÄÚÌí¼ÓÈ«¾ÖÓÐÐò±êʶµÈ¡£
Áù¡¢ÏûÏ¢´«Êä±£ÕÏ#
ÏûÏ¢¿É¿¿´«ÊäÒ»°ãÊÇÒµÎñϵͳ½ÓÈëÏûÏ¢Öмä¼þʱÊ×Òª¿¼ÂǵÄÎÊÌ⣬һ°ãÏûÏ¢Öмä¼þµÄÏûÏ¢
´«Êä±£ÕÏ·ÖΪÈý¸ö²ã¼¶¡£
At most once: ×î¶àÒ»´Î¡£ÏûÏ¢¿ÉÄܻᶪʧ£¬µ«¾ø²»»áÖØ¸´´«Êä¡£
At least once: ×îÉÙÒ»´Î¡£ÏûÏ¢¾ø²»»á¶ªÊ§£¬µ«¿ÉÄÜ»áÖØ¸´´«Êä¡£
Exactly once: Ç¡ºÃÒ»´Î¡£Ã¿ÌõÏûÏ¢¿Ï¶¨»á±»´«ÊäÒ»´ÎÇÒ½ö´«ÊäÒ»´Î¡£
RabbitMQ Ö§³ÖÆäÖеÄ"×î¶àÒ»´Î"ºÍ"×îÉÙÒ»´Î"¡£ÆäÖÐ"×îÉÙÒ»´Î"ͶµÝʵÏÖÐèÒª¿¼ÂÇÒÔÏÂÕâ¸ö¼¸¸ö·½ÃæµÄÄÚÈÝ:
ÏûÏ¢Éú²úÕßÐèÒª¿ªÆôÊÂÎñ»úÖÆ»òÕßpublisher confirm »úÖÆ£¬ÒÔÈ·±£ÏûÏ¢¿ÉÒÔ¿É¿¿µØ´«
Êäµ½RabbitMQ ÖС£
ÏûÏ¢Éú²úÕßÐèÒªÅäºÏʹÓÃmandatory²ÎÊý»òÕß±¸·Ý½»»»Æ÷À´È·±£ÏûÏ¢Äܹ»´Ó½»»»Æ÷
·Óɵ½¶ÓÁÐÖУ¬½ø¶øÄܹ»±£´æÏÂÀ´¶ø²»»á±»¶ªÆú¡£
ÏûÏ¢ºÍ¶ÓÁж¼ÐèÒª½øÐг־û¯´¦Àí£¬ÒÔÈ·±£RabbitMQ·þÎñÆ÷ÔÚÓöµ½Òì³£Çé¿öʱ²»»áÔì³ÉÏûÏ¢¶ªÊ§¡£
Ïû·ÑÕßÔÚÏû·ÑÏûÏ¢µÄͬʱÐèÒª½«noAckÉèÖÃΪfalse£¬È»ºóͨ¹ýÊÖ¶¯È·Èϵķ½Ê½È¥È·Èϼº¾ÕýÈ·Ïû·ÑµÄÏûÏ¢£¬ÒÔ±ÜÃâÔÚÏû·Ñ¶ËÒýÆð²»±ØÒªµÄÏûÏ¢¶ªÊ§¡£
"×î¶àÒ»´Î"µÄ·½Ê½¾ÍÎÞÐ뿼ÂÇÒÔÉÏÄÇЩ·½Ã棬Éú²úÕßËæÒâ·¢ËÍ£¬Ïû·ÑÕßËæÒâÏû·Ñ£¬²»¹ýÕâÑùºÜÄÑÈ·±£ÏûÏ¢²»»áÖØ¸´Ïû·Ñ¡£
"Ç¡ºÃÒ»´Î"ÊÇRabbitMQĿǰÎÞ·¨±£ÕϵÄ(ĿǰÎÒÒ²²»ÖªµÀÄĸöÖмä¼þÄܹ»±£Ö¤)¡£Ïû·ÑÕßÔÚÏû·ÑÍêÒ»ÌõÏûÏ¢Ö®ºóÏòRabbitMQ
·¢ËÍÈ·ÈÏBasicAckÃüÁ´ËʱÓÉÓÚÍøÂç¶Ï¿ª»òÕ߯äËûÔÒòÔì³ÉRabbitMQ²¢Ã»ÓÐÊÕµ½Õâ¸öÈ·ÈÏÃüÁÄÇôRabbitMQ²»»á½«´ËÌõÏûÏ¢±ê¼Çɾ³ý¡£ÔÚÖØÐ½¨Á¢Á¬½ÓÖ®ºó£¬Ïû·ÑÕß»¹ÊÇ»áÏû·Ñµ½ÕâÒ»ÌõÏûÏ¢£¬Õâ¾ÍÔì³ÉÁËÖØ¸´Ïû·Ñ¡£ÔÙ¿¼ÂÇÒ»ÖÖÇé¿ö£¬Éú²úÕßÔÚʹÓÃpublisher
confirm»úÖÆµÄʱºò£¬·¢ËÍÍêÒ»ÌõÏûÏ¢µÈ´ýRabbitMQ ·µ»ØÈ·ÈÏ֪ͨ£¬´ËÊ±ÍøÂç¶Ï¿ª£¬Éú²úÕß²¶»ñµ½Òì³£Çé¿ö£¬ÎªÁËÈ·±£ÏûÏ¢¿É¿¿ÐÔÑ¡ÔñÖØÐ·¢ËÍ£¬ÕâÑùRabbitMQÖоÍÓÐÁ½ÌõͬÑùµÄÏûÏ¢£¬ÔÚÏû·ÑµÄʱºò£¬Ïû·ÑÕ߾ͻáÖØ¸´Ïû·Ñ¡£¶ø½â¾öÖØ¸´Ïû·Ñ¿ÉÒÔͨ¹ýÏû·ÑÕßÃݵȵȷ½Ê½À´½â¾ö¡£
½áÊøÓï#
±¾ÆªÎÄÕ£¬ÎÒÃÇ˼¿¼ÁËʹÓÃRabbitMQ¹ý³ÌÖÐÐèҪעÒâµÄ¼¸¸öÎÊÌ⣬¶øÇ°Á½ÆªÎÄÕ¶ÔRabbitMQµÄ¸ÅÄîÒÔ¼°ÈçºÎʹÓÃ×öÁ˼òµ¥µÄ½éÉÜ£¬ÏàО¹ýÕâЩ½éÉÜÒѾ¶ÔRabbitMQÓÐÁË»ù±¾µÄÁ˽⡣µ«ÕâЩԶԶ²»¹»£¬ÏëÒª¸üºÃµÄÀûÓúÃRabbitMQ»¹ÐèÒª½áºÏÎÒÃǵÄÒµÎñ³¡¾°À´¸ü¶àµÄȥʹÓÃËü(ÇмDz»ÒªÎªÁËʹÓü¼Êõ¶øÊ¹Óü¼Êõ!)¡£¹ØÓÚRabbitMQµÄÔËάƪ£¬»áÔÚÒÔºóµÄÎÄÕÂÖмÌÐø¸ø´ó¼Ò·ÖÏí¡£
|