±à¼ÍƼö: |
±¾ÎĽéÉÜRocketMQµÄ¼ò½éÓëÑݽø£¬RocketMQµÄ¼Ü¹¹Éè¼Æ£¬RocketMQµÄ¹Ø¼üÌØÐÔ£¬RocketMQµÄÓ¦Óó¡¾°Ï£Íû¶ÔÄúÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚsegmentfault£¬ÓÉ»ðÁú¹ûÈí¼þDelores±à¼¡¢ÍƼö¡£ |
|
RocketMQµÄ¼ò½é
RocketMQÒ»¸ö´¿java¡¢·Ö²¼Ê½¡¢¶ÓÁÐÄ£Ð͵ĿªÔ´ÏûÏ¢Öмä¼þ£¬Ç°ÉíÊÇMetaQ£¬Êǰ¢ÀïÑз¢µÄÒ»¸ö¶ÓÁÐÄ£Ð͵ÄÏûÏ¢Öмä¼þ£¬ºó¿ªÔ´¸øapache»ù½ð»á³ÉΪÁËapacheµÄ¶¥¼¶¿ªÔ´ÏîÄ¿£¬¾ßÓиßÐÔÄÜ¡¢¸ß¿É¿¿¡¢¸ßʵʱ¡¢·Ö²¼Ê½Ìص㡣

RocketMQµÄÑݽø
RocketMQÒ»¹²Ç°ºó¾ÀúÁËÈý´úÑݽø£º
1.µÚÒ»´ú£¬ÍÆÄ£Ê½
Êý¾Ý´æ´¢²ÉÓùØÏµÐÍÊý¾Ý¿â£¬µäÐÍ´ú±í°üÀ¨Notify¡¢Napoli¡£
2.µÚ¶þ´ú£¬Àģʽ
×ÔÑеÄרÓÐÏûÏ¢´æ´¢£¬ÔÚÈÕÖ¾´¦Àí·½Ãæ²Î¿¼Kafka£¬µäÐÍ´ú±íMetaQ¡£
3.µÚÈý´ú£¬ÒÔÀģʽΪÖ÷£¬¼æÓÐÍÆÄ£Ê½
µÍÑÓ³ÙÏûÏ¢ÒýÇæRocketMQ£¬ÔÚ¶þ´ú¹¦ÄÜÌØÐԵĻù´¡ÉÏ£¬ÎªµçÉ̽ðÈÚÁìÓòÌí¼ÓÁ˿ɿ¿ÖØÊÔ¡¢»ùÓÚÎļþ´æ´¢µÄ·Ö²¼Ê½ÊÂÎñµÈÌØÐÔ¡£Ê¹ÓÃÔÚÁ˰¢Àï´óÁ¿µÄÓ¦ÓÃÉÏ£¬µäÐÍÈçË«11³¡¾°£¬¾ßÓÐÍòÒÚ¼¶ÏûÏ¢Á÷ת¡£
RocketMQµÄ¼Ü¹¹Éè¼Æ
1.RocketMQµÄºËÐÄ×é¼þ

RocketMQÖ÷ÒªÓÉNameServer¡¢Broker¡¢ProducerÒÔ¼°ConsumerËIJ¿·Ö¹¹³É¡£

1£©NameServer£ºÖ÷Òª¸ºÔð¶ÔÓÚÔ´Êý¾ÝµÄ¹ÜÀí£¬°üÀ¨Á˶ÔÓÚTopicºÍ·ÓÉÐÅÏ¢µÄ¹ÜÀí¡£
NameServerÊÇÒ»¸ö¹¦ÄÜÆëÈ«µÄ·þÎñÆ÷£¬Æä½ÇÉ«ÀàËÆDubboÖеÄZookeeper£¬µ«NameServerÓëZookeeperÏà±È¸üÇáÁ¿¡£Ö÷ÒªÊÇÒòΪÿ¸öNameServer½Úµã»¥ÏàÖ®¼äÊǶÀÁ¢µÄ£¬Ã»ÓÐÈκÎÐÅÏ¢½»»¥¡£
2£© Producer
ÏûÏ¢Éú²úÕߣ¬¸ºÔð²úÉúÏûÏ¢£¬Ò»°ãÓÉÒµÎñϵͳ¸ºÔð²úÉúÏûÏ¢¡£
ProducerÓÉÓû§½øÐзֲ¼Ê½²¿Êð£¬ÏûÏ¢ÓÉProducerͨ¹ý¶àÖÖ¸ºÔؾùºâģʽ·¢Ë͵½Broker¼¯Èº£¬·¢Ë͵ÍÑÓʱ£¬Ö§³Ö¿ìËÙʧ°Ü¡£
3 £©Broker
ÏûÏ¢ÖÐת½ÇÉ«£¬¸ºÔð´æ´¢ÏûÏ¢£¬×ª·¢ÏûÏ¢¡£
BrokerÊǾßÌåÌṩҵÎñµÄ·þÎñÆ÷£¬µ¥¸öBroker½ÚµãÓëËùÓеÄNameServer½Úµã±£³Ö³¤Á¬½Ó¼°ÐÄÌø£¬²¢»á¶¨Ê±½«TopicÐÅÏ¢×¢²áµ½NameServer£¬Ë³´øÒ»Ìáµ×²ãµÄͨÐźÍÁ¬½Ó¶¼ÊÇ»ùÓÚNettyʵÏֵġ£
Broker¸ºÔðÏûÏ¢´æ´¢£¬ÒÔTopicΪγ¶ÈÖ§³ÖÇáÁ¿¼¶µÄ¶ÓÁУ¬µ¥»ú¿ÉÒÔÖ§³ÅÉÏÍò¶ÓÁйæÄ££¬Ö§³ÖÏûÏ¢ÍÆÀÄ£ÐÍ¡£
¹ÙÍøÉÏÓÐÊý¾ÝÏÔʾ£º¾ßÓÐÉÏÒÚ¼¶ÏûÏ¢¶Ñ»ýÄÜÁ¦£¬Í¬Ê±¿ÉÑϸñ±£Ö¤ÏûÏ¢µÄÓÐÐòÐÔ¡£
4£©Consumer
ÏûÏ¢Ïû·ÑÕߣ¬¸ºÔðÏû·ÑÏûÏ¢£¬Ò»°ãÊǺǫ́ϵͳ¸ºÔðÒì²½Ïû·Ñ¡£
ConsumerÒ²ÓÉÓû§²¿Êð£¬Ö§³ÖPUSHºÍPULLÁ½ÖÖÏû·Ñģʽ£¬Ö§³Ö¼¯ÈºÏû·ÑºÍ¹ã²¥ÏûÏ¢£¬ÌṩʵʱµÄÏûÏ¢¶©ÔÄ»úÖÆ¡£
5£©´óÖÂÁ÷³Ì
BrokerÔÚÆô¶¯µÄʱºò»áÈ¥ÏòNameServer×¢²á²¢ÇÒ¶¨Ê±·¢ËÍÐÄÌø£¬ProducerÔÚÆô¶¯µÄʱºò»áµ½NameServerÉÏÈ¥ÀÈ¡TopicËùÊôµÄBroker¾ßÌ嵨ַ£¬È»ºóÏò¾ßÌåµÄBroker·¢ËÍÏûÏ¢¡£¾ßÌåÈçÏÂͼ£º

2.RocketMQµÄÏûÏ¢ÁìÓòÄ£ÐÍ
Ö÷Òª·ÖΪMessage¡¢Topic¡¢Queue¡¢OffsetÒÔ¼°GroupÕ⼸²¿·Ö¡£

1£©Topic
Topic±íʾÏûÏ¢µÄµÚÒ»¼¶ÀàÐÍ£¬±ÈÈçÒ»¸öµçÉÌϵͳµÄÏûÏ¢¿ÉÒÔ·ÖΪ£º½»Ò×ÏûÏ¢¡¢ÎïÁ÷ÏûÏ¢µÈ¡£Ò»ÌõÏûÏ¢±ØÐëÓÐÒ»¸öTopic¡£
×îϸÁ£¶ÈµÄ¶©Ôĵ¥Î»£¬Ò»¸öGroup¿ÉÒÔ¶©ÔĶà¸öTopicµÄÏûÏ¢¡£
2£©Tag
Tag±íʾÏûÏ¢µÄµÚ¶þ¼¶ÀàÐÍ£¬±ÈÈç½»Ò×ÏûÏ¢ÓÖ¿ÉÒÔ·ÖΪ£º½»Ò×´´½¨ÏûÏ¢£¬½»Ò×Íê³ÉÏûÏ¢µÈ¡£RocketMQÌṩ2¼¶ÏûÏ¢·ÖÀ࣬·½±ãÁé»î¿ØÖÆ¡£
3)Group
×飬һ¸ö×é¿ÉÒÔ¶©ÔĶà¸öTopic¡£
4£©Message Queue
ÏûÏ¢µÄÎïÀí¹ÜÀíµ¥Î»¡£Ò»¸öTopicÏ¿ÉÒÔÓжà¸öQueue£¬QueueµÄÒýÈëʹµÃÏûÏ¢µÄ´æ´¢¿ÉÒÔ·Ö²¼Ê½¼¯Èº»¯£¬¾ßÓÐÁËˮƽÀ©Õ¹ÄÜÁ¦¡£
ÔÚ
RocketMQ ÖУ¬ËùÓÐÏûÏ¢¶ÓÁж¼Êdz־û¯£¬³¤¶ÈÎÞÏÞµÄÊý¾Ý½á¹¹£¬Ëùν³¤¶ÈÎÞÏÞÊÇÖ¸¶ÓÁÐÖеÄÿ¸ö´æ´¢µ¥Ôª¶¼ÊǶ¨³¤£¬·ÃÎÊÆäÖеĴ洢µ¥ÔªÊ¹ÓÃ
Offset À´·ÃÎÊ£¬offset Ϊ java long ÀàÐÍ£¬64 룬ÀíÂÛÉÏÔÚ 100ÄêÄÚ²»»áÒç³ö£¬ËùÒÔÈÏΪÊdz¤¶ÈÎÞÏÞ¡£
Ò²¿ÉÒÔÈÏΪ Message Queue ÊÇÒ»¸ö³¤¶ÈÎÞÏÞµÄÊý×飬Offset ¾ÍÊÇϱꡣ
RocketMQµÄ¹Ø¼üÌØÐÔ
1.ÏûÏ¢µÄ˳Ðò
ÏûÏ¢µÄ˳ÐòÖ¸µÄÊÇÏûÏ¢Ïû·Ñʱ£¬Äܰ´ÕÕ·¢Ë͵Ä˳ÐòÀ´Ïû·Ñ¡£ÀýÈ磺һ¸ö¶©µ¥²úÉúÁË 3 ÌõÏûÏ¢£¬·Ö±ðÊǶ©µ¥´´½¨¡¢¶©µ¥¸¶¿î¡¢¶©µ¥Íê³É¡£Ïû·Ñʱ£¬Òª°´ÕÕÕâ¸ö˳ÐòÏû·Ñ²ÅÓÐÒâÒå¡£µ«Í¬Ê±¶©µ¥Ö®¼äÓÖÊÇ¿ÉÒÔ²¢ÐÐÏû·ÑµÄ¡£
RocketMQÊÇͨ¹ý½«¡°ÏàͬIDµÄÏûÏ¢·¢Ë͵½Í¬Ò»¸ö¶ÓÁУ¬¶øÒ»¸ö¶ÓÁеÄÏûÏ¢Ö»ÓÉÒ»¸öÏû·ÑÕß´¦Àí¡°À´ÊµÏÖ˳ÐòÏûÏ¢¡£ÈçÏÂͼ£º

ÕâÑù¶ÔÓÚͬһ¸ö¶©µ¥µÄ´´½¨¡¢¸¶¿îºÍÍê³ÉÏûÏ¢£¬È·±£°´ÕÕÕâһ˳Ðò±»·¢ËͺÍÏû·Ñ¡£
2.ÏûÏ¢ÖØ¸´
1£©ÏûÏ¢ÖØ¸´µÄÔÒò
ÏûÏ¢ÁìÓòÓÐÒ»¸ö¶ÔÏûϢͶµÝµÄQoS¶¨Ò壬·ÖΪ£º
×î¶àÒ»´Î£¨At most once£©
ÖÁÉÙÒ»´Î£¨At least once£©
½öÒ»´Î£¨ Exactly once£©
file
¼¸ºõËùÓеÄMQ²úÆ·¶¼Éù³Æ×Ô¼º×öµ½ÁËAt
least
once¡£¼ÈÈ»ÊÇÖÁÉÙÒ»´Î£¬ÄDZÜÃâ²»ÁËÏûÏ¢ÖØ¸´£¬ÓÈÆäÊÇÔÚ·Ö²¼Ê½ÍøÂç»·¾³Ï¡£±ÈÈç£ºÍøÂçÔÒòÉÁ¶Ï£¬ACK·µ»ØÊ§°ÜµÈµÈ¹ÊÕÏ£¬È·ÈÏÐÅϢûÓд«Ë͵½ÏûÏ¢¶ÓÁУ¬µ¼ÖÂÏûÏ¢¶ÓÁв»ÖªµÀ×Ô¼ºÒѾÏû·Ñ¹ý¸ÃÏûÏ¢ÁË£¬Ôٴν«¸ÃÏûÏ¢·Ö·¢¸øÆäËûµÄÏû·ÑÕß¡£
²»Í¬µÄÏûÏ¢¶ÓÁз¢Ë͵ÄÈ·ÈÏÐÅÏ¢ÐÎʽ²»Í¬,ÀýÈçRabbitMQÊÇ·¢ËÍÒ»¸öACKÈ·ÈÏÏûÏ¢£¬RocketMQÊÇ·µ»ØÒ»¸öCONSUME_SUCCESS³É¹¦±êÖ¾£¬kafkaʵ¼ÊÉÏÓиöoffsetµÄ¸ÅÄî¡£
RocketMQûÓÐÄÚÖÃÏûÏ¢È¥ÖØµÄ½â¾ö·½°¸£¬×îа汾ÊÇ·ñÖ§³Ö»¹ÐèÈ·ÈÏ¡£
2£©ÏûÏ¢È¥ÖØ
È¥ÖØÔÔò£ºÊ¹ÓÃÒµÎñ¶ËÂß¼±£³ÖÃݵÈÐÔ
ÃݵÈÐÔ£º¾ÍÊÇÓû§¶ÔÓÚͬһ²Ù×÷·¢ÆðµÄÒ»´ÎÇëÇó»òÕß¶à´ÎÇëÇóµÄ½á¹ûÊÇÒ»Öµģ¬²»»áÒòΪ¶à´Îµã»÷¶ø²úÉúÁ˸±×÷Óã¬Êý¾Ý¿âµÄ½á¹û¶¼ÊÇΨһµÄ£¬²»¿É±äµÄ¡£
Ö»Òª±£³ÖÃݵÈÐÔ£¬²»¹ÜÀ´¶àÉÙÌõÖØ¸´ÏûÏ¢£¬×îºó´¦ÀíµÄ½á¹û¶¼Ò»Ñù£¬ÐèÒªÒµÎñ¶ËÀ´ÊµÏÖ¡£
È¥ÖØ²ßÂÔ£º±£Ö¤Ã¿ÌõÏûÏ¢¶¼ÓÐΨһ±àºÅ(±ÈÈçΨһÁ÷Ë®ºÅ)£¬ÇÒ±£Ö¤ÏûÏ¢´¦Àí³É¹¦ÓëÈ¥ÖØ±íµÄÈÕ־ͬʱ³öÏÖ¡£
½¨Á¢Ò»¸öÏûÏ¢±í£¬Äõ½Õâ¸öÏûÏ¢×öÊý¾Ý¿âµÄinsert²Ù×÷¡£¸øÕâ¸öÏûÏ¢×öÒ»¸öΨһÖ÷¼ü£¨primary key£©»òÕßÎ¨Ò»Ô¼Êø£¬ÄÇô¾ÍËã³öÏÖÖØ¸´Ïû·ÑµÄÇé¿ö£¬¾Í»áµ¼ÖÂÖ÷¼ü³åÍ»£¬ÄÇô¾Í²»ÔÙ´¦ÀíÕâÌõÏûÏ¢¡£

RocketMQµÄÓ¦Óó¡¾°
1.Ï÷·åÌî¹È
±ÈÈçÈçÃëɱµÈ´óÐͻʱ»á´øÀ´½Ï¸ßµÄÁ÷Á¿Âö³å£¬Èç¹ûû×öÏàÓ¦µÄ±£»¤£¬½«µ¼ÖÂϵͳ³¬¸ººÉÉõÖÁ±ÀÀ£¡£Èç¹ûÒòÏÞÖÆÌ«¹ýµ¼ÖÂÇëÇó´óÁ¿Ê§°Ü¶øÓ°ÏìÓû§ÌåÑ飬¿ÉÒÔÀûÓÃMQ ³¬¸ßÐÔÄܵÄÏûÏ¢´¦ÀíÄÜÁ¦À´½â¾ö¡£
2.Òì²½½âñî
ͨ¹ýÉÏ¡¢ÏÂÓÎÒµÎñϵͳµÄËÉñîºÏÉè¼Æ£¬±ÈÈ磺½»Ò×ϵͳµÄÏÂÓÎ×Óϵͳ£¨Èç»ý·ÖµÈ£©³öÏÖ²»¿ÉÓÃÉõÖÁå´»ú£¬¶¼²»»áÓ°Ïìµ½ºËÐĽ»Ò×ϵͳµÄÕý³£ÔËת¡£
3.˳ÐòÏûÏ¢
ÓëFIFOÔÀíÀàËÆ£¬MQÌṩµÄ˳ÐòÏûÏ¢¼´±£Ö¤ÏûÏ¢µÄÏȽøÏȳö£¬¿ÉÒÔÓ¦ÓÃÓÚ½»Ò×ϵͳÖеĶ©µ¥´´½¨¡¢Ö§¸¶¡¢ÍË¿îµÈÁ÷³Ì¡£
4.·Ö²¼Ê½ÊÂÎñÏûÏ¢
±ÈÈç°¢ÀïµÄ½»Ò×ϵͳ¡¢Ö§¸¶ºì°üµÈ³¡¾°ÐèҪȷ±£Êý¾ÝµÄ×îÖÕÒ»ÖÂÐÔ£¬ÐèÒªÒýÈë MQ µÄ·Ö²¼Ê½ÊÂÎñ£¬¼ÈʵÏÖÁËϵͳ֮¼äµÄ½âñÓÖ¿ÉÒÔ±£Ö¤×îÖÕµÄÊý¾ÝÒ»ÖÂÐÔ¡£
½«´óÊÂÎñ²ð·Ö³ÉСÊÂÎñ£¬¼õÉÙϵͳ¼äµÄ½»»¥£¬¼È¸ßЧÓÖ¿É¿¿¡£ÔÙÀûÓÃMQ µÄ¿É¿¿´«ÊäÓë¶à¸±±¾¼¼ÊõÈ·±£ÏûÏ¢²»¶ª£¬At-Least-Once ÌØÐÔÀ´×îÖÕÈ·±£Êý¾ÝµÄ×îÖÕÒ»ÖÂÐÔ¡£
|