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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
·Ö²¼Ê½ÏµÍ³ÏûÏ¢Öмä¼þ¡ª¡ªRabbitMQµÄʹÓÃ˼¿¼Æª
 
×÷ÕߣºÀÏÓÚ
  1828  次浏览      28
 2021-4-1 
 
±à¼­ÍƼö:
±¾ÆªÎÄÕ£¬ÎÒÃÇ˼¿¼ÁËʹÓÃ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µÄÔËάƪ£¬»áÔÚÒÔºóµÄÎÄÕÂÖмÌÐø¸ø´ó¼Ò·ÖÏí¡£

 

   
1828 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢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¹ìµÀ½»Í¨ÐÐÒµ ǶÈëʽÈí¼þ¸ß¼¶Éè¼ÆÊµ¼ù
±±¾© º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Èí¼þ²âÊԼܹ¹Ê¦
±±¾©Ä³ÁìÏÈÊý×ÖµØÍ¼ ¼Ü¹¹Ê¦£¨Éè¼Æ°¸Àý£©