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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
΢·þÎñÒì²½¼Ü¹¹---MQÖ®RocketMQ
 
×÷Õߣº Java¼«¿Í¼¼Êõ
  1893  次浏览      29
 2020-3-16
 
±à¼­ÍƼö:
±¾ÎĽ²ÊöÍêÕûµÄÆóÒµ¼Ü¹¹£¬Zachman Ä£ÐÍ£¬TOGAF ÏêϸµÄ¼Ü¹¹¹¤¼þÄ£ÐÍ£¬DODAF£¨ÃÀ¹ú¹ú·À²¿Ìåϵ¼Ü¹¹¿ò¼Ü£©£¬Ï£Íû¶ÔÄúÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þDelores±à¼­¡¢ÍƼö¡£

¡°ÎÒÃÇ´ó¼Ò¶¼ÖªµÀ°ÑÒ»¸ö΢·þÎñ¼Ü¹¹±ä³ÉÒ»¸öÒì²½¼Ü¹¹Ö»ÐèÒª¼ÓÒ»¸öMQ£¬ÏÖÔÚÊÐÃæÉÏÓкܶàMQµÄ¿ªÔ´¿ò¼Ü¡£µ½µ×Ñ¡ÔñÄÄÒ»¸öMQµÄ¿ªÔ´¿ò¼Ü²ÅºÏÊÊÄØ ¡±

Ò»¡¢Ê²Ã´ÊÇMQ£¿MQµÄÔ­ÀíÊÇʲô£¿

MQ¾ÍÊÇÏûÏ¢¶ÓÁУ¬ÊÇMessage QueueµÄËõд¡£ÏûÏ¢¶ÓÁÐÊÇÒ»ÖÖͨÐÅ·½Ê½¡£ÏûÏ¢µÄ±¾ÖʾÍÊÇÒ»ÖÖÊý¾Ý½á¹¹¡£ÒòΪMQ°ÑÏîÄ¿ÖеÄÏûÏ¢¼¯ÖÐʽµÄ´¦ÀíºÍ´æ´¢£¬ËùÒÔMQÖ÷ÒªÓнâñ²¢·¢£¬ºÍÏ÷·åµÄ¹¦ÄÜ¡£

1£¬½âñ

MQµÄÏûÏ¢Éú²úÕߺÍÏû·ÑÕß»¥Ï಻¹ØÐĶԷ½ÊÇ·ñ´æÔÚ£¬Í¨¹ýMQÕâ¸öÖмä¼þµÄ´æÔÚ£¬Ê¹Õû¸öϵͳ´ïµ½½âñîµÄ×÷Óá£

Èç¹û·þÎñÖ®¼äÓÃRPCͨÐÅ£¬µ±Ò»¸ö·þÎñ¸ú¼¸°Ù¸ö·þÎñͨÐÅʱ£¬Èç¹ûÄǸö·þÎñµÄͨÐŽӿڸı䣬ÄÇô¼¸°Ù¸ö·þÎñµÄͨÐŽӿڶ¼µÄ¸ú×ű䶯£¬ÕâÊǷdz£Í·ÌÛµÄÒ»¼þÊ¡£

µ«ÊDzÉÓÃMQÖ®ºó£¬²»¹ÜÊÇÉú²úÕß»òÕßÏû·ÑÕß¶¼¿ÉÒÔµ¥¶À¸Ä±ä×Ô¼º¡£ËûÃǵĸı䲻»áÓ°Ïìµ½±ðµÄ·þÎñ¡£´Ó¶ø´ïµ½½âñîµÄÄ¿µÄ¡£ÎªÊ²Ã´Òª½âñîÄØ£¿Ëµ°×Á˾ÍÊÇ·½±ã£¬¼õÉÙ²»±ØÒªµÄ¹¤×÷Á¿¡£

2£¬²¢·¢

MQÓÐÉú²úÕß¼¯ÈººÍÏû·ÑÕß¼¯Èº£¬ËùÒÔ¿Í»§¶ËÊÇÒÚ¼¶Óû§Ê±£¬ËûÃǶ¼ÊDz¢Ðеġ£´Ó¶ø´ó´óÌáÉýÏìÓ¦ËÙ¶È¡£

3£¬Ï÷·å

ÒòΪMQÄÜ´æ´¢µÄÏûÏ¢Á¿ºÜ´ó£¬ËùÒÔËû¿ÉÒÔ°Ñ´óÁ¿µÄÏûÏ¢ÇëÇóÏÈ´æÏÂÁË£¬È»ºóÔÙ²¢·¢µÄ·½Ê½ÂýÂý´¦Àí¡£

Èç¹û²ÉÓÃRPCͨÐÅ£¬Ã¿Ò»´ÎÇëÇóÓõ÷ÓÃRPC½Ó¿Ú£¬µ±ÇëÇóÁ¿¾Þ´óµÄʱºò£¬ÒòΪRPCµÄÇëÇóÊǺܺÄ×ÊÔ´µÄ£¬ËùÒÔ¾Þ´óµÄÇëÇóÒ»¶¨»áѹ¿å·þÎñÆ÷¡£

Ï÷·åµÄÄ¿µÄÊÇÓû§ÌåÑé±äºÃ£¬²¢ÇÒʹÕû¸öϵͳÎȶ¨¡£ÄܳÐÊÜ´óÁ¿ÇëÇóÏûÏ¢¡£

¶þ¡¢ÏÖÔÚÊÐÃæÉÏÓÐʲôMQ

ÖØµã½éÉÜRocketMQ

ÏÖÔÚÊÐÃæÉϵÄMQÓкܶ࣬Ö÷ÒªÓÐRabbitMQ£¬ActiveMQ£¬ZeroMQ£¬RocketMQ£¬KafkaµÈµÈ£¬ÕâЩ¶¼ÊÇ¿ªÔ´µÄMQ²úÆ·¡£ÒÔǰºÜ¶àÈËÍÆ¼öʹÓÃRabbitMQ£¬ËûÒ²ÊǷdz£ºÃÓõÄMQ²úÆ·£¬ÕâÀï²»×ö¹ý¶àµÄ½éÉÜ¡£KafkaÒ²ÊǸßÍÌÍÂÁ¿µÄÀÏ´ó£¬ÎÒÃÇÕâÀïÒ²²»½éÉÜ¡£

ÎÒÃÇÖØµã½éÉÜÒ»ÏÂRocketMQ£¬RocketMQÊǰ¢Àï°Í°ÍÔÚ2012Ä꿪ԴµÄ·Ö²¼Ê½ÏûÏ¢Öмä¼þ£¬Ä¿Ç°ÒѾ­¾èÔù¸øApacheÈí¼þ»ù½ð»á£¬²¢ÓÚ²¢ÓÚ2017Äê9ÔÂ25ÈÕ³ÉΪ Apache µÄ¶¥¼¶ÏîÄ¿¡£

×÷Ϊ¾­Àú¹ý¶à´Î°¢Àï°Í°Í˫ʮһÕâÖÖ¡°³¬¼¶¹¤³Ì¡±µÄÏ´Àñ²¢ÓÐÎȶ¨³öÉ«±íÏֵĹú²úÖмä¼þ£¬ÒÔÆä¸ßÐÔÄÜ¡¢µÍÑÓʱºÍ¸ß¿É¿¿µÈÌØÐÔ½üÄêÀ´ÒѾ­Ò²±»Ô½À´Ô½¶àµÄ¹úÄÚÆóҵʹÓá£

¹¦ÄܸÅÀÀͼ

¿ÉÒÔ¿´¼ûRocketMQÖ§³Ö¶¨Ê±ºÍÑÓʱÏûÏ¢£¬ÕâÊÇRabbitMQËùûÓеÄÄÜÁ¦¡£

RocketMQµÄÎïÀí½á¹¹

´ÓÕâÀï¿ÉÒÔ¿´³ö£¬RocketMQÉæ¼°µ½ËÄ´ó¼¯Èº£¬producer£¬Name Server£¬Consumer£¬Broker¡£

Producer¼¯Èº£º

ÊÇÉú²úÕß¼¯Èº£¬¸ºÔð²úÉúÏûÏ¢£¬ÏòÏû·ÑÕß·¢ËÍÓÉÒµÎñÓ¦ÓóÌÐòϵͳÉú³ÉµÄÏûÏ¢£¬RocketMQÌṩÈýÖÖ·½Ê½·¢ËÍÏûÏ¢£ºÍ¬²½£¬Òì²½£¬µ¥Ïò¡£

Ò»£¬ÆÕͨÏûÏ¢

1£¬Í¬²½Ô­Àíͼ

ͬ²½ÏûÏ¢¹Ø¼ü´úÂë

try { SendResult sendResult =
producer.send(msg); // ͬ²½·¢ËÍÏûÏ¢£¬
Ö»Òª²»Å×Òì³£¾ÍÊdzɹ¦ if
(sendResult != null) { System.out.println
(new Date() + " Send mq message success.
Topic is:" + msg.getTopic() + " msgId is: " + sendResult.getMessageId()); }
catch (Exception e) { System.out.println
(new Date() + " Send mq message failed.
Topic is:" + msg.getTopic());
e.printStackTrace(); }}

2£¬Òì²½Ô­Àíͼ

Òì²½ÏûÏ¢¹Ø¼ü´úÂë

producer.sendAsync(msg, new SendCallback()
{ @Overridepublic void onSuccess
(final SendResult sendResult)
{ // Ïû·Ñ·¢Ëͳɹ¦ System.out.println
("send message success. topic=" +
sendResult.getTopic() + ", msgId="
+ sendResult.getMessageId()); }
@Overridepublic void onException
(OnExceptionContext context)
{ System.out.println("send message failed.
topic=" + context.getTopic() + ",
msgId=" + context.getMessageId()); }});

3£¬µ¥Ïò£¨Oneway£©·¢ËÍÔ­Àíͼ

µ¥ÏòÖ»·¢ËÍ£¬²»µÈ´ý·µ»Ø£¬ËùÒÔËÙ¶È×î¿ì£¬Ò»°ãÔÚ΢Ãë¼¶£¬µ«¿ÉÄܶªÊ§

µ¥Ïò£¨Oneway£©·¢ËÍÏûÏ¢¹Ø¼ü´úÂë

producer.sendOneway(msg);

¶þ£¬¶¨Ê±ÏûÏ¢ºÍÑÓʱÏûÏ¢

·¢ËͶ¨Ê±ÏûÏ¢¹Ø¼ü´úÂë

try { // ¶¨Ê±ÏûÏ¢£¬µ¥Î»ºÁÃ루ms£©£¬
ÔÚÖ¸¶¨Ê±¼ä´Á£¨µ±Ç°Ê±¼äÖ®ºó£©½øÐÐͶµÝ£¬
ÀýÈç 2016-03-07 16:21:00 ͶµÝ¡£
Èç¹û±»ÉèÖóɵ±Ç°Ê±¼ä´Á֮ǰµÄij¸öʱ¿Ì£¬
ÏûÏ¢½«Á¢¿ÌͶµÝ¸øÏû·ÑÕß¡£ long timeStamp
= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.parse("2016-03-07 16:21:00").getTime(); msg.setStartDeliverTime(timeStamp);
// ·¢ËÍÏûÏ¢£¬Ö»Òª²»Å×Òì³£¾ÍÊdzɹ¦
SendResult sendResult = producer.send(msg);
System.out.println
("MessageId:"+sendResult.getMessageId());
}catch (Exception e) { // ÏûÏ¢·¢ËÍʧ°Ü£¬
ÐèÒª½øÐÐÖØÊÔ´¦Àí£¬¿ÉÖØÐ·¢ËÍÕâÌõÏûÏ¢
»ò³Ö¾Ã»¯ÕâÌõÊý¾Ý½øÐв¹³¥´¦Àí
System.out.println(new Date()
+ " Send mq message failed.
Topic is:" + msg.getTopic());
e.printStackTrace(); }

·¢ËÍÑÓʱÏûÏ¢¹Ø¼ü´úÂë

try { // ÑÓʱÏûÏ¢£¬µ¥Î»ºÁÃ루ms£©£¬
ÔÚÖ¸¶¨ÑÓ³Ùʱ¼ä£¨µ±Ç°Ê±¼äÖ®ºó£©½øÐÐͶµÝ£¬
ÀýÈçÏûÏ¢ÔÚ 3 ÃëºóͶµÝ long delayTime
= System.currentTimeMillis() + 3000;
// ÉèÖÃÏûÏ¢ÐèÒª±»Í¶µÝµÄʱ¼ä
msg.setStartDeliverTime(delayTime);
SendResult sendResult = producer.send(msg);
// ͬ²½·¢ËÍÏûÏ¢£¬Ö»Òª²»Å×Òì³£¾ÍÊdzɹ¦
if (sendResult != null)
{ System.out.println(new Date()
+ " Send mq message success.
Topic is:" + msg.getTopic() + " msgId is: " + sendResult.getMessageId()); } }
catch (Exception e) { // ÏûÏ¢·¢ËÍʧ°Ü£¬
ÐèÒª½øÐÐÖØÊÔ´¦Àí£¬¿ÉÖØÐ·¢ËÍÕâÌõÏûÏ¢
»ò³Ö¾Ã»¯ÕâÌõÊý¾Ý½øÐв¹³¥´¦Àí
System.out.println(new Date()
+ " Send mq message failed.
Topic is:" + msg.getTopic());
e.printStackTrace(); }

×¢ÒâÊÂÏî

1£¬¶¨Ê±ºÍÑÓʱÏûÏ¢µÄ msg.setStartDeliverTime ²ÎÊýÐèÒªÉèÖóɵ±Ç°Ê±¼ä´ÁÖ®ºóµÄij¸öʱ¿Ì£¨µ¥Î»ºÁÃ룩¡£Èç¹û±»ÉèÖóɵ±Ç°Ê±¼ä´Á֮ǰµÄij¸öʱ¿Ì£¬ÏûÏ¢½«Á¢¿ÌͶµÝ¸øÏû·ÑÕß¡£

2£¬¶¨Ê±ºÍÑÓʱÏûÏ¢µÄ msg.setStartDeliverTime ²ÎÊý¿ÉÉèÖÃ40ÌìÄÚµÄÈκÎʱ¿Ì£¨µ¥Î»ºÁÃ룩£¬³¬¹ý40ÌìÏûÏ¢·¢Ëͽ«Ê§°Ü¡£

3£¬StartDeliverTime ÊÇ·þÎñ¶Ë¿ªÊ¼ÏòÏû·Ñ¶ËͶµÝµÄʱ¼ä¡£ Èç¹ûÏû·ÑÕßµ±Ç°ÓÐÏûÏ¢¶Ñ»ý£¬ÄÇô¶¨Ê±ºÍÑÓʱÏûÏ¢»áÅÅÔÚ¶Ñ»ýÏûÏ¢ºóÃæ£¬½«²»ÄÜÑϸñ°´ÕÕÅäÖõÄʱ¼ä½øÐÐͶµÝ¡£

4£¬ÓÉÓÚ¿Í»§¶ËºÍ·þÎñ¶Ë¿ÉÄÜ´æÔÚʱ¼ä²î£¬ÏûÏ¢µÄʵ¼ÊͶµÝʱ¼äÓë¿Í»§¶ËÉèÖõÄͶµÝʱ¼äÖ®¼ä¿ÉÄÜ´æÔÚÆ«²î¡£

5£¬ÉèÖö¨Ê±ºÍÑÓʱÏûÏ¢µÄͶµÝʱ¼äºó£¬ÒÀÈ»ÊÜ 3 ÌìµÄÏûÏ¢±£´æÊ±³¤ÏÞÖÆ¡£ÀýÈ磬ÉèÖö¨Ê±ÏûÏ¢ 5 Ììºó²ÅÄܱ»Ïû·Ñ£¬Èç¹ûµÚ 5 Ììºóһֱû±»Ïû·Ñ£¬ÄÇôÕâÌõÏûÏ¢½«ÔÚµÚ8Ì챻ɾ³ý¡£

6£¬³ý Java ÓïÑÔÖ§³ÖÑÓʱÏûÏ¢Í⣬ÆäËûÓïÑÔ¶¼²»Ö§³ÖÑÓʱÏûÏ¢¡£

·¢²¼ÏûÏ¢Ô­Àíͼ

Èý£¬ÊÂÎñÏûÏ¢

RocketMQÌṩÀàËÆX/Open XAµÄ·Ö²¼Ê½ÊÂÎñ¹¦ÄÜÀ´È·±£ÒµÎñ·¢ËÍ·½ºÍMQÏûÏ¢µÄ×îÖÕÒ»ÖÂÐÔ£¬Æä±¾ÖÊÊÇͨ¹ý°ëÏûÏ¢µÄ·½Ê½°Ñ·Ö²¼Ê½ÊÂÎñ·ÅÔÚMQ¶ËÀ´´¦Àí¡£

Ô­Àíͼ

ÆäÖУº

1£¬·¢ËÍ·½ÏòÏûÏ¢¶ÓÁÐ RocketMQ ·þÎñ¶Ë·¢ËÍÏûÏ¢¡£

2£¬·þÎñ¶Ë½«ÏûÏ¢³Ö¾Ã»¯³É¹¦Ö®ºó£¬Ïò·¢ËÍ·½ ACK È·ÈÏÏûÏ¢ÒѾ­·¢Ëͳɹ¦£¬´ËʱÏûϢΪ°ëÏûÏ¢¡£

3£¬·¢ËÍ·½¿ªÊ¼Ö´Ðб¾µØÊÂÎñÂß¼­¡£

4£¬·¢ËÍ·½¸ù¾Ý±¾µØÊÂÎñÖ´Ðнá¹ûÏò·þÎñ¶ËÌá½»¶þ´ÎÈ·ÈÏ£¨Commit »òÊÇ Rollback£©£¬·þÎñ¶ËÊÕµ½ Commit ״̬Ôò½«°ëÏûÏ¢±ê¼ÇΪ¿ÉͶµÝ£¬¶©ÔÄ·½×îÖÕ½«ÊÕµ½¸ÃÏûÏ¢£»·þÎñ¶ËÊÕµ½ Rollback ״̬Ôòɾ³ý°ëÏûÏ¢£¬¶©ÔÄ·½½«²»»á½ÓÊܸÃÏûÏ¢¡£

5£¬ÔÚ¶ÏÍø»òÕßÊÇÓ¦ÓÃÖØÆôµÄÌØÊâÇé¿öÏ£¬ÉÏÊö²½Öè 4 Ìá½»µÄ¶þ´ÎÈ·ÈÏ×îÖÕδµ½´ï·þÎñ¶Ë£¬¾­¹ý¹Ì¶¨Ê±¼äºó·þÎñ¶Ë½«¶Ô¸ÃÏûÏ¢·¢ÆðÏûÏ¢»Ø²é¡£

6£¬·¢ËÍ·½ÊÕµ½ÏûÏ¢»Ø²éºó£¬ÐèÒª¼ì²é¶ÔÓ¦ÏûÏ¢µÄ±¾µØÊÂÎñÖ´ÐеÄ×îÖÕ½á¹û¡£

7£¬·¢ËÍ·½¸ù¾Ý¼ì²éµÃµ½µÄ±¾µØÊÂÎñµÄ×îÖÕ״̬ÔÙ´ÎÌá½»¶þ´ÎÈ·ÈÏ£¬·þÎñ¶ËÈÔ°´ÕÕ²½Öè 4 ¶Ô°ëÏûÏ¢½øÐвÙ×÷¡£

RocketMQµÄ°ëÏûÏ¢»úÖÆµÄ×¢ÒâÊÂÏîÊÇ

1£¬¸ù¾ÝµÚÁù²½¿ÉÒÔ¿´³öËûÒªÇó·¢ËÍ·½ÌṩҵÎñ»Ø²é½Ó¿Ú¡£

2£¬²»Äܱ£Ö¤·¢ËÍ·½µÄÏûÏ¢Ãݵȣ¬ÔÚackûÓзµ»ØµÄÇé¿öÏ£¬¿ÉÄÜ´æÔÚÖØ¸´ÏûÏ¢

3£¬Ïû·Ñ·½Òª×öÃݵȴ¦Àí¡£

ºËÐÄ´úÂë

final BusinessService businessService = new BusinessService(); // ±¾µØÒµÎñ

TransactionProducer producer
= ONSFactory.createTransactionProducer
(properties,new LocalTransactionCheckerImpl());
producer.start(); Message msg = new Message
("Topic", "TagA", "Hello MQ transaction===".
getBytes()); try { SendResult sendResult
= producer.send(msg, new LocalTransactionExecuter()
{ @Override public TransactionStatus execute
(Message msg, Object arg) { // ÏûÏ¢ ID
£¨ÓпÉÄÜÏûÏ¢ÌåÒ»Ñù£¬µ«ÏûÏ¢ ID ²»Ò»Ñù£¬
µ±Ç°ÏûÏ¢ ID ÔÚ¿ØÖÆÌ¨ÎÞ·¨²éѯ£©
String msgId = msg.getMsgID();
// ÏûÏ¢ÌåÄÚÈݽøÐÐ crc32£¬Ò²¿ÉÒÔʹÓÃÆäËüµÄÈç
MD5 long crc32Id = HashUtil.crc32Code
(msg.getBody()); // ÏûÏ¢ ID ºÍ crc32id
Ö÷ÒªÊÇÓÃÀ´·ÀÖ¹ÏûÏ¢ÖØ¸´ // Èç¹ûÒµÎñ±¾ÉíÊÇÃݵȵģ¬
¿ÉÒÔºöÂÔ£¬·ñÔòÐèÒªÀûÓà msgId »ò crc32Id À´×öÃݵÈ
// Èç¹ûÒªÇóÏûÏ¢¾ø¶Ô²»Öظ´£¬ÍƼö×ö·¨ÊÇ
¶ÔÏûÏ¢Ìå body ʹÓà crc32 »ò MD5 À´·ÀÖ¹ÖØ¸´ÏûÏ¢
Object businessServiceArgs = new Object();
TransactionStatus transactionStatus
=TransactionStatus.Unknow;
try { boolean isCommit =
businessService.execbusinessService
(businessServiceArgs); if (isCommit)
{ // ±¾µØÊÂÎñ³É¹¦ÔòÌá½»ÏûÏ¢ transactionStatus = TransactionStatus.CommitTransaction; }
else { // ±¾µØÊÂÎñʧ°ÜÔò»Ø¹öÏûÏ¢
transactionStatus = TransactionStatus.
RollbackTransaction; } } catch (Exception e)
{log.error("Message Id:{}", msgId, e); } System.out.println(msg.getMsgID());
log.warn("Message Id:{}transactionStatus:{}", msgId, transactionStatus.name());
return transactionStatus; } }, null); }
catch (Exception e) { // ÏûÏ¢·¢ËÍʧ°Ü£¬
ÐèÒª½øÐÐÖØÊÔ´¦Àí£¬¿ÉÖØÐ·¢ËÍÕâÌõÏûÏ¢»ò
³Ö¾Ã»¯ÕâÌõÊý¾Ý½øÐв¹³¥´¦Àí System.out.println
(new Date() + " Send mq message failed.
Topic is:" + msg.getTopic());
e.printStackTrace(); }

ËùÓÐÏûÏ¢·¢²¼Ô­Àíͼ

producerÍêÈ«ÎÞ״̬£¬¿ÉÒÔ¼¯Èº²¿Êð¡£

Name Server¼¯Èº£º

NameServerÊÇÒ»¸ö¼¸ºõÎÞ״̬µÄ½Úµã£¬¿É¼¯Èº²¿Ê𣬽ڵãÖ®¼äÎÞÈκÎÐÅϢͬ²½£¬NameServerºÜÏñ×¢²áÖÐÐĵŦÄÜ¡£

Ìý˵°¢Àï֮ǰµÄNameServer ÊÇÓÃZooKeeper×öµÄ£¬¿ÉÄÜÒòΪZookeeper²»ÄÜÂú×ã´ó¹æÄ£²¢·¢µÄÒªÇó£¬ËùÒÔÖ®ºóNameServer Êǰ¢Àï×ÔÑеġ£

NameServerÆäʵ¾ÍÊÇÒ»¸ö·ÓÉ±í£¬Ëû¹ÜÀíProducerºÍComsumerÖ®¼äµÄ·¢ÏÖºÍ×¢²á¡£

Broker¼¯Èº£º

Broker²¿ÊðÏà¶Ô¸´ÔÓ£¬Broker·ÖΪMasterÓëSlave£¬Ò»¸öMaster¿ÉÒÔ¶ÔÓ¦¶à¸öSlaver£¬µ«ÊÇÒ»¸öSlaverÖ»ÄܶÔÓ¦Ò»¸öMaster£¬MasterÓëSlaverµÄ¶ÔÓ¦¹ØÏµÍ¨¹ýÖ¸¶¨ÏàͬµÄBrokerName¡£

²»Í¬µÄBrokerIdÀ´¶¨Ò壬BrokerIdΪ0±íʾMaster£¬·Ç0±íʾSlaver¡£Master¿ÉÒÔ²¿Êð¶à¸ö¡£Ã¿¸öBrokerÓëNameServer¼¯ÈºÖеÄËùÓнڵ㽨Á¢³¤Á¬½Ó£¬¶¨Ê±×¢²áTopicÐÅÏ¢µ½ËùÓеÄNameServer¡£

Consumer¼¯Èº£º

¶©ÔÄ·½Ê½

ÏûÏ¢¶ÓÁÐ RocketMQ Ö§³ÖÒÔÏÂÁ½ÖÖ¶©ÔÄ·½Ê½£º

¼¯Èº¶©ÔÄ£ºÍ¬Ò»¸ö Group ID Ëù±êʶµÄËùÓÐ Consumer ƽ¾ù·Ö̯Ïû·ÑÏûÏ¢¡£ ÀýÈçij¸ö Topic ÓÐ 9 ÌõÏûÏ¢£¬Ò»¸ö Group ID ÓÐ 3 ¸ö Consumer ʵÀý£¬ÄÇôÔÚ¼¯ÈºÏû·ÑģʽÏÂÿ¸öʵÀýƽ¾ù·Ö̯£¬Ö»Ïû·ÑÆäÖÐµÄ 3 ÌõÏûÏ¢¡£

// ¼¯Èº¶©ÔÄ·½Ê½ÉèÖ㨲»ÉèÖõÄÇé¿öÏ£¬
ĬÈÏΪ¼¯Èº¶©ÔÄ·½Ê½£©properties.put
(PropertyKeyConst.MessageModel,
PropertyValueConst.CLUSTERING);

¹ã²¥¶©ÔÄ£ºÍ¬Ò»¸ö Group ID Ëù±êʶµÄËùÓÐ Consumer ¶¼»á¸÷×ÔÏû·ÑijÌõÏûÏ¢Ò»´Î¡£ ÀýÈçij¸ö Topic ÓÐ 9 ÌõÏûÏ¢£¬Ò»¸ö Group ID ÓÐ 3 ¸ö Consumer ʵÀý£¬ÄÇôÔڹ㲥Ïû·ÑģʽÏÂÿ¸öʵÀý¶¼»á¸÷×ÔÏû·Ñ 9 ÌõÏûÏ¢¡£

// ¹ã²¥¶©ÔÄ·½Ê½ÉèÖÃproperties.put
(PropertyKeyConst.MessageModel,
PropertyValueConst.BR
OADCASTING);

¶©ÔÄÏûÏ¢¹Ø¼ü´úÂ룺

Consumer consumer = ONSFactory.create
Consumer(properties); consumer.subscribe
("TopicTestMQ", "TagA||TagB", **new**
MessageListener() { //¶©ÔĶà¸ö
Tag public Action consume(Message message,
ConsumeContext context) { System.out.println
("Receive: " + message); return Action.
CommitMessage;}}); //¶©ÔÄÁíÍâÒ»¸ö Topic
consumer.subscribe("TopicTestMQ-Other",
"*", **new** MessageListener()
{ //¶©ÔÄÈ«²¿ Tag public Action consume
(Message message, ConsumeContext context)
{ System.out.println("Receive: " + message);
return Action.CommitMessage;}}); consumer.start();

×¢ÒâÊÂÏ

Ïû·Ñ¶ËÒª×öÃݵȴ¦Àí£¬ËùÓÐMQ»ù±¾É϶¼²»»á×öÃݵȴ¦Àí£¬ÐèÒªÒµÎñ¶Ë´¦Àí£¬Ô­ÒòÊÇÈç¹ûÔÚMQ¶Ë×öÃݵȴ¦Àí»á´øÀ´MQµÄ¸´ÔÓ¶È£¬¶øÇÒÑÏÖØÓ°ÏìMQµÄÐÔÄÜ¡£

ÏûÏ¢ÊÕ·¢Ä£ÐÍ

Ö÷×ÓÕ˺Ŵ´½¨

´´½¨Ö÷×ÓÕ˺ŵÄÔ­ÒòÊÇȨÏÞÎÊÌâ¡£ÏÂÃæÊÇÖ÷Õ˺Ŵ´½¨Á÷³Ìͼ

×ÓÕ˺ÅÁ÷³Ìͼ

Èý¡¢MQÊÇ΢·þÎñ¼Ü¹¹

·Ç³£ÖØÒªµÄ²¿·Ö

MQµÄµ®Éú°ÑÔ­À´µÄͬ²½¼Ü¹¹Ë¼Î¬×ª±äµ½Òì²½¼Ü¹¹Ë¼Î¬ÌṩһÖÖ·½·¨£¬Îª´ó¹æÄ££¬¸ß²¢·¢µÄÒµÎñ³¡¾°µÄÎȶ¨ÐÔʵÏÖÌṩÁ˺ܺõĽâ¾ö˼·¡£

Martin FowlerÇ¿µ÷£º·Ö²¼Ê½µ÷ÓõĵÚÒ»Ô­Ôò¾ÍÊDz»Òª·Ö²¼Ê½¡£Õâ¾ä»°¿´ËÆÆÄ¾ßÕÜÀí£¬È»¶ø¾ÍÆóÒµÓ¦ÓÃϵͳ¶øÑÔ£¬Ö»ÒªÕû¸öϵͳÔÚ²»Í£µØÑÝ»¯£¬²¢Óжà¸ö×Óϵͳ¹²Í¬´æÔÚʱ£¬ÕâÌõÔ­Ôò¾Í»á±»ÆÈ´òÆÆ¡£

Martin FowlerÌá³öµÄÕâÌõÔ­Ôò£¬Ò»·½ÃæÊÇÏ£ÍûÉè¼ÆÕßÄܹ»ÉóÉ÷µØ¶Ô´ý·Ö²¼Ê½µ÷Óã¬ÁíÒ»·½ÃæÈ´Ò²ÊÇ·Ö²¼Ê½ÏµÍ³×ÔÉí´æÔÚµÄȱÏÝËùÖ¡£

ËùÒÔ΢·þÎñ²¢²»ÊÇÍòÄÜÒ©£¬Êʺϵļܹ¹²ÅÊÇ×îºÃµÄ¼Ü¹¹¡£

 
   
1893 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù