±à¼ÍƼö: |
ͨ¹ý±¾ÎÄ£¬¶ÔÓÚÏûÏ¢¶ÓÁм°Ïà¹Ø¼¼ÊõÑ¡ÐÍ£¬ÏàÐÅ´ó¼Ò»áÓÐÁ˸üÉîÈëµÄÀí½âºÍÈÏʶ,¸ü¶àÄÚÈÝÇë¿´È«ÎÄ
À´×ÔÓÚ¼òÊé,ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
ÏûÏ¢¶ÓÁÐ ÒѾÖð½¥³ÉΪÆóÒµÓ¦ÓÃϵͳ ÄÚ²¿Í¨ÐÅ µÄºËÐÄÊֶΡ£Ëü¾ßÓÐ µÍñîºÏ¡¢¿É¿¿Í¶µÝ¡¢¹ã²¥¡¢Á÷Á¿¿ØÖÆ¡¢×îÖÕÒ»ÖÂÐÔ
µÈһϵÁй¦ÄÜ¡£
µ±Ç°Ê¹Óý϶àµÄ ÏûÏ¢¶ÓÁÐ ÓÐ RabbitMQ¡¢RocketMQ¡¢ActiveMQ¡¢Kafka¡¢ZeroMQ¡¢MetaMQ
µÈ£¬¶ø²¿·Ö Êý¾Ý¿â Èç Redis¡¢MySQL ÒÔ¼° phxsql Ò²¿ÉʵÏÖÏûÏ¢¶ÓÁеŦÄÜ¡£

ÕýÎÄ
1. ÏûÏ¢¶ÓÁиÅÊö
ÏûÏ¢¶ÓÁÐ ÊÇÖ¸ÀûÓà ¸ßЧ¿É¿¿ µÄ ÏûÏ¢´«µÝ»úÖÆ ½øÐÐÓëÆ½Ì¨ÎÞ¹ØµÄ Êý¾Ý½»Á÷£¬²¢»ùÓÚ Êý¾ÝͨÐÅÀ´½øÐзֲ¼Ê½ÏµÍ³µÄ¼¯³É¡£

ͨ¹ýÌṩ ÏûÏ¢´«µÝ ºÍ ÏûÏ¢ÅÅ¶Ó Ä£ÐÍ£¬Ëü¿ÉÒÔÔÚ ·Ö²¼Ê½»·¾³ ÏÂÌṩ Ó¦Óýâñî¡¢µ¯ÐÔÉìËõ¡¢ÈßÓà´æ´¢¡¢Á÷Á¿Ï÷·å¡¢Ò첽ͨÐÅ¡¢Êý¾Ýͬ²½
µÈµÈ¹¦ÄÜ£¬Æä×÷Ϊ ·Ö²¼Ê½ÏµÍ³¼Ü¹¹ ÖеÄÒ»¸öÖØÒª×é¼þ£¬ÓÐמÙ×ãÇáÖØµÄµØÎ»¡£
2. ÏûÏ¢¶ÓÁеÄÌØµã
2.1. ²ÉÓÃÒì²½´¦Àíģʽ
ÏûÏ¢·¢ËÍÕß ¿ÉÒÔ·¢ËÍÒ»¸öÏûÏ¢¶øÎÞÐëµÈ´ýÏìÓ¦¡£ÏûÏ¢·¢ËÍÕß ½«ÏûÏ¢·¢Ë͵½Ò»Ìõ ÐéÄâµÄͨµÀ£¨Ö÷Ìâ »ò ¶ÓÁУ©ÉÏ£¬ÏûÏ¢½ÓÊÕÕß
Ôò ¶©ÔÄ »òÊÇ ¼àÌý ¸ÃͨµÀ¡£Ò»ÌõÐÅÏ¢¿ÉÄÜ×îÖÕת·¢¸ø Ò»¸ö»ò¶à¸ö ÏûÏ¢½ÓÊÕÕߣ¬ÕâЩ½ÓÊÕÕß¶¼ÎÞÐè¶Ô ÏûÏ¢·¢ËÍÕß
×ö³ö ͬ²½»ØÓ¦¡£Õû¸ö¹ý³Ì¶¼ÊÇ Òì²½µÄ¡£
2.2. Ó¦ÓÃϵͳ֮¼ä½âñîºÏ
Ö÷ÒªÌåÏÖÔÚÈçÏÂÁ½µã£º
·¢ËÍÕߺͽÓÊÜÕß²»±ØÁ˽â¶Ô·½¡¢Ö»ÐèÒª È·ÈÏÏûÏ¢£»
·¢ËÍÕߺͽÓÊÜÕß ²»±ØÍ¬Ê±ÔÚÏß¡£
±ÈÈçÔÚÏß½»Ò×ϵͳΪÁ˱£Ö¤Êý¾ÝµÄ ×îÖÕÒ»Ö£¬ÔÚ Ö§¸¶ÏµÍ³ ´¦ÀíÍê³Éºó»á°Ñ Ö§¸¶½á¹û ·Åµ½ ÏûÏ¢Öмä¼þ
À֪ͨ ¶©µ¥ÏµÍ³ ÐÞ¸Ä ¶©µ¥Ö§¸¶×´Ì¬¡£Á½¸öϵͳÊÇͨ¹ýÏûÏ¢Öмä¼þ½âñîµÄ¡£
3. ÏûÏ¢¶ÓÁеĴ«µÝ·þÎñÄ£ÐÍ
ÏûÏ¢¶ÓÁÐµÄ ´«µÝ·þÎñÄ£ÐÍ ÈçÏÂͼËùʾ£º

4. ÏûÏ¢¶ÓÁеĵĴ«Êäģʽ
4.1. µã¶ÔµãÄ£ÐÍ
µã¶ÔµãÄ£ÐÍ ÓÃÓÚ ÏûÏ¢Éú²úÕß ºÍ ÏûÏ¢Ïû·ÑÕß Ö®¼ä µãµ½µã µÄͨÐÅ¡£ÏûÏ¢Éú²úÕß½«ÏûÏ¢·¢Ë͵½ÓÉij¸öÃû×Ö±êʶµÄÌØ¶¨Ïû·ÑÕß¡£Õâ¸öÃû×Öʵ¼ÊÉ϶ÔÓÚÏû·Ñ·þÎñÖеÄÒ»¸ö
¶ÓÁУ¨Queue£©£¬ÔÚÏûÏ¢´«µÝ¸øÏû·ÑÕß֮ǰËü±» ´æ´¢ ÔÚÕâ¸ö¶ÓÁÐÖС£¶ÓÁÐÏûÏ¢ ¿ÉÒÔ·ÅÔÚ ÄÚ´æ ÖÐÒ²¿ÉÒÔ
³Ö¾Ã»¯£¬ÒÔ±£Ö¤ÔÚÏûÏ¢·þÎñ³öÏÖ¹ÊÕÏʱÈÔÈ»Äܹ»´«µÝÏûÏ¢¡£
´«Í³µÄµã¶ÔµãÏûÏ¢Öмä¼þͨ³£ÓÉ ÏûÏ¢¶ÓÁзþÎñ¡¢ÏûÏ¢´«µÝ·þÎñ¡¢ÏûÏ¢¶ÓÁÐ ºÍ ÏûÏ¢Ó¦ÓóÌÐò½Ó¿Ú API
×é³É£¬ÆäµäÐ͵ĽṹÈçÏÂͼËùʾ¡£

ÌØµã£º
ÿ¸öÏûÏ¢Ö»ÓÃÒ»¸öÏû·ÑÕߣ»
·¢ËÍÕߺͽÓÊÜÕßûÓÐʱ¼äÒÀÀµ£»
½ÓÊÜÕßÈ·ÈÏÏûÏ¢½ÓÊܺʹ¦Àí³É¹¦¡£
ʾÒâͼÈçÏÂËùʾ£º

4.2. ·¢²¼/¶©ÔÄÄ£ÐÍ£¨Pub/Sub£©
·¢²¼Õß/¶©ÔÄÕß Ä£ÐÍÖ§³ÖÏòÒ»¸öÌØ¶¨µÄ ÏûÏ¢Ö÷Ìâ Éú²úÏûÏ¢¡£0 »ò ¶à¸ö¶©ÔÄÕß ¿ÉÄܶԽÓÊÕÀ´×Ô ÌØ¶¨ÏûÏ¢Ö÷Ìâ
µÄÏûÏ¢¸ÐÐËȤ¡£
ÔÚÕâÖÖÄ£ÐÍÏ£¬·¢²¼ÕߺͶ©ÔÄÕ߱˴˲»ÖªµÀ¶Ô·½£¬¾ÍºÃ±ÈÊÇÄäÃû¹«¸æ°å¡£ÕâÖÖģʽ±»¸Å¿öΪ£º¶à¸öÏû·ÑÕß¿ÉÒÔ»ñµÃÏûÏ¢£¬ÔÚ
·¢²¼Õß ºÍ ¶©ÔÄÕß Ö®¼ä´æÔÚ Ê±¼äÒÀÀµÐÔ¡£·¢²¼ÕßÐèÒª½¨Á¢Ò»¸ö ¶©ÔÄ£¨subscription£©£¬ÒÔ±ãÄܹ»Ïû·ÑÕß¶©ÔÄ¡£¶©ÔÄÕß
±ØÐë±£³Ö ³ÖÐøµÄ»î¶¯×´Ì¬ ²¢ ½ÓÊÕÏûÏ¢¡£
ÔÚÕâÖÖÇé¿öÏ£¬ÔÚ¶©ÔÄÕß Î´Á¬½Óʱ£¬·¢²¼µÄÏûÏ¢½«ÔÚ¶©ÔÄÕß ÖØÐÂÁ¬½Ó ʱ ÖØÐ·¢²¼£¬ÈçÏÂͼËùʾ£º

ÌØÐÔ£º
ÿ¸öÏûÏ¢¿ÉÒÔÓжà¸ö¶©ÔÄÕߣ»
¿Í»§¶ËÖ»Óж©Ôĺó²ÅÄܽÓÊÕµ½ÏûÏ¢£»
³Ö¾Ã¶©Ôĺͷdz־ö©ÔÄ¡£
×¢Ò⣺
·¢²¼ÕߺͶ©ÔÄÕßÓÐʱ¼äÒÀÀµ£º½ÓÊÜÕߺͷ¢²¼ÕßÖ»Óн¨Á¢¶©ÔĹØÏµ²ÅÄÜÊÕµ½ÏûÏ¢£»
³Ö¾Ã¶©ÔÄ£º¶©ÔĹØÏµ½¨Á¢ºó£¬ÏûÏ¢¾Í²»»áÏûʧ£¬²»¹Ü¶©ÔÄÕßÊÇ·ñ¶¼ÔÚÏߣ»
·Ç³Ö¾Ã¶©ÔÄ£º¶©ÔÄÕßΪÁ˽ÓÊÜÏûÏ¢£¬±ØÐëÒ»Ö±ÔÚÏß¡£ µ±Ö»ÓÐÒ»¸ö¶©ÔÄÕßʱԼµÈÓÚµã¶Ôµãģʽ
5. ÏûÏ¢¶ÓÁÐÓ¦Óó¡¾°
µ±ÄãÐèҪʹÓà ÏûÏ¢¶ÓÁРʱ£¬Ê×ÏÈÐèÒª¿¼ÂÇËüµÄ±ØÒªÐÔ¡£¿ÉÒÔʹÓÃÏûÏ¢¶ÓÁеij¡¾°Óкܶ࣬×î³£Óõļ¸ÖÖ£¬ÊÇ×ö
Ó¦ÓóÌÐòËÉñîºÏ¡¢Òì²½´¦Àíģʽ¡¢·¢²¼Óë¶©ÔÄ¡¢×îÖÕÒ»ÖÂÐÔ¡¢´í·åÁ÷¿Ø ºÍ ÈÕÖ¾»º³å µÈ¡£·´Ö®£¬Èç¹ûÐèÒª ǿһÖÂÐÔ£¬¹Ø×¢ÒµÎñÂß¼µÄ´¦Àí½á¹û£¬ÔòʹÓÃ
RPC ÏԵøüΪºÏÊÊ¡£
5.1. Òì²½´¦Àí
·ÇºËÐÄ Á÷³Ì Òì²½»¯£¬¼õÉÙϵͳ ÏìӦʱ¼ä£¬Ìá¸ß ÍÌÍÂÁ¿¡£ÀýÈ磺¶ÌÐÅ֪ͨ¡¢ÖÕ¶Ë×´Ì¬ÍÆËÍ¡¢App ÍÆËÍ¡¢Óû§×¢²á
µÈ¡£
ÏûÏ¢¶ÓÁÐ Ò»°ã¶¼ÄÚÖÃÁË ¸ßЧµÄͨÐÅ»úÖÆ£¬Òò´ËÒ²¿ÉÒÔÓÃÓÚµ¥´¿µÄÏûϢͨѶ£¬±ÈÈçʵÏÖ µã¶ÔµãÏûÏ¢¶ÓÁÐ »òÕß
ÁÄÌìÊÒ µÈ¡£
Ó¦Óð¸Àý
ÍøÕ¾Óû§×¢²á£¬×¢²á³É¹¦ºó»á¹ýÒ»»á·¢ËÍÓʼþÈ·ÈÏ»òÕß¶ÌÏ¢¡£

5.2. ϵͳ½âñî
ϵͳ֮¼ä²»ÊÇ Ç¿ñîºÏµÄ£¬ÏûÏ¢½ÓÊÜÕß ¿ÉÒÔËæÒâÔö¼Ó£¬¶ø²»ÐèÒªÐÞ¸Ä ÏûÏ¢·¢ËÍÕߵĴúÂë¡£ÏûÏ¢·¢ËÍÕß µÄ³É¹¦²»ÒÀÀµ
ÏûÏ¢½ÓÊÜÕߣ¨±ÈÈ磺ÓÐÐ©ÒøÐнӿڲ»Îȶ¨£¬µ«µ÷Ó÷½²¢²»ÐèÒªÒÀÀµÕâЩ½Ó¿Ú£©¡£
²»Ç¿ÒÀÀµ ÓڷDZ¾ÏµÍ³µÄºËÐÄÁ÷³Ì£¬¶ÔÓÚ ·ÇºËÐÄÁ÷³Ì£¬¿ÉÒԷŵ½ÏûÏ¢¶ÓÁÐÖÐÈà ÏûÏ¢Ïû·ÑÕß È¥°´ÐèÏû·Ñ£¬¶ø
²»Ó°ÏìºËÐÄÖ÷Á÷³Ì¡£
5.3. ×îÖÕÒ»ÖÂÐÔ
×îÖÕÒ»ÖÂÐÔ ²»ÊÇ ÏûÏ¢¶ÓÁÐ µÄ±Ø±¸ÌØÐÔ£¬µ«È·Êµ¿ÉÒÔÒÀ¿¿ ÏûÏ¢¶ÓÁÐ À´×ö ×îÖÕÒ»ÖÂÐÔ µÄÊÂÇé¡£
ÏÈдÏûÏ¢ÔÙ²Ù×÷£¬È·±£²Ù×÷Íê³ÉºóÔÙÐÞ¸ÄÏûϢ״̬¡£¶¨Ê±ÈÎÎñ²¹³¥»úÖÆ ʵÏÖÏûÏ¢ ¿É¿¿·¢ËͽÓÊÕ¡¢ÒµÎñ²Ù×÷µÄ¿É¿¿Ö´ÐУ¬Òª×¢Òâ
ÏûÏ¢ÖØ¸´ Óë ÃݵÈÉè¼Æ¡£
ËùÓв»±£Ö¤ 100% ²»¶ªÏûÏ¢ µÄÏûÏ¢¶ÓÁУ¬ÀíÂÛÉÏÎÞ·¨ÊµÏÖ ×îÖÕÒ»ÖÂÐÔ¡£
Ïñ Kafka Ò»ÀàµÄÉè¼Æ£¬ÔÚÉè¼Æ²ãÃæÉϾÍÓÐ ¶ªÏûÏ¢ µÄ¿ÉÄÜ£¨±ÈÈç ¶¨Ê±Ë¢ÅÌ£¬Èç¹ûµôµç¾Í»á¶ªÏûÏ¢£©¡£ÄÄÅÂÖ»¶ªÇ§·ÖÖ®Ò»µÄÏûÏ¢£¬ÒµÎñÒ²±ØÐëÓÃÆäËûµÄÊÖ¶ÎÀ´±£Ö¤½á¹ûÕýÈ·¡£
5.4. ¹ã²¥
Éú²úÕß/Ïû·ÑÕß Ä£Ê½£¬Ö»ÐèÒª¹ØÐÄÏûÏ¢ÊÇ·ñ ËÍ´ï¶ÓÁУ¬ÖÁÓÚËÏ£Íû¶©ÔĺÍÐèÒªÏû·Ñ£¬ÊÇ ÏÂÓεÄÊÂÇ飬ÎÞÒɼ«´óµØ¼õÉÙÁË¿ª·¢ºÍÁªµ÷µÄ¹¤×÷Á¿¡£

5.5. Á÷Á¿Ï÷·åºÍÁ÷¿Ø
µ± ÉÏÏÂÓÎϵͳ ´¦ÀíÄÜÁ¦´æÔÚ²î¾àµÄʱºò£¬ÀûÓà ÏûÏ¢¶ÓÁÐ ×öÒ»¸öͨÓÃµÄ ¡°Â©¶·¡±£¬½øÐÐ ÏÞÁ÷¿ØÖÆ¡£ÔÚÏÂÓÎÓÐÄÜÁ¦´¦ÀíµÄʱºò£¬ÔÙ½øÐзַ¢¡£
¾Ù¸öÀý×Ó£ºÓû§ÔÚÖ§¸¶ÏµÍ³³É¹¦½áÕ˺󣬶©µ¥ÏµÍ³»áͨ¹ý¶ÌÐÅϵͳÏòÓû§ÍÆËͿ۷Ñ֪ͨ¡£ ¶ÌÐÅϵͳ ¿ÉÄÜÓÉÓÚ
¶Ì°åЧӦ£¬ËÙ¶È¿¨ÔÚ Íø¹Ø ÉÏ£¨Ã¿Ã뼸°Ù´ÎÇëÇ󣩣¬¸ú ǰ¶ËµÄ²¢·¢Á¿ ²»ÊÇÒ»¸öÊýÁ¿¼¶¡£ ÓÚÊÇ£¬¾ÍÔì³É Ö§¸¶ÏµÍ³
ºÍ ¶ÌÐÅϵͳ µÄ´¦ÀíÄÜÁ¦³öÏÖ²îÒ컯¡£
È»¶øÓû§ÍíÉϸö°ë·ÖÖÓ×óÓÒÊÕµ½¶ÌÐÅ£¬Ò»°ãÊDz»»áÓÐÌ«´óÎÊÌâµÄ¡£Èç¹ûûÓÐÏûÏ¢¶ÓÁУ¬Á½¸öϵͳ֮¼äͨ¹ý ÐÉÌ¡¢»¬¶¯´°¿Ú
µÈ¸´Ôӵķ½°¸Ò²²»ÊÇ˵²»ÄÜʵÏÖ¡£µ« ϵͳ¸´ÔÓÐÔ Ö¸Êý¼¶Ôö³¤£¬ÊƱØÔÚ ÉÏÓÎ »òÕß ÏÂÓÎ ×ö ´æ´¢£¬²¢ÇÒÒª´¦Àí
¶¨Ê±¡¢ÓµÈû µÈһϵÁÐÎÊÌâ¡£¶øÇÒÿµ±ÓÐ ´¦ÀíÄÜÁ¦Óвî¾à µÄʱºò£¬¶¼ÐèÒª µ¥¶À ¿ª·¢Ò»Ì×Âß¼À´Î¬»¤ÕâÌ×Âß¼¡£
ËùÒÔ£¬ÀûÓÃÖмäϵͳת´¢Á½¸öϵͳµÄͨÐÅÄÚÈÝ£¬²¢ÔÚÏÂÓÎϵͳÓÐÄÜÁ¦´¦ÀíÕâЩÏûÏ¢µÄʱºò£¬ÔÙ´¦ÀíÕâЩÏûÏ¢£¬ÊÇÒ»Ì×Ïà¶Ô½ÏͨÓõķ½Ê½¡£
Ó¦Óð¸Àý
°ÑÏûÏ¢¶ÓÁе±³É¿É¿¿µÄ ÏûÏ¢ÔÝ´æµØ£¬½øÐÐÒ»¶¨³Ì¶ÈµÄ ÏûÏ¢¶Ñ»ý£»
¶¨Ê±½øÐÐÏûϢͶµÝ£¬±ÈÈçÄ£Äâ Óû§Ãëɱ ·ÃÎÊ£¬½øÐРϵͳÐÔÄÜѹ²â¡£

5.6. ÈÕÖ¾´¦Àí
½«ÏûÏ¢¶ÓÁÐÓÃÔÚ ÈÕÖ¾´¦Àí ÖУ¬±ÈÈç Kafka µÄÓ¦Ó㬽â¾ö º£Á¿ÈÕÖ¾ ´«ÊäºÍ»º³åµÄÎÊÌâ¡£
Ó¦Óð¸Àý
°ÑÈÕÖ¾½øÐм¯ÖÐÊÕ¼¯£¬ÓÃÓÚ¼ÆËã PV¡¢Óû§ÐÐΪ·ÖÎö µÈµÈ¡£

5.7. ÏûϢͨѶ
ÏûÏ¢¶ÓÁÐÒ»°ã¶¼ÄÚÖÃÁË ¸ßЧµÄͨÐÅ»úÖÆ£¬Òò´ËÒ²¿ÉÒÔÓÃÓÚµ¥´¿µÄ ÏûϢͨѶ£¬±ÈÈçʵÏÖ µã¶ÔµãÏûÏ¢¶ÓÁÐ »òÕß
ÁÄÌìÊÒ µÈ¡£
6. ÏûÏ¢¶ÓÁеÄÍÆÀÄ£ÐÍ
6.1. PushÍÆÏûϢģÐÍ
ÏûÏ¢Éú²úÕß ½«ÏûÏ¢·¢Ë͸ø ÏûÏ¢¶ÓÁУ¬ÏûÏ¢¶ÓÁÐ ÓÖ½«ÏûÏ¢ÍÆ¸ø ÏûÏ¢Ïû·ÑÕß¡£
6.2. PullÀÏûϢģÐÍ
Ïû·ÑÕß ÇëÇó ÏûÏ¢¶ÓÁÐ ½ÓÊÜÏûÏ¢£¬ÏûÏ¢Éú²úÕß ´Ó ÏûÏ¢¶ÓÁÐ ÖÐÀ¸ÃÏûÏ¢¡£
6.3. Á½ÖÖÀàÐ͵ÄÇø±ð

7. ÏûÏ¢¶ÓÁм¼Êõ¶Ô±È
±¾²¿·ÖÖ÷Òª½éÉÜËÄÖÖ³£ÓõÄÏûÏ¢¶ÓÁУ¨ActiveMQ / RabbitMQ / RocketMQ /
Kafka£©µÄÖ÷ÒªÌØÐÔ¡¢Óŵ㡢ȱµã¡£
7.1. ActiveMQ
ActiveMQ ÊÇÓÉ Apache ³öÆ·£¬ActiveMQ ÊÇÒ»¸öÍêȫ֧³ÖJMS1.1 ºÍ J2EE
1.4 ¹æ·¶µÄ JMS Provider ʵÏÖ¡£Ëü·Ç³£¿ìËÙ£¬Ö§³Ö ¶àÖÖÓïÑԵĿͻ§¶Ë ºÍ ÐÒ飬¶øÇÒ¿ÉÒԷdz£ÈÝÒ×µÄǶÈëµ½ÆóÒµµÄÓ¦Óû·¾³ÖУ¬²¢ÓÐÐí¶à¸ß¼¶¹¦ÄÜ¡£

(a) Ö÷ÒªÌØÐÔ
·þ´ÓJMS¹æ·¶£ºJMS ¹æ·¶ÌṩÁËÁ¼ºÃµÄ±ê×¼ºÍ±£Ö¤£¬°üÀ¨£ºÍ¬²½ »ò Òì²½ µÄÏûÏ¢·Ö·¢£¬Ò»´ÎºÍ½öÒ»´ÎµÄÏûÏ¢·Ö·¢£¬ÏûÏ¢½ÓÊÕ
ºÍ ¶©ÔÄ µÈµÈ¡£×ñ´Ó JMS ¹æ·¶µÄºÃ´¦ÔÚÓÚ£¬²»ÂÛʹÓÃʲô JMS ʵÏÖÌṩÕߣ¬ÕâЩ»ù´¡ÌØÐÔ¶¼ÊÇ¿ÉÓõģ»
Á¬½ÓÁé»îÐÔ£ºActiveMQ ÌṩÁ˹㷺µÄ Á¬½ÓÐÒ飬֧³ÖµÄÐÒéÓУºHTTP/S£¬IP ¶à²¥£¬SSL£¬TCP£¬UDP
µÈµÈ¡£¶ÔÖÚ¶àÐÒéµÄÖ§³ÖÈà ActiveMQ ÓµÓÐÁ˺ܺõÄÁé»îÐÔ£»
Ö§³ÖµÄÐÒéÖÖÀà¶à£ºOpenWire¡¢STOMP¡¢REST¡¢XMPP¡¢AMQP£»
³Ö¾Ã»¯²å¼þºÍ°²È«²å¼þ£ºActiveMQ ÌṩÁË ¶àÖֳ־û¯ Ñ¡Ôñ¡£¶øÇÒ£¬ActiveMQ µÄ°²È«ÐÔÒ²¿ÉÒÔÍêÈ«ÒÀ¾ÝÓû§ÐèÇó½øÐÐ
×Ô¶¨Òå¼øÈ¨ ºÍ ÊÚȨ£»
Ö§³ÖµÄ¿Í»§¶ËÓïÑÔÖÖÀà¶à£º³ýÁË Java Ö®Í⣬»¹ÓУºC/C++£¬.NET£¬Perl£¬PHP£¬Python£¬Ruby£»
´úÀí¼¯Èº£º¶à¸ö ActiveMQ ´úÀí ¿ÉÒÔ×é³ÉÒ»¸ö ¼¯Èº À´Ìṩ·þÎñ£»
Òì³£¼òµ¥µÄ¹ÜÀí£ºActiveMQ ÊÇÒÔ¿ª·¢Õß˼ά±»Éè¼ÆµÄ¡£ËùÒÔ£¬Ëü²¢²»ÐèҪרÃŵĹÜÀíÔ±£¬ÒòΪËüÌṩÁ˼òµ¥ÓÖʹÓõĹÜÀíÌØÐÔ¡£ÓкܶàÖз½·¨¿ÉÒÔ
¼à¿Ø ActiveMQ ²»Í¬²ãÃæµÄÊý¾Ý£¬°üÀ¨Ê¹ÓÃÔÚ JConsole »òÕßÔÚ ActiveMQ µÄ
Web Console ÖÐʹÓà JMX¡£Í¨¹ý´¦Àí JMX µÄ¸æ¾¯ÏûÏ¢£¬Í¨¹ýʹÓà ÃüÁîÐнű¾£¬ÉõÖÁ¿ÉÒÔͨ¹ý¼à¿Ø¸÷ÖÖÀàÐ͵Ä
ÈÕÖ¾¡£
(b) ²¿Êð»·¾³
ActiveMQ ¿ÉÒÔÔËÐÐÔÚ Java ÓïÑÔËùÖ§³ÖµÄƽ̨֮ÉÏ¡£Ê¹Óà ActiveMQ ÐèÒª£º
Java JDK
ActiveMQ °²×°°ü
(c) Óŵã
¿çƽ̨ (JAVA ±àдÓëÆ½Ì¨Î޹أ¬ActiveMQ ¼¸ºõ¿ÉÒÔÔËÐÐÔÚÈÎºÎµÄ JVM ÉÏ)£»
¿ÉÒÔÓà JDBC£º¿ÉÒÔ½« Êý¾Ý³Ö¾Ã»¯ µ½Êý¾Ý¿â¡£ËäȻʹÓà JDBC »á½µµÍ ActiveMQ µÄÐÔÄÜ£¬µ«ÊÇÊý¾Ý¿âÒ»Ö±¶¼ÊÇ¿ª·¢ÈËÔ±×îÊìϤµÄ´æ´¢½éÖÊ£»
Ö§³Ö JMS ¹æ·¶£ºÖ§³Ö JMS ¹æ·¶ÌṩµÄ ͳһ½Ó¿Ú;
Ö§³Ö ×Ô¶¯ÖØÁ¬ ºÍ ´íÎóÖØÊÔ»úÖÆ£»
Óа²È«»úÖÆ£ºÖ§³Ö»ùÓÚ shiro£¬jaas µÈ¶àÖÖ °²È«ÅäÖûúÖÆ£¬¿ÉÒÔ¶Ô Queue/Topic ½øÐÐ
ÈÏÖ¤ºÍÊÚȨ£»
¼à¿ØÍêÉÆ£ºÓµÓÐÍêÉÆµÄ ¼à¿Ø£¬°üÀ¨ Web Console£¬JMX£¬Shell ÃüÁîÐУ¬Jolokia
µÄ RESTful API£»
½çÃæÓÑÉÆ£ºÌṩµÄ Web Console ¿ÉÒÔÂú×ã´ó²¿·ÖÇé¿ö£¬»¹ÓÐºÜ¶à µÚÈý·½µÄ×é¼þ ¿ÉÒÔʹÓ㬱ÈÈç
hawtio£»
(d) ȱµã
ÉçÇø»îÔ¾¶È²»¼° RabbitMQ ¸ß£»
¸ù¾ÝÆäËûÓû§·´À¡£¬»á³öĪÃûÆäÃîµÄÎÊÌ⣬»á ¶ªÊ§ÏûÏ¢£»
Ä¿Ç°ÖØÐķŵ½ activemq 6.0 ²úÆ· Apollo£¬¶Ô 5.x µÄά»¤½ÏÉÙ£»
²»ÊʺÏÓÃÓÚ ÉÏǧ¸ö¶ÓÁÐ µÄÓ¦Óó¡¾°£»
7.2. RabbitMQ
RabbitMQ ÓÚ 2007 Äê·¢²¼£¬ÊÇÒ»¸öÔÚ AMQP (¸ß¼¶ÏûÏ¢¶ÓÁÐÐÒé)»ù´¡ÉÏÍê³ÉµÄ£¬¿É¸´ÓÃµÄÆóÒµÏûϢϵͳ£¬Êǵ±Ç°×îÖ÷Á÷µÄÏûÏ¢Öмä¼þÖ®Ò»¡£

(a) Ö÷ÒªÌØÐÔ
¿É¿¿ÐÔ£ºÌṩÁ˶àÖÖ¼¼Êõ¿ÉÒÔÈÃÄãÔÚ ÐÔÄÜ ºÍ ¿É¿¿ÐÔ Ö®¼ä½øÐРȨºâ¡£ÕâЩ¼¼Êõ°üÀ¨ ³Ö¾ÃÐÔ»úÖÆ¡¢Í¶µÝÈ·ÈÏ¡¢·¢²¼Õß֤ʵ
ºÍ ¸ß¿ÉÓÃÐÔ»úÖÆ£»
Áé»îµÄ·ÓÉ£ºÏûÏ¢ÔÚµ½´ï¶ÓÁÐǰÊÇͨ¹ý ½»»»»ú ½øÐР·ÓÉ µÄ¡£RabbitMQ ΪµäÐ͵Ä·ÓÉÂß¼ÌṩÁË
¶àÖÖÄÚÖý»»»»ú ÀàÐÍ¡£Èç¹ûÄãÓиü¸´ÔӵķÓÉÐèÇ󣬿ÉÒÔ½«ÕâЩ½»»»»ú×éºÏÆðÀ´Ê¹Óã¬ÄãÉõÖÁ¿ÉÒÔʵÏÖ×Ô¼ºµÄ½»»»»úÀàÐÍ£¬²¢ÇÒµ±×ö
RabbitMQ µÄ ²å¼þÀ´Ê¹Óã»
ÏûÏ¢¼¯Èº£ºÔÚÏàͬ¾ÖÓòÍøÖеĶà¸ö RabbitMQ ·þÎñÆ÷¿ÉÒÔ ¾ÛºÏ ÔÚÒ»Æð£¬×÷Ϊһ¸ö¶ÀÁ¢µÄÂß¼´úÀíÀ´Ê¹Óã»
¶ÓÁи߿ÉÓ㺶ÓÁпÉÒÔÔÚ¼¯ÈºÖеĻúÆ÷ÉÏ ½øÐоµÏñ£¬ÒÔÈ·±£ÔÚÓ²¼þÎÊÌâÏ»¹±£Ö¤ ÏûÏ¢°²È«£»
Ö§³Ö¶àÖÖÐÒ飺֧³Ö ¶àÖÖÏûÏ¢¶ÓÁÐÐÒ飻
Ö§³Ö¶àÖÖÓïÑÔ£ºÓà Erlang ÓïÑÔ±àд£¬Ö§³ÖÖ»ÒªÊÇÄãÄÜÏëµ½µÄ ËùÓбà³ÌÓïÑÔ£»
¹ÜÀí½çÃæ£º RabbitMQ ÓÐÒ»¸öÒ×ÓÃµÄ Óû§½çÃæ£¬Ê¹µÃÓû§¿ÉÒÔ ¼à¿Ø ºÍ ¹ÜÀí ÏûÏ¢ Broker
µÄÐí¶à·½Ã棻
¸ú×Ù»úÖÆ£ºÈç¹û ÏûÏ¢Òì³££¬RabbitMQ ÌṩÏûÏ¢¸ú×Ù»úÖÆ£¬Ê¹ÓÃÕß¿ÉÒÔÕÒ³ö·¢ÉúÁËʲô£»
²å¼þ»úÖÆ£ºÌṩÁËÐí¶à ²å¼þ£¬À´´Ó¶à·½Ãæ½øÐÐÀ©Õ¹£¬Ò²¿ÉÒÔ±àд×Ô¼ºµÄ²å¼þ¡£
(b) ²¿Êð»·¾³
RabbitMQ ¿ÉÒÔÔËÐÐÔÚ Erlang ÓïÑÔËùÖ§³ÖµÄƽ̨֮ÉÏ£¬°üÀ¨ Solaris£¬BSD£¬Linux£¬MacOSX£¬TRU64£¬Windows
µÈ¡£Ê¹Óà RabbitMQ ÐèÒª£º
ErLang 
RabbitMQ °²×°°ü
(c) Óŵã
ÓÉÓÚ Erlang ÓïÑÔµÄÌØÐÔ£¬ÏûÏ¢¶ÓÁÐÐÔÄܽϺã¬Ö§³Ö ¸ß²¢·¢£»
½¡×³¡¢Îȶ¨¡¢Ò×Óᢿçƽ̨¡¢Ö§³Ö ¶àÖÖÓïÑÔ¡¢ÎĵµÆëÈ«£»
ÓÐÏûÏ¢ È·ÈÏ»úÖÆ ºÍ ³Ö¾Ã»¯»úÖÆ£¬¿É¿¿ÐԸߣ»
¸ß¶È¿É¶¨ÖÆµÄ Â·ÓÉ£»
¹ÜÀí½çÃæ ½Ï·á¸»£¬ÔÚ»¥ÁªÍø¹«Ë¾Ò²Óнϴó¹æÄ£µÄÓ¦Óã¬ÉçÇø»îÔ¾¶È¸ß¡£
(d) ȱµã
¾¡¹Ü½áºÏ Erlang ÓïÑÔ±¾ÉíµÄ²¢·¢ÓÅÊÆ£¬ÐÔÄܽϺ㬵«ÊDz»ÀûÓÚ×ö ¶þ´Î¿ª·¢ºÍά»¤£»
ʵÏÖÁË ´úÀí¼Ü¹¹£¬Òâζ×ÅÏûÏ¢ÔÚ·¢Ë͵½¿Í»§¶Ë֮ǰ¿ÉÒÔÔÚ ÖÐÑë½Úµã ÉÏÅŶӡ£´ËÌØÐÔʹµÃ RabbitMQ
Ò×ÓÚʹÓúͲ¿Ê𣬵«ÊÇʹµÃÆä ÔËÐÐËٶȽÏÂý£¬ÒòΪÖÐÑë½Úµã Ôö¼ÓÁËÑÓ³Ù£¬ÏûÏ¢·â×°ºó Ò²±È½Ï´ó£»
ÐèҪѧϰ ±È½Ï¸´ÔÓ µÄ ½Ó¿ÚºÍÐÒ飬ѧϰºÍά»¤³É±¾½Ï¸ß¡£
7.3. RocketMQ
RocketMQ ³ö×Ô °¢Àï µÄ¿ªÔ´²úÆ·£¬Óà Java ÓïÑÔʵÏÖ£¬ÔÚÉè¼ÆÊ±²Î¿¼ÁË Kafka£¬²¢×ö³öÁË×Ô¼ºµÄһЩ¸Ä½ø£¬ÏûÏ¢¿É¿¿ÐÔÉÏ
±È Kafka ¸üºÃ¡£RocketMQ ÔÚ°¢ÀïÄÚ²¿±»¹ã·ºÓ¦ÓÃÔÚ ¶©µ¥£¬½»Ò×£¬³äÖµ£¬Á÷¼ÆË㣬ÏûÏ¢ÍÆËÍ£¬ÈÕÖ¾Á÷ʽ´¦Àí£¬binglog
·Ö·¢ µÈ³¡¾°¡£
(a) Ö÷ÒªÌØÐÔ

»ùÓÚ ¶ÓÁÐÄ£ÐÍ£º¾ßÓÐ ¸ßÐÔÄÜ¡¢¸ß¿É¿¿¡¢¸ßʵʱ¡¢·Ö²¼Ê½ µÈÌØµã£»
Producer¡¢Consumer¡¢¶ÓÁÐ ¶¼Ö§³Ö ·Ö²¼Ê½£»
Producer ÏòһЩ¶ÓÁÐÂÖÁ÷·¢ËÍÏûÏ¢£¬¶ÓÁм¯ºÏ ³ÆÎª Topic¡£Consumer Èç¹û×ö ¹ã²¥Ïû·Ñ£¬ÔòÒ»¸ö
Consumer ʵÀýÏû·ÑÕâ¸ö Topic ¶ÔÓ¦µÄ ËùÓжÓÁУ»Èç¹û×ö ¼¯ÈºÏû·Ñ£¬Ôò ¶à¸ö Consumer
ʵÀý ƽ¾ùÏû·Ñ Õâ¸ö Topic ¶ÔÓ¦µÄ¶ÓÁм¯ºÏ£»
Äܹ»±£Ö¤ ÑϸñµÄÏûϢ˳Ðò£»
Ìṩ·á¸»µÄ ÏûÏ¢Àȡģʽ£»
¸ßЧµÄ¶©ÔÄÕß Ë®Æ½À©Õ¹ÄÜÁ¦£»
ʵʱ µÄ ÏûÏ¢¶©ÔÄ»úÖÆ£»
ÒÚ¼¶ ÏûÏ¢¶Ñ»ý ÄÜÁ¦£»
½ÏÉÙµÄÍⲿÒÀÀµ¡£
(b) ²¿Êð»·¾³
RocketMQ ¿ÉÒÔÔËÐÐÔÚ Java ÓïÑÔËùÖ§³ÖµÄƽ̨֮ÉÏ¡£Ê¹Óà RocketMQ ÐèÒª£º
Java JDK
°²×° git¡¢Maven
RocketMQ °²×°°ü
(c) Óŵã
µ¥»ú Ö§³Ö 1 ÍòÒÔÉÏ ³Ö¾Ã»¯¶ÓÁУ»
RocketMQ µÄËùÓÐÏûÏ¢¶¼ÊÇ ³Ö¾Ã»¯µÄ£¬ÏÈдÈëϵͳ PAGECACHE£¬È»ºó Ë¢ÅÌ£¬¿ÉÒÔ±£Ö¤ ÄÚ´æ
Óë ´ÅÅÌ ¶¼ÓÐÒ»·ÝÊý¾Ý£¬¶ø ·ÃÎÊ Ê±£¬Ö±½Ó ´ÓÄÚ´æ¶ÁÈ¡¡£
Ä£Ðͼòµ¥£¬½Ó¿ÚÒ×Óã¨JMS µÄ½Ó¿ÚºÜ¶à³¡ºÏ²¢²»Ì«ÊµÓã©£»
ÐÔÄܷdz£ºÃ£¬¿ÉÒÔÔÊÐí ´óÁ¿¶Ñ»ýÏûÏ¢ ÔÚ Broker ÖУ»
Ö§³Ö ¶àÖÖÏû·Ñģʽ£¬°üÀ¨ ¼¯ÈºÏû·Ñ¡¢¹ã²¥Ïû·ÑµÈ£»
¸÷¸ö»·½Ú ·Ö²¼Ê½À©Õ¹Éè¼Æ£¬Ö§³Ö Ö÷´Ó ºÍ ¸ß¿ÉÓã»
¿ª·¢¶È½Ï»îÔ¾£¬°æ±¾¸üкܿ졣
(d) ȱµã
Ö§³ÖµÄ ¿Í»§¶ËÓïÑÔ ²»¶à£¬Ä¿Ç°ÊÇ Java ¼° C++£¬ÆäÖÐ C++ »¹²»³ÉÊ죻
RocketMQ ÉçÇø¹Ø×¢¶È¼°³ÉÊì¶ÈÒ²²»¼°Ç°Á½Õߣ»
ûÓÐ Web ¹ÜÀí½çÃæ£¬ÌṩÁËÒ»¸ö CLI (ÃüÁîÐнçÃæ) ¹ÜÀí¹¤¾ß´øÀ´ ²éѯ¡¢¹ÜÀí ºÍ Õï¶Ï¸÷ÖÖÎÊÌ⣻
ûÓÐÔÚ MQ ºËÐÄÀïʵÏÖ JMS µÈ½Ó¿Ú£»
7.4. Kafka
Apache Kafka ÊÇÒ»¸ö ·Ö²¼Ê½ÏûÏ¢·¢²¼¶©ÔÄ ÏµÍ³¡£Ëü×î³õÓÉ LinkedIn ¹«Ë¾»ùÓÚ¶ÀÌØµÄÉè¼ÆÊµÏÖΪһ¸ö
·Ö²¼Ê½µÄÈÕÖ¾Ìύϵͳ (a distributed commit log)£¬Ö®ºó³ÉΪ Apache
ÏîÄ¿µÄÒ»²¿·Ö¡£Kafka ÐÔÄܸßЧ¡¢¿ÉÀ©Õ¹Á¼ºÃ ²¢ÇÒ ¿É³Ö¾Ã»¯¡£ËüµÄ ·ÖÇøÌØÐÔ£¬¿É¸´ÖÆ ºÍ ¿ÉÈÝ´í
¶¼ÊÇÆä²»´íµÄÌØÐÔ¡£

(a) Ö÷ÒªÌØÐÔ
¿ìËٳ־û¯£º¿ÉÒÔÔÚ O(1) µÄϵͳ¿ªÏúϽøÐÐ ÏûÏ¢³Ö¾Ã»¯£»
¸ßÍÌÍ£ºÔÚһ̨ÆÕͨµÄ·þÎñÆ÷ÉϼȿÉÒÔ´ïµ½ 10W/s µÄ ÍÌÍÂËÙÂÊ£»
ÍêÈ«µÄ·Ö²¼Ê½ÏµÍ³£ºBroker¡¢Producer ºÍ Consumer ¶¼ÔÉú×Ô¶¯Ö§³Ö ·Ö²¼Ê½£¬×Ô¶¯ÊµÏÖ
¸ºÔؾùºâ£»
Ö§³Ö ͬ²½ ºÍ Òì²½ ¸´ÖÆÁ½ÖÖ ¸ß¿ÉÓûúÖÆ£»
Ö§³Ö Êý¾ÝÅúÁ¿·¢ËÍ ºÍ ÀÈ¡£»
Á㿽±´¼¼Êõ(zero-copy)£º¼õÉÙ IO ²Ù×÷²½Ö裬Ìá¸ß ϵͳÍÌÍÂÁ¿£»
Êý¾ÝÇ¨ÒÆ¡¢À©ÈÝ ¶ÔÓû§Í¸Ã÷£»
ÎÞÐèÍ£»ú ¼´¿ÉÀ©Õ¹»úÆ÷£»
ÆäËûÌØÐÔ£º·á¸»µÄ ÏûÏ¢ÀȡģÐÍ¡¢¸ßЧ ¶©ÔÄÕßˮƽÀ©Õ¹¡¢ÊµÊ±µÄ ÏûÏ¢¶©ÔÄ¡¢ÒÚ¼¶µÄ ÏûÏ¢¶Ñ»ýÄÜÁ¦¡¢¶¨ÆÚɾ³ý»úÖÆ£»
(b) ²¿Êð»·¾³
ʹÓà Kafka ÐèÒª£º
Java JDK
Kafka °²×°°ü
(c) Óŵã
¿Í»§¶ËÓïÑԷḻ£ºÖ§³Ö Java¡¢.Net¡¢PHP¡¢Ruby¡¢Python¡¢Go µÈ¶àÖÖÓïÑÔ£»
¸ßÐÔÄÜ£ºµ¥»úдÈë TPS Ô¼ÔÚ 100 ÍòÌõ/Ã룬ÏûÏ¢´óС 10 ¸ö×Ö½Ú£»
Ìṩ ÍêÈ«·Ö²¼Ê½¼Ü¹¹£¬²¢ÓÐ replica »úÖÆ£¬ÓµÓÐ½Ï¸ßµÄ ¿ÉÓÃÐÔ ºÍ ¿É¿¿ÐÔ£¬ÀíÂÛÉÏÖ§³Ö ÏûÏ¢ÎÞÏÞ¶Ñ»ý£»
Ö§³ÖÅúÁ¿²Ù×÷£»
Ïû·ÑÕß ²ÉÓà Pull ·½Ê½»ñÈ¡ÏûÏ¢¡£ÏûÏ¢ÓÐÐò£¬Í¨¹ý¿ØÖÆ Äܹ»±£Ö¤ËùÓÐÏûÏ¢±»Ïû·ÑÇÒ½ö±»Ïû·Ñ Ò»´Î£»
ÓÐÓÅÐãµÄµÚÈý·½ Kafka Web ¹ÜÀí½çÃæ Kafka-Manager£»
ÔÚ ÈÕÖ¾ÁìÓò ±È½Ï³ÉÊ죬±»¶à¼Ò¹«Ë¾ºÍ¶à¸ö¿ªÔ´ÏîĿʹÓá£
(d) ȱµã
Kafka µ¥»ú³¬¹ý 64 ¸ö ¶ÓÁÐ/·ÖÇø ʱ£¬Load ʱ»á·¢ÉúÃ÷ÏÔµÄì¸ßÏÖÏó¡£¶ÓÁÐ Ô½¶à£¬¸ºÔØ
Ô½¸ß£¬·¢ËÍÏûÏ¢ ÏìӦʱ¼ä±ä³¤£»
ʹÓà ¶ÌÂÖѯ·½Ê½£¬ÊµÊ±ÐÔ È¡¾öÓÚ ÂÖѯ¼ä¸ôʱ¼ä£»
Ïû·Ñʧ°Ü ²»Ö§³ÖÖØÊÔ£»
Ö§³Ö ÏûϢ˳Ðò£¬µ«ÊÇ Ò»Ì¨´úÀíå´»ú ºó£¬¾Í»á²úÉú ÏûÏ¢ÂÒÐò£»
ÉçÇø¸üнÏÂý¡£
7.5. ¼¸ÖÖÏûÏ¢¶ÓÁжԱÈ
ÕâÀïÁоÙÁËÉÏÊöËÄÖÖÏûÏ¢¶ÓÁеIJîÒì¶Ô±È£º

Kafka ÔÚÓÚ ·Ö²¼Ê½¼Ü¹¹£¬RabbitMQ »ùÓÚ AMQP ÐÒé À´ÊµÏÖ£¬RocketMQ µÄ˼·À´Ô´ÓÚ
Kafka£¬¸Ä³ÉÁË Ö÷´Ó½á¹¹£¬ÔÚ ÊÂÎñÐÔ ºÍ ¿É¿¿ÐÔ ·½Ãæ×öÁËÓÅ»¯¡£¹ã·ºÀ´Ëµ£¬µçÉÌ¡¢½ðÈÚ µÈ¶Ô ÊÂÎñÒ»ÖÂÐÔ
ÒªÇóºÜ¸ßµÄ£¬¿ÉÒÔ¿¼ÂÇ RabbitMQ ºÍ RocketMQ£¬¶Ô ÐÔÄÜÒªÇó¸ß µÄ¿É¿¼ÂÇ Kafka¡£
С½á
±¾ÎĽéÉÜÁËÏûÏ¢¶ÓÁеÄÌØµã£¬ÏûÏ¢¶ÓÁÐµÄ ´«µÝ·þÎñÄ£ÐÍ£¬ÏûÏ¢µÄ ´«Ê䷽ʽ£¬ÏûÏ¢µÄ
ÍÆÀģʽ¡£È»ºó½éÉÜÁË ActiveMQ£¬RabbitMQ£¬RocketMQ ºÍ Kafka ¼¸ÖÖ³£¼ûµÄÏûÏ¢¶ÓÁУ¬²ûÊöÁË
¸÷ÖÖÏûÏ¢¶ÓÁÐ µÄ Ö÷ÒªÌØµã ºÍ ÓÅȱµã¡£
|