±³¾°
ÏûÏ¢¶ÓÁУ¬ÔÚÒµÎñ½âñî¡¢Ï÷·åÌî¹È¡¢Á÷Á¿¿ØÖÆ¡¢¹ã²¥ÏûÏ¢µÈ³¡¾°Ï¶¼ÓкܺõÄÓ¦Óã¬ÒѾ³ÉΪºÜ¶àÆóÒµITϵͳÄÚ²¿Í¨ÐÅÖØÒªÊֶΡ£
ÏÖÓг£ÓõĿªÔ´ÏûÏ¢Öмä¼þÓÐRabbitMQ¡¢Kafka¡¢RocketMQµÈ£¬µ«¸÷×ÔÓÐ×Ų»Í¬µÄÓ¦Óó¡¾°ºÍÌØµã£¬ÀýÈ磬Kafka×¢ÖØµÄÊÇÏûÏ¢µÄÍÌÍÂÁ¿£¬²»±£Ö¤ÏûÏ¢´æ´¢µÄ¿É¿¿ÐÔÒÔ¼°Ò»ÖÂÐÔ£¬Òò´Ë¶àÓÃÓÚÈÕ־ϵͳÊý¾ÝµÄÉϱ¨;RabbitMQÄܱ£Ö¤ÏûÏ¢¿É¿¿´æ´¢Í¶µÝ£¬µ«ÐÔÄܽϲ
CMQ(Cloud Message Queue)ÊÇÌÚÑ¶ÔÆ¿ª·¢µÄÒ»¿î¸ß¿É¿¿¡¢¸ß¿ÉÓᢸßÐÔÄܵķֲ¼Ê½ÏûÏ¢¶ÓÁзþÎñ£¬¾ßÓеÍñîºÏ¡¢ÏûÏ¢¿É¿¿¡¢Ç¿Ò»ÖÂÐÔ¡¢¿ÉÀ©Õ¹ÐÔµÈÌØµã£¬Ö§³ÖPush/PullÏû·ÑÄ£ÐÍ¡¢ÏûÏ¢»ØËÝ¡¢ÑÓʱÏûÏ¢¡¢·¢²¼¶©ÔÄ¡¢Â·Óɹ㲥¡¢ÏûÏ¢¼ÓÃܵÈһϵÁй¦ÄÜ£¬ÒÔÂú×ã¸ü¶àµÄmqÓ¦Óó¡¾°¡£
Ïà¶ÔKafka£¬CMQ¸ü¶à×¢ÖØÏûÏ¢¸ß¿É¿¿µÄÓ¦Óó¡¾°£¬ÀýÈç½ðÈÚ¡¢½»Òס¢¶©µ¥µÈÒµÎñ;Ïà±ÈRabbitMQ£¬CMQÔÚ¿ÉÓÃÐÔºÍÐÔÄÜÉÏ×öÁ˺ܴóµÄÓÅ»¯ºÍÌáÉý¡£¸üÏêϸµÄ¶Ô±È£¬Çë²Î¿¼¹ÙÍø½éÉÜ¡£
±¾ÎÄÏȼòµ¥½éÉÜCMQµ×²ãµÄ¼Ü¹¹ÊµÏÖ£¬È»ºó×ÅÖØ½áºÏCMQµÄ¹¦ÄÜÌØµãÀ´½éÉÜCMQµÄʵ¼ù°¸Àý£¬Èôó¼Ò¿ìËÙÀí½âºÍÉÏÊÖCMQµÄ¿ª·¢¡£
µ×²ã¼Ü¹¹

CMQÕûÌå¼Ü¹¹ÈçÉÏͼËùʾ£¬Ã¿¸ösetÓÉÈý¸öbroker½Úµã¸±±¾×é³É£¬±£Ö¤ÏûÏ¢µÄ¿É¿¿´æ´¢ÒÔ¼°¸ß¿ÉÓÃÐÔ£¬ÇÒ»ùÓÚraftËã·¨±£Ö¤Êý¾ÝµÄÒ»ÖÂÐÔ¡£CMQµ¥¸öset
ÔÚCAPÀíÂÛÖÐÓÅÏȱ£Ö¤ÁËCP£¬µ±SETÖйý°ëÊý½Úµã¶¼Õý³£¹¤×÷ʱ£¬²ÅÄܽøÐÐÏûÏ¢µÄÉú²úÏû·Ñ¡£
ʵ¼ù°¸Àý
Ò»¡¢¹ã²¥ÀÈ¡ÏûϢģÐÍ
CMQÖ§³Ö¶ÓÁÐ(queue)ºÍÖ÷Ìâ(topic)Á½ÖÖÄ£ÐÍ£¬ÈçÏÂËùʾ£º

ÆäÖУ¬queueÄ£ÐÍÊÇÒ»¶ÔÒ»µÄÏûÏ¢ÀÈ¡(pull)ģʽ£¬client¶ËÖ÷¶¯pullÏûÏ¢;¶øtopicÄ£ÐÍ£¬Ò²³Æ·¢²¼/¶©ÔÄÄ£ÐÍ£¬ÊÇÒ»¶Ô¶àµÄÏûÏ¢ÍÆËÍ(push)ģʽ£¬CMQ·þÎñ¶Ë¹ã²¥ÏûϢʱ£¬¸ù¾Ý¸÷¸ö¶©ÔĵØÖ·Ö÷¶¯ÍÆËÍÏûÏ¢¸øclient¡£Á½ÖÖÄ£ÐÍ»ù±¾ÄÜÂú×ã´ó²¿·ÖÓ¦Óó¡¾°ÁË£¬¶Ô±ÈÈçÏ£º
queueÄ£ÐÍ£¬client¶Ë¿ÉÒÔÁé»î¸ù¾Ý×ÔÉíÄÜÁ¦È¥Ïû·ÑpullÏûÏ¢£¬ÏûϢʵʱÐÔÒÀÀµclientµÄÏû·ÑËÙ¶È£¬Èç¹ûÏû·ÑËٶȱÈÉú²úËÙ¶ÈÂý£¬»áÒýÆð´óÁ¿ÏûÏ¢¶Ñ»ý¡£
topicÄ£ÐÍ£¬·þÎñ¶ËÖ÷¶¯ÍÆËÍÏûÏ¢£¬ÏûϢʵʱÐԱȽϸߣ¬µ«ÒªÇóclientÐÔÄÜÉÏÄܼ°Ê±´¦Àí´óÁ¿ÍÆË͹ýÀ´µÄÏûÏ¢£¬²¢ÇÒÔÚclient·¢Éú¹ÊÕϵÄʱºò¿ÉÄܻᵼÖ¶ªÏûÏ¢(ÓÐÏûÏ¢ÖØ·¢²ßÂÔ×ö»ù±¾±£ÕÏ)¡£
¶ÔÓÚtopicÄ£ÐÍ£¬ÓÐÒÔÏÂÌØÊⳡ¾°ÐèÇó£º
client¶ËÏë¸ù¾Ý×ÔÉíÄÜÁ¦È¥pullÏûÏ¢
´´½¨¶©ÔĵÄʱºòÐèÒª±©Â¶client¶ËµÄ½ÓÊÕÏûÏ¢µÄµØÖ·£¬µ«ÔÚһЩÆóÒµÄÚÍø¡¢vpcÍøÂçµÈÌØÊâÇé¿öÏ£¬CMQÎÞ·¨ÍÆË͵½£¬Ö»ÄÜÓÃpull·½Ê½»ñÈ¡ÏûÏ¢¡£
Õë¶ÔÒÔÉÏÌØÊⳡ¾°£¬CMQ½áºÏqueueºÍtopicÁ½ÖÖÄ£ÐÍʵÏÖÁËÒ»¶Ô¶àµÄ¹ã²¥ÀÈ¡ÏûϢģÐÍ£¬ÈçÏÂËùʾ£º

topicµÄ¶©ÔÄÕß¿ÉÒÔÊÇÒ»¸öqueueʵÀý£¬topic·¢²¼ÏûÏ¢ºó£¬»á×Ô¶¯½«ÏûÏ¢ÍÆË͵½queue£¬È»ºóclientºÍʹÓÃqueueÄ£ÐÍÒ»ÑùÈ¥Ïû·ÑÏûÏ¢¼´¿É¡£
#
python sdk demo code: create subscription of
queue protocal
my_sub = my_account.get_subscription(topic_name,
subscription_name)
subscription_meta = SubscriptionMeta()
subscription_meta.Endpoint = "queue1"
subscription_meta.Protocal = "queue"
my_sub.create(subscription_meta) |
¶þ¡¢Pull³¤ÂÖѯ
¶ÔÓÚQueueÄ£ÐÍ£¬Ïû·ÑÕßÐèÒªpull»ñÈ¡ÏûÏ¢£¬µ«ÎÊÌâÊÇ£ºÏû·ÑÕß²»ÖªµÀ¶ÓÁÐʲôʱºòÓÐÏûÏ¢£¬Ö»Äܲ»Í£ÂÖѯÇëÇóÈ¥pull£¬Èç¹ûÂÖѯ¼ä¸ôʱ¼ä¶Ì£¬ÔÚ¶ÓÁг¤Ê±¼äûÓÐÏûϢʱ»áºÄ·ÑÏû·ÑÕßÇëÇó×ÊÔ´ÇÒЧÂʵͣ¬Èç¹ûÂÖѯ¼ä¸ôʱ¼ä³¤£¬ÔòÏû·ÑËÙ¶ÈÂý£¬ÏûϢʵʱÐԵͣ¬ÇÒÔì³ÉÏûÏ¢´óÁ¿¶Ñ»ý¡£
Õë¶ÔÒÔÉÏÎÊÌ⣬CMQ½â¾ö·½°¸ÊÇÉè¼ÆÁ˳¤ÂÖѯ¹¦ÄÜ¡£ÀýÈ磬¼ÙÉèÉèÖöÓÁг¤ÂÖѯʱ¼äΪ10s
µ±Ïû·ÑÕßpullÏûϢʱ£¬Èç¹û¶ÓÁÐÖÐÓÐÏûÏ¢ÔòÂíÉÏ·µ»Ø
Èç¹û¶ÓÁÐÔÝʱûÓÐÏûÏ¢£¬Ïû·ÑÕßpullÇëÇó²»»áÂíÉÏ·µ»Ø£¬¶øÊÇ»áµÈ´ý×èÈû10s£ºµ±10sÄÚÓÐеÄÉú²úÏûÏ¢µ½´ï¶ÓÁУ¬CMQ»áÂíÉϽ«ÏûϢͶµÝ¸øÕýÔÚ×èÈûµÈ´ýµÄÏû·ÑÕߣ¬Ïû·ÑÕ߶˸ÐÖª¾ÍÊÇ×èÈûµÄpullÇëÇó±»»½ÐѲ¢ÇÒÊÕµ½ÏûÏ¢·µ»Ø;µ±10sÄÚ¶ÓÁж¼Ã»ÓÐÏûÏ¢£¬ÔòÇëÇ󷵻ظæËßÏû·ÑÕßµ±Ç°¶ÓÁÐûÓÐÏûÏ¢¡£
#
python sdk demo code: receive message through
long polling
pollingWaitSeconds = 3
recv_msg = my_queue.receive_message(pollingWaitSeconds)
|
Èý¡¢ÑÓʱÏûÏ¢
CMQÌṩÑÓʱÏûÏ¢¹¦ÄÜ£ºÏûÏ¢·¢Ë͵½¶ÓÁк󣬴ÓÈë¶Óʱ¼äËãÆð£¬ÏûÏ¢ÔÚÉèÖõÄÑÓʱʱ¼äºó²Å¶ÔÏû·ÑÕ߿ɼû£¬¼´²ÅÄܱ»Ïû·ÑÕßÏû·Ñµ½¡£ÑÓʱÏûÏ¢¹¦ÄÜ¿ÉÒÔºÜÇáËÉʵÏÖһЩ¶¨Ê±ÈÎÎñµÄÓ¦Óó¡¾°¡£

ÈçÉÏͼËùʾ£¬¸ù¾ÝCMQÑÓ³ÙÏûÏ¢¹¦ÄÜʵÏֵĶ¨Ê±ÈÎÎñ¼ì²é¸æ¾¯ÏµÍ³¡£
#
python sdk demo code: send delayed message
msg_body = "I am delay message"
msg = Message(msg_body)
delaySeconds = 3
my_queue.send_message(msg, delaySeconds) |
ËÄ¡¢ÏûÏ¢»ØËÝ
CMQÌṩÀàËÆÓÚKafkaµÄÏûÏ¢»ØËÝÄÜÁ¦£¬ÒѾÏû·Ñɾ³ýµÄÏûÏ¢ÊÇ¿ÉÒÔͨ¹ý»ØËÝÀ´ÖØÐÂÏû·ÑµÄ¡£Ä¿Ç°Ö§³ÖÖ¸¶¨»ØËÝʱ¼äµã£¬ÔÚÕâ¸öʱ¼äµã¿ªÊ¼±»É¾³ýµÄÏûÏ¢¿ÉÒÔÖØÐÂÏû·Ñµ½¡£´Ë¹¦ÄÜÔÚһЩ½ðÈÚÒµÎñ¶ÔÕË¡¢ÒµÎñÏµÍ³ÖØÊԵȳ¡¾°ÏÂÓкܺõÄʵÓÃÐÔ¡£
×î´ó¿É»ØËÝʱ¼äµã = µ±Ç°Ê±¼ä - ÉèÖõĿɻØËÝʱ³¤¡£ÏûÏ¢Éú²úʱ¼äÔÚÕâ¸öֵ֮ǰµÄ²»¿É»ØËÝ£¬Ö®ºóµÄ¿É»ØËÝ£¬ÈçÏÂͼËùʾ£º

#
python sdk demo code: rewind the queue
# backtrack one hour
backTrackingTime = int(time.time()) - 3600
my_queue.rewindQueue(backTrackingTime) |
Îå¡¢Topic·ÓÉÆ¥Åä
CMQ topicÄ£ÐÍÌṩÀàËÆÓÚRabbitMQµÄÏûϢ·ÓÉÆ¥Å书ÄÜ£¬ÔÚÏûÏ¢¹ã²¥»ù´¡ÉÏʵÏÖÁËÏûÏ¢µÄ×Ô¶¯·Ö·¢¡£

¶©ÔÄÕß¿ÉÒÔÖ¸¶¨bindingKey£¬¼´Â·ÓɹæÔò£¬ÈçÉÏËùʾ£¬*(ÐǺÅ)¿ÉÒÔÆ¥ÅäÒ»¸öµ¥´Ê£¬#(¾®ºÅ)¿ÉÒÔÆ¥ÅäÒ»¸ö»ò¶à¸öµ¥´Ê¡£ÀýÈ磬Éú²úÕß·¢²¼Ò»¸öÏûÏ¢£¬ÇÒÏûÏ¢µÄ·Óɼü(routingKey)ÊÇ¡±quick.orange.elephant¡±£¬ÄÇô¸ÃÏûÏ¢Ö»»áÍÆË͸øÏû·ÑÕßC1;Èç¹ûroutingKey=¡±quick.orange.rabbit¡±£¬ÔòÏûÏ¢»áÍÆË͸øC1ºÍC2;Èç¹ûroutingKey=¡±lazy.brown.fox¡±£¬ÔòÏûÏ¢Ö»»áÍÆË͸øC2¡£
#
python sdk demo code: set topic-subscription
route-rule
my_sub = my_account.get_subscription(topic_name,
subscription_name)
subscription_meta = SubscriptionMeta()
subscription_meta.Endpoint = "http://test.com"
subscription_meta.Protocal = "http"
subscription_meta.bindingKey = ['*.*.rabbit','lazy.#']
my_sub.create(subscription_meta)
message = Message()
message.msgBody = "route msg test"
my_topic.publish_message(message, 'quick.orange.rabbit')
|
Áù¡¢³¬´óÏûÏ¢´«Êä
ĿǰCMQµÄ¶ÓÁÐÏûÏ¢´óС×î´óÏÞÖÆÎª1MB£¬¶øµ±ÏûÏ¢´óС²»³¬¹ý64KBʱ£¬ÊÕ·¢ÏûÏ¢µÄ×î´óQPSÏÞÖÆ·Ö±ðΪÕý³£µÄ5k(ÓÐÌØÊâÐèÇó¿Éµ÷Õû)£¬µ±ÏûÏ¢´óС³¬¹ý64KB¶øÐ¡ÓÚ1MBʱ£¬CMQ²»±£Ö¤ÊÕ·¢ÏûÏ¢µÄQPSÐÔÄÜ¡£Òò´Ë£¬Ö§³Ö´óÓÚ64KBµÄÏûÏ¢Ö»ÊÇΪÁË¿¼ÂÇÒµÎñż¶û´«ÊäÉÙÁ¿´óÏûÏ¢ÇÒ²»Ïë×öÏûÏ¢·ÖƬµÄÓ¦Óó¡¾°¡£
Ò»°ãÀ´Ëµ£¬64KBµÄÏûÏ¢ÏÞÖÆ´óС»ù±¾ÄÜÂú×ã´ó²¿·ÖÒµÎñ³¡¾°ÐèÇóÁË£¬µ«ÔÚÄ³Ð©ÌØÊⳡ¾°Ï£¬ÏûÏ¢Êý¾Ý´óÓÚ64KBÉõÖÁ´óÓÚ1MBʱ£¬ÒµÎñºÍCMQÈçºÎÖ§³ÖÕâÖÖ³¬´óÏûÏ¢µÄ´«ÊäÄØ?ÕâÀïÓÐÁ½ÖÖ½â¾ö·½°¸£º
1.ÏûÏ¢·ÖƬ¡£ÀàËÆIPÊý¾Ý°ü·ÖƬ´«ÊäÔÀí£¬Éú²úÕß¶ÔÏûÏ¢·ÖƬ±ê¼Çºó·Ö±ð·¢Ë͵½¶ÓÁУ¬Ïû·ÑÕß´Ó¶ÓÁÐÈ¡³öËùÓÐ·ÖÆ¬ÏûÏ¢½øÐÐ×é×°¡£¸öÈË·½°¸ÈçÏ£º
ÿ¸öÏûÏ¢body·ÖΪheaderºÍdataÁ½²¿·Ö¡£ÆäÖУ¬data¾ÍÊÇÔÏûÏ¢·ÖƬºóµÄÄÚÈÝ£¬header°üº¬Èý¸ö±ê¼Ç£ºÒµÎñÖ¸¶¨ÏûÏ¢µÄIDºÅ£¬Î¨Ò»¼Ç¼һ¸öÏûÏ¢µÄIDÖµ£¬¾ßÓÐͬһ¸öIDºÅµÄÏûÏ¢·ÖƬ²Å»áÔÚÏû·Ñ¶ËÖØÐÂ×é×°;·ÖƬÐòºÅ(´Ó1¿ªÊ¼)£¬¼Ç¼һ¸öÏûÏ¢·ÖƬµÄ´ÎÐò±àºÅ£¬Ïû·Ñ¶ËÒÀ¾Ý·ÖƬÐòºÅÒÀ´Î×é×°ÏûÏ¢;ÏÂÒ»·ÖƬÊÇ·ñ´æÔڵıê¼Ç£¬Èç¹ûÊÇ£¬ËµÃ÷ÏûÏ¢°ü»¹²»ÍêÕû£¬·ñÔòÏûÏ¢×é×°Íê±Ï¡£

ÓÉÓÚ¿ÉÄÜ´æÔÚ¶à¸öÏû·ÑÕßclient£¬²»Í¬·ÖƬ¿ÉÄܱ»²»Í¬client½ÓÊÕµ½£¬ÎªÁËÄܹ»×é×°·ÖƬ£¬ÐèÒªÒ»¸ö¼¯ÖÐʽµÄµØ·½´æ´¢ËùÓÐ·ÖÆ¬²¢×îÖÕ×é×°³ÉÍêÕûµÄÏûÏ¢°ü£¬µ«ÎÞÒÉ´ó´óÔö¼ÓÁËϵͳÉè¼ÆµÄ¸´ÔÓ¶È¡£
2.COS´úÀí´æ´¢(COSÊÇÌÚÑ¶ÔÆµÄ¶ÔÏó´æ´¢·þÎñ)¡£ÀàËÆ±à³ÌÖеÄÖ¸ÕëÔÀí£¬·½°¸ÈçÏÂ(¾ßÌå´úÂëʵÏֲο¼¸½¼þ)£º
Éú²úÕßÏȰѳ¬´óÏûÏ¢µÄÊý¾ÝÒÔÎļþÐÎʽÉÏ´«µ½COS£¬²¢·µ»ØÏûÏ¢ÎļþµÄCOS URLµØÖ·;
Éú²úÕß½«URLµØÖ·×÷ΪÏûÏ¢·¢Ë͵½CMQ¶ÓÁÐÖÐ;
Ïû·ÑÕß´ÓCMQ¶ÓÁÐÖжÁÈ¡ÏûÏ¢£¬ÅжÏÏûÏ¢ÄÚÈÝÊÇ·ñÊÇCOSµÄURLµØÖ·ÐÅÏ¢£¬Èç¹ûÊÇ£¬Ôò¸ù¾ÝURLµØÖ·´ÓCOSÏÂÔØÏàÓ¦µÄÏûÏ¢Îļþ£¬²¢´ÓÎļþÖжÁÈ¡³ö³¬´óÏûÏ¢µÄÊý¾Ý¡£

Æß¡¢ÏûÏ¢¼ÓÃÜ´«Êä
ÌÚÑ¶ÔÆÌá¹©ÃØÔ¿¹ÜÀí·þÎñKMS£¬ÄܶÔÊý¾Ý½øÐа²È«¼ÓÃÜ¡£CMQÏûÏ¢¼ÓÃܹ¦ÄÜÓÐÒÔÏÂÁ½ÖÖ·½°¸£º
1.CMQ SDK¿Í»§¶Ë¼ÓÃÜ·½°¸¡£¿Í»§¶Ë·¢ËÍÏûϢʱ£¬¸ù¾ÝÉèÖõÄCMK(KMSµÄÃØÔ¿ID)µ÷ÓÃKMSÉú³ÉÊý¾ÝÃØÔ¿½Ó¿Ú£¬»á·µ»ØÊý¾ÝÃØÔ¿µÄÃ÷ÎÄkeyÒÔ¼°¼ÓÃܺóµÄÃÜÎÄkey£¬Ê¹ÓÃÃ÷ÎÄkey¶ÔÏûÏ¢½øÐб¾µØ¼ÓÃÜ£¬È»ºó½«¼ÓÃܵÄÊý¾ÝºÍÃÜÎÄkey×÷ΪÏûÏ¢
·¢Ë͸øCMQ;Ïû·ÑÕß½ÓÊÕÏûϢʱ£¬ÏÈ»ñÈ¡ÏûÏ¢ÖеÄÃÜÎÄkey£¬µ÷ÓÃKMS½Ó¿Ú½âÃÜ(²»±ØÃ¿´Î¾ùµ÷Ó㬿É×ö»º´æ)µÃµ½¶ÔÓ¦µÄÃ÷ÎÄkey£¬×îºó¸ù¾ÝÃ÷ÎÄkey±¾µØ½âÃÜÃÜÎÄÊý¾Ý¼´¿É¡£¾ßÌå´úÂëʵÏֲο¼¸½¼þ¡£

2.CMQ·þÎñ¶Ë¼ÓÃÜ·½°¸¡£¸Ã·½°¸£¬ÓÉCMQ·þÎñ¶ËºÍKMS·þÎñ´òͨ£¬CMQ×Ô¶¯¶ÔÏûÏ¢¼Ó½âÃÜ£¬Óû§ÎÞ¸ÐÖª£¬ÀýÈ磬Óû§Í¨¹ýhttps½Ó¿Ú·¢ËÍÏûÏ¢£¬ÓÉCMQ×Ô¶¯¼ÓÃÜºó´æ´¢£¬Í¨¹ýhttps½Ó¿Ú½ÓÊÕÏûϢʱ£¬CMQ¶ÔÏûÏ¢×Ô¶¯½âÃܺ󷵻ظøÓû§¡£´Ë¹¦ÄÜÕýÔÚ¿ª·¢ÖС£