¸üÐÂʱ¼ä:2020Äê07ÔÂ09ÈÕ10ʱ35·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:
1¡¢MQ¼ò½é
ÏûÏ¢Öмä¼þÀûÓøßЧ¿É¿¿µÄÏûÏ¢´«µÝ»úÖÆ½øÐÐÆ½Ì¨Î޹صÄÊý¾Ý½»Á÷£¬²¢»ùÓÚÊý¾ÝͨÐÅÀ´ ½øÐзֲ¼Ê½ÏµÍ³µÄ¼¯³É¡£Í¨¹ýÌṩÏûÏ¢´«µÝºÍÏûÏ¢ÅŶÓÄ£ÐÍ£¬Ëü¿ÉÒÔÔÚ·Ö²¼Ê½»·¾³ÏÂÀ©Õ¹½ø ³Ì¼äµÄͨÐÅ¡£¶ÔÓÚÏûÏ¢Öмä¼þ£¬³£¼û½ÇÉ«´óÖÂÒ²¾ÍÓÐ Producer£¨Éú²úÕߣ©¡¢Consumer£¨Ïû ·ÑÕߣ©¡£
³£¼ûµÄÏûÏ¢Öмä¼þ²úÆ·£º
1)ActiveMQ
ActiveMQÊÇApache³öÆ·£¬×îÁ÷Ðеģ¬ÄÜÁ¦Ç¿¾¢µÄ¿ªÔ´ÏûÏ¢×ÜÏß¡£ActiveMQ ÊÇ Ò»¸öÍêȫ֧³Ö JMS1.1ºÍJ2EE 1.4 ¹æ·¶µÄJMS Provider ʵÏÖ¡£ÎÒÃÇÔÚ±¾´Î¿Î³ÌÖÐ ½éÉÜ ActiveMQ µÄʹÓá£
2)RabbitMQ
AMQPÐÒéµÄÁ쵼ʵÏÖ£¬Ö§³Ö¶àÖÖ³¡¾°¡£ÌÔ±¦µÄ MySQL ¼¯ÈºÄÚ²¿ÓÐʹÓÃËü½øÐÐͨѶ£¬ OpenStack ¿ªÔ´ÔÆÆ½Ì¨µÄͨÐÅ×é¼þ£¬×îÏÈÔÚ½ðÈÚÐÐÒµµÃµ½ÔËÓá£
3)ZeroMQ Ê·ÉÏ×î¿ìµÄÏûÏ¢¶ÓÁÐϵͳ
4)Kafka Apache ϵÄÒ»¸ö×ÓÏîÄ¿
ÌØµã£º¸ßÍÌÍ£¬ÔÚһ̨ÆÕͨµÄ·þÎñÆ÷ÉϼȿÉÒÔ´ïµ½ 10W/s µÄÍÌÍÂËÙÂÊ£»ÍêÈ«µÄ·Ö²¼Ê½ÏµÍ³¡£Êʺϴ¦Àíº£Á¿Êý¾Ý¡£
2 MQ ×÷ÓÃ
1)½âñî :Öмä¼þÖеÄÉú²úÕßÖ»¹Ü·¢ËÍÏûÏ¢ , Ïû·ÑÕßÖ»Òª´Ó¶ÓÁе±ÖлñÈ¡ÏûÏ¢½øÐÐÏû·Ñ ¾Í¿ÉÒÔ , ´Ó¶øÀ´ÊµÏÖÒµÎñµÄ½âñî ¡£
2)ÈßÓà´æ´¢ : ÓÐЩÇé¿öÏ£¬´¦ÀíÊý¾ÝµÄ¹ý³Ì»áʧ°Ü¡£ÏûÏ¢Öмä¼þ¿ÉÒÔ°ÑÊý¾Ý½øÐг־û¯Ö±µ½ËüÃÇÒѾ±»ÍêÈ«´¦Àí£¬Í¨¹ýÕâÒ»·½Ê½¹æ±ÜÁËÊý¾Ý¶ªÊ§·çÏÕ¡£ÔÚ°ÑÒ»¸öÏûÏ¢´ÓÏûÏ¢ÖÐ¼ä ¼þÖÐɾ ³ý֮ǰ£¬ÐèÒªÄãµÄ´¦ÀíϵͳÃ÷È·µØÖ¸³ö¸ÃÏûÏ¢¼º¾±»´¦ÀíÍê³É£¬´Ó¶øÈ·±£ÄãµÄÊý¾Ý ±»°²È«µØ±£ ´æÖ±µ½ÄãʹÓÃÍê±Ï¡£
3)¿É»Ö¸´ÐÔ: µ±ÏµÍ³Ò»²¿·Ö×é¼þʧЧʱ£¬²»»áÓ°Ïìµ½Õû¸öϵͳ ¡£ ÏûÏ¢Öмä¼þ½µµÍÁ˽ø³Ì¼äµÄ ¸åºÏ¶È£¬ËùÒÔ¼´Ê¹Ò»¸ö´¦ÀíÏûÏ¢µÄ½ø³Ì¹Òµô£¬¼ÓÈëÏûÏ¢Öмä¼þÖеÄÏûÏ¢ÈÔÈ»¿ÉÒÔÔÚϵ ͳ»Ö¸´ºó ½øÐд¦Àí ¡£
4)˳Ðò±£Ö¤: ÔÚ´ó¶àÊýʹÓó¡¾°Ï£¬Êý¾Ý´¦ÀíµÄ˳ÐòºÜÖØÒª£¬´ó²¿·ÖÏûÏ¢Öмä¼þÖ§³ÖÒ» ¶¨³Ì ¶ÈÉϵÄ˳ÐòÐÔ¡£
5)»º³å: ÔÚÈκÎÖØÒªµÄϵͳÖУ¬¶¼»á´æÔÚÐèÒª²»Í¬´¦Àíʱ¼äµÄÔªËØ¡£ÏûÏ¢Öмä¼þͨ¹ýÒ» ¸ö»º ³å²ãÀ´°ïÖúÈÎÎñ×î¸ßЧÂʵØÖ´ÐУ¬Ð´ÈëÏûÏ¢Öмä¼þµÄ´¦Àí»á¾¡¿ÉÄÜ¿ìËÙ ¡£
6)Ò첽ͨÐÅ: ÔںܶàʱºòÓ¦Óò»ÏëÒ²²»ÐèÒªÁ¢¼´´¦ÀíÏûÏ¢ ¡£ ÏûÏ¢Öмä¼þÌṩÁËÒì²½´¦ Àí»úÖÆ£¬ÔÊÐíÓ¦ÓðÑһЩÏûÏ¢·ÅÈëÏûÏ¢Öмä¼þÖУ¬µ«²¢²»Á¢¼´´¦ÀíËü£¬ÔÚÖ®ºóÐèÒªµÄʱºòÔÙ ÂýÂý´¦Àí ¡£
3¡¢RabbitMQ °²×°¼°Æô¶¯
3.1 °²×°ÒÀÀµ»·¾³
rpm -ivh erlang-20.3.8.6-1.el6.x86_64.rpm
yum -y install epel-release
yum -y install socat
3.2 °²×° rabbitMQ
rpm -ivh rabbitmq-server-3.7.7-1.el6.noarch.rpm
3.4 RabbitMQ Æô¶¯/Í£Ö¹
Æô¶¯ : service rabbitmq-server start
Í£Ö¹: service rabbitmq-server stop
²é¿´×´Ì¬: service rabbitmq-server status
4¡¢Rabbit MQ ¹ÜÀí½çÃæ·ÃÎÊ
4.1 Overview ¸ÅÒª
¸ÃÀ¸Ä¿Ö÷ҪչʾµÄÊÇMQµÄ¸ÅÒªÐÅÏ¢ , ÈçÏûÏ¢µÄÊýÁ¿, Connection , Channel, Exchange , Queue , ConsumerµÄÊýÁ¿¡£

4.2 Exchange ½»»»Æ÷
¸ÃÀ¸Ä¿Ö÷ҪչʾµÄÊǵ±Ç°ÐéÄâÖ÷»úϵĽ»»»Æ÷£¬Ò²¿ÉÒÔÔÚ´ËÌí¼ÓÒ»¸öеĽ»»»Æ÷£¬ ²¢ÇÒÅä ÖöÔÓ¦µÄ½»»»Æ÷µÄ¹æÔòÊôÐÔ ¡£

4.3 Queues ¶ÓÁÐ
¸ÃÀ¸Ä¿Õ¹Ê¾µÄÊÇÏûÏ¢¶ÓÁеÄÐÅÏ¢£¬ÀïÃæÓи÷¸ö¶ÓÁеĸÅÒªÐÅÏ¢£¬Ò²¿ÉÒÔÔÚ´ËÀ¸Ä¿Ìí¼Ó¶ÓÁÐQueue¡£

4.4 Adminϵͳ¹ÜÀí
¸ÃÀ¸Ä¿Õ¹Ê¾µÄÊÇÓû§¹ÜÀíµÄÐÅÏ¢£¬ °üº¬Óû§ÁбíµÄչʾ£¬Ìí¼ÓÓû§£¬Ìí¼ÓÐéÄâÖ÷»úµÈÐÅÏ¢¡£

5¡¢RabbitMQµÄÏà¹Ø¸ÅÄî
5.1 Éú²úÕßÓëÏû·ÑÕß
5.1.1 Éú²úÕß
Producer: Éú²úÕߣ¬¾ÍÊÇͶµÝÏûÏ¢µÄÒ»·½¡£
Éú²úÕß´´½¨ÏûÏ¢£¬È»ºó·¢²¼µ½ RabbitMQ ÖС£ÏûÏ¢Ò»°ã¿ÉÒÔ°üº¬ 2 ¸ö²¿·Ö£ºÏûÏ¢ÌåºÍ±êÇ© (Label)¡£ÏûÏ¢ÌåÒ²¿ÉÒÔ³ÆÖ®Îª payload£¬ÔÚʵ¼ÊÓ¦ÓÃÖУ¬Ïû Ï¢ÌåÒ»°ãÊÇÒ»¸ö´øÓÐÒµÎñÂß¼½á¹¹µÄÊý¾Ý£¬±ÈÈçÒ»¸öJSON ×Ö·û´®¡£µ±È»¿ÉÒÔ½øÒ»²½¶ÔÕâ¸öÏûÏ¢Ìå½øÐÐÐòÁл¯²Ù×÷¡£ÏûÏ¢µÄ±êÇ©ÓÃÀ´±íÊöÕâÌõÏûÏ¢£¬±ÈÈç Ò»¸ö½»»»Æ÷µÄÃû³ÆºÍÒ»¸ö·Óɼü ¡£Éú²úÕß°ÑÏûÏ¢½»ÓÉ RabbitMQ£¬RabbitMQÖ®ºó»á¸ù¾Ý±êÇ©°ÑÏûÏ¢·¢Ë͸ø¸ÐÐËȤµÄÏû·ÑÕß (Consumer ) ¡£
5.1.2 Ïû·ÑÕß
Consumer£ºÏû·ÑÕߣ¬¾ÍÊǽÓÊÕÏûÏ¢µÄÒ»·½¡£
Ïû·ÑÕßÁ¬½Óµ½RabbitMQ·þÎñÆ÷£¬²¢¶©Ôĵ½¶ÓÁÐÉÏ ¡£µ±Ïû·ÑÕßÏû·ÑÒ» ÌõÏûϢʱ£¬Ö» ÊÇÏû·ÑÏûÏ¢µÄÏûÏ¢Ìå(payload )¡£ÔÚÏûϢ·ÓɵĹý³ÌÖУ¬ÏûÏ¢µÄ±êÇ©»á¶ªÆú£¬´æÈëµ½¶Ó ÁÐÖеÄÏûÏ¢Ö»ÓÐÏûÏ¢Ì壬Ïû·ÑÕßÒ²Ö»»áÏû·Ñµ½ÏûÏ¢Ì壬Ҳ¾Í²»ÖªµÀÏûÏ¢µÄÉú²úÕßÊÇË£¬µ±È»Ïû·ÑÕßÒ²²»ÐèÒªÖªµÀ ¡£
5.2 ¶ÓÁÐ
Queue£º¶ÓÁУ¬ÊÇRabbitMQµÄÄÚ²¿¶ÔÏó£¬ÓÃÓÚ´æ´¢ÏûÏ¢¡£

5.3 ½»»»Æ÷£¬Â·Óɼü£¬°ó¶¨
5.3.1 ½»»»Æ÷
Exchange: ½»»»Æ÷¡£ÔÚÉÏͼÖÐÎÒÃÇÔÝʱ¿ÉÒÔÀí½â³ÉÉú²úÕß½«ÏûϢͶµÝµ½¶ÓÁÐÖУ¬Êµ¼ÊÉÏÕâ¸öÔÚRabbitMQÖв»»á·¢Éú¡£ÕæÊµÇé¿öÊÇ£¬Éú²úÕß½«ÏûÏ¢·¢Ë͵½ Exchange (½»»» Æ÷)£¬Óɽ»»»Æ÷½«ÏûϢ·Óɵ½Ò»¸ö»òÕß¶à¸ö¶ÓÁÐÖС£Èç¹û·Óɲ»µ½£¬»ò Ðí»á·µ»Ø¸øÉú²úÕߣ¬ »òÐíÖ±½Ó¶ªÆú¡£ÕâÀï¿ÉÒÔ½« RabbitMQÖеĽ»»»Æ÷¿´×÷Ò»¸ö¼òµ¥µÄʵÌå¡£

RabbitMQÖеĽ»»»Æ÷ÓÐËÄÖÖÀàÐÍ£¬ËÄÖÖÀàÐÍ·Ö±ðÊÇ fanout¡¢direct¡¢topic ¡¢ headers£¬²»Í¬µÄÀàÐÍÓÐ×Ų»Í¬µÄ·ÓɲßÂÔ¡£
5.3.2 ·Óɼü
RoutingKey : ·Óɼü ¡£Éú²úÕß½«ÏûÏ¢·¢¸ø½»»»Æ÷ µÄʱºò£¬Ò»°ã»áÖ¸¶¨Ò»¸öRoutingKey£¬Óà À´Ö¸¶¨Õâ¸öÏûÏ¢µÄ·ÓɹæÔò£¬¶øÕâ¸öRoutingKeyÐèÒªÓë½»»»Æ÷ÀàÐͺͰ󶨼ü (BindingKey) ÁªºÏʹÓòÅÄÜ×îÖÕÉúЧ¡£
ÔÚ½»»»Æ÷ÀàÐͺͰ󶨼ü (BindingKey) ¹Ì¶¨µÄÇé¿öÏ£¬Éú²úÕß¿ÉÒÔÔÚ·¢ËÍÏûÏ¢¸ø½»»»Æ÷ʱ£¬Í¨¹ýÖ¸¶¨RoutingKeyÀ´¾ö¶¨ÏûÏ¢Á÷ÏòÄÄÀï¡£
5.3.3 °ó¶¨
Binding£º°ó¶¨¡£RabbitMQ ÖÐͨ¹ý°ó¶¨½«½»»»Æ÷Óë¶ÓÁйØÁªÆðÀ´£¬Ôڰ󶨵ÄʱºòÒ» °ã»áÖ¸¶¨Ò»¸ö°ó¶¨¼ü(BindingKey) £¬ÕâÑùRabbitMQ¾ÍÖªµÀÈçºÎÕýÈ·µØ½«ÏûϢ·Óɵ½¶ÓÁÐÁË¡£
5.4 ½»»»Æ÷ÀàÐÍ
1)fanout£º Ëü»á°ÑËùÓз¢Ë͵½¸Ã½»»»Æ÷µÄÏûϢ·Óɵ½ËùÓÐÓë¸Ã½»»»Æ÷°ó¶¨µÄ¶ÓÁÐ ÖС£
2)direct£º ¸ÃÀàÐ͵Ľ»»»Æ÷·ÓɹæÔòÒ²ºÜ¼òµ¥£¬Ëü»á°ÑÏûÏ¢ ·Óɵ½ÄÇЩBindingKeyºÍRoutingKeyÍêȫƥÅäµÄ¶ÓÁÐÖС£
3)topic£º Ç°Ãæ½²µ½directÀàÐ͵Ľ»»»Æ÷·ÓɹæÔòÊÇÍêȫƥÅä BindingKey ºÍRoutingKey£¬µ«ÊÇÕâÖÖÑϸñµÄÆ¥Å䷽ʽÔںܶàÇé¿öϲ»ÄÜÂú×ãʵ¼ÊÒµÎñµÄÐèÇó¡£ topic ÀàÐ͵Ľ»»»Æ÷ÔÚÆ¥Å乿ÔòÉϽøÐÐÁËÀ©Õ¹£¬ËüÓëdirectÀàÐ͵Ľ»»»Æ÷ÏàËÆ£¬Ò²Êǽ«ÏûϢ·Óɵ½BindingKey ºÍRoutingKey ÏàÆ¥ÅäµÄ¶ÓÁÐÖУ¬µ«ÕâÀïµÄÆ¥Å乿ÔòÓÐЩ ²»Í¬£¬ËüÔ¼¶¨£º
RoutingKeyΪһ¸öµãºÅ"." ·Ö¸îµÄ×Ö·û´®£¬È磺com.itcast.client , com.itheima.exam¡£
BindingKeyÓëRoutingKeyÒ»ÑùÒ²ÊǵãºÅ"." ·Ö¸îµÄ×Ö·û´®¡£ BindingKeyÖпÉÒÔ´æÔÚÁ½ÖÖÌØÊâµÄ×Ö·û´®"*" ºÍ "#" , ÓÃÓÚÄ£ºýÆ¥Å䣬ÆäÖÐ "#"ÓÃÓÚÆ¥ÅäÒ»¸öµ¥´Ê£¬"*"ÓÃÓÚÆ¥Åä¶à¸öµ¥¸ö(¿ÉÒÔÊÇÁã¸ö)¡£
4)headers : ¸ÃÀàÐ͵Ľ»»»Æ÷²»ÒÀÀµÓÚ·ÓɼüµÄÆ¥Å乿ÔòÀ´Â·ÓÉÏûÏ¢£¬¶øÊǸù¾Ý ·¢Ë͵ÄÏûÏ¢ÄÚÈÝÖеÄheadersÊôÐÔ½øÐÐÆ¥Åä¡£
6¡¢Éú²úÕß·¢ËÍÏûÏ¢
6.1 ¶ÓÁаó¶¨
6.1.1 ´´½¨¶ÓÁÐ
ÔÚRabbitMQµÄºǫ́¹ÜÀí½çÃæÖд´½¨Ò»¸ö¶ÓÁУ¬Ö¸¶¨¶ÓÁÐÃû³Æ¡£

6.1.2 ´´½¨½»»»Æ÷Exchange
ÔÚRabbitMQµÄºǫ́¹ÜÀí½çÃæÖд´½¨Ò»¸ö½»»»Æ÷£¬Ö¸¶¨½»»»Æ÷µÄÃû³Æ£¬ ²¢ÇÒÖ¸¶¨½»»»Æ÷ÀàÐÍ¡£

6.1.3 °ó¶¨¶ÓÁÐÓë½»»»Æ÷
ÔÚ½»»»Æ÷Áбíµã»÷¶ÔÓ¦µÄ½»»»Æ÷ £¬ ½øÈëµ½°ó¶¨½çÃæ£¬Ö¸¶¨¶ÓÁÐÃû³Æqueue£¬Ö¸¶¨RoutingKey£¬ ͨ¹ý¸ÃRoutingKeyÀ´°ó¶¨¸Ã¶ÓÁÐÓë½»»»Æ÷Exchange ¡£

Ö®ºó£¬ÔÚ·¢ËÍÏûϢʱ£¬ Ö¸¶¨ÁËExchange£¬¼° RoutingKey£¬ ¾Í¿ÉÒÔ½«¸ÃÏûϢ·Óɵ½¸Ã¶ÓÁÐqueueÖС£

6.2 ·¢ËÍÏûÏ¢Âß¼´úÂë
6.2.1 ÒýÈëÒÀÀµ

6.2.2 ·¢ËÍÏûÏ¢


6.3 ·¢ËÍÏûϢƽ̨¼à²â

7¡¢Ïû·ÑÕß½ÓÊÜÏûÏ¢ 7.1 ÒýÈëÒÀÀµ

7.2 ½ÓÊÕÏûÏ¢



7.3 ½á¹ûÊä³ö

ÆäÖУº
consumerTag : ÏûÏ¢Ïû·ÑÕߵıêÇ©
properties : ÏûÏ¢ÄÚÈݵÄÍ·ÐÅÏ¢Êý¾Ý
envelope : ÏûÏ¢ÌåµÄÊý¾Ý°ü£¬ÆäÖаüº¬ÏûÏ¢·¢ËÍʱָ¶¨µÄexchange£¬routingKeyµÈÐÅÏ¢¡£
²ÂÄãϲ»¶£º
ʲôÊÇö¾Ù£¿ÈçºÎʹÓÃö¾Ù£¿
ºÚÂí³ÌÐòÔ±JavaSE»ù´¡¼ÓÇ¿½×¶Î¿Î³Ì·¢²¼¡¾ÄÚº¬ÏÂÔØÁ´½Ó¡¿
JavaðÅÝÅÅÐòËã·¨Ïêϸ½éÉÜ¡¾2020×îС¿
JavaÖм¶³ÌÐòÔ±¿Î³Ì
±±¾©Ð£Çø