HTML5¼¼Êõ

C#·Ö²¼Ê½ÏûÏ¢¶ÓÁÐ EQueue 2.0 ·¢²¼À² - netfocus(6)

×ÖºÅ+ ×÷ÕߣºH5Ö®¼Ò À´Ô´£ºH5Ö®¼Ò 2015-11-02 19:00 ÎÒÒªÆÀÂÛ( )

ÁíÍ⣬ÉÏÃæÎÒ˵¹ýEQueueÖÐĿǰÓÐÁ½ÖÖChunkÎļþ£¬Ò»ÖÖÊÇ´æ´¢ÏûÏ¢±¾ÉíµÄ£¬ÎÒ½Ð×öMessage Chunk£»Ò»ÖÖÊÇ´æ´¢¶ÓÁÐÐÅÏ¢µÄ£¬ÎÒ½Ð×öQueue Chunk£»¶øQueue ChunkµÄÊý¾ÝÊÇÒÀÀµÓÚMessage ChunkµÄ¡£ÉÏÃæÎÒ˵µÄÁ½ÖÖɾ³ý²ßÂÔÊÇÕë

ÁíÍ⣬ÉÏÃæÎÒ˵¹ýEQueueÖÐĿǰÓÐÁ½ÖÖChunkÎļþ£¬Ò»ÖÖÊÇ´æ´¢ÏûÏ¢±¾ÉíµÄ£¬ÎÒ½Ð×öMessage Chunk£»Ò»ÖÖÊÇ´æ´¢¶ÓÁÐÐÅÏ¢µÄ£¬ÎÒ½Ð×öQueue Chunk£»¶øQueue ChunkµÄÊý¾ÝÊÇÒÀÀµÓÚMessage ChunkµÄ¡£ÉÏÃæÎÒ˵µÄÁ½ÖÖɾ³ý²ßÂÔÊÇÕë¶ÔMessage Chunk¶øÑԵġ£¶øQueue Chunk£¬ÓÉÓÚÕâ¸öÒÀÀµÐÔ£¬ÎÒ¾õµÃ±È½ÏºÏÀíµÄ·½Ê½ÊÇ£¬Ö»ÐèÒªÅжϵ±Ç°Queue ChunkÖеÄËùÓеÄÏûÏ¢¶ÔÓ¦µÄMessage ChunkÊÇ·ñÒѾ­¶¼É¾³ýÁË£¬Èç¹ûÊÇ£¬ÄÑ˵Ã÷Õâ¸öQueue ChunkÒ²ÒѾ­Ã»ÒâÒåÁË£¬¾Í¿ÉÒÔɾ³ýÁË¡£µ«Ö»ÒªÕâ¸öQueue  ChunkÖÐÖÁÉÙ»¹ÓÐÒ»¸öÏûÏ¢µÄChunkÎļþûɾ³ý£¬ÄÇÕâ¸öQueue Chunk¾Í²»»áɾ³ý¡£

ÉÏÃæÕâ¸öÖ»ÊÇ˼·Ŷ£¬ÕæÊµµÄ´úÂë¿Ï¶¨±ÈÕâ¸ö¸´ÔÓ£¬ºÇºÇ¡£ÓÐÐËȤµÄÅóÓÑ»¹ÊÇÒª¿´´úÂëµÄ¡£

ÈçºÎ²éÏûÏ¢£¿

֮ǰÓÃSQL ServerµÄ·½Ê½£¬ÓÉÓÚDBºÜÈÝÒײéÏûÏ¢£¬ËùÒÔ²éѯÏûÏ¢²»ÊÇ´óÎÊÌâ¡£µ«ÊÇÏÖÔÚÎÒÃǵÄÏûÏ¢ÊÇ·ÅÔÚÎļþÀïµÄ£¬ÄÇÒªÔõô²éÑ¯ÄØ£¿Ä¿Ç°Ö§³Ö¸ù¾ÝÏûÏ¢IDÀ´²éѯ¡£µ±Producer·¢ËÍÒ»¸öÏûÏ¢µ½Broker£¬Broker·µ»Ø½á¹ûÀï»á°üº¬ÏûÏ¢µÄID¡£ProducerµÄÕýÈ·×ö·¨Ó¦¸ÃÊÇÒªÓÃÈÕÖ¾»òÆäËû·½Ê½¼Ç¼Õâ¸öID£¬²¢×îºÃºÍ×Ô¼ºµÄµ±Ç°ÒµÎñÏûÏ¢µÄij¸öÒµÎñIDÒ»Æð¼Ç¼£¬±ÈÈçCommandId»òÕßEventId£¬ÕâÑùÎÒÃǾÍÄܸù¾ÝÎÒÃǵÄÒµÎñIDÕÒµ½ÏûÏ¢ID£¬È»ºó¸ù¾ÝÏûÏ¢IDÕÒµ½ÏûÏ¢ÄÚÈÝÁË¡£ÄÇÏûÏ¢IDÏÖÔÚÊÇÔõôÉè¼ÆµÄÄØ£¿Ò²ÊÇÊܵ½RocketMQµÄÆô·¢£¬ÏûÏ¢IDÓÉÁ½²¿·Ö×é³É£º1£©BrokerµÄIP£»2£©ÏûÏ¢ÔÚBrokerµÄÎļþÖеÄÈ«¾ÖλÖã»ÕâÑù£¬µ±ÎÒÃÇÒª¸ù¾Ýij¸öÏûÏ¢ID²éѯʱ£¬¾Í¿ÉÒÔÏȶ¨Î»µ½Õâ¸öÏûÏ¢ÔÚÄĸöBrokerÉÏ£¬Ò²Í¬Ê±ÖªµÀÁËÏûÏ¢ÔÚÎļþµÄÄĸöλÖÃÁË£¬ÕâÑù¾ÍÄÜ×îÖÕ¶ÁÈ¡Õâ¸öÏûÏ¢µÄÄÚÈÝÁË¡£

ΪʲôҪÕâÑùÉè¼ÆÄØ£¿Èç¹ûÎÒÃǵÄBrokerûÓм¯Èº£¬ÄÇÆäʵ²»ÐèÒª°üº¬BrokerµÄIP£»Õâ¸öÉè¼ÆÊÇΪÁËδÀ´EQueue Broker»áÖ§³Ö¼¯ÈºµÄ£¬ÄǸöʱºò£¬ÎÒÃǾͱØÐëÒªÖªµÀij¸öÏûÏ¢ID¶ÔÓ¦µÄBrokerÊÇÄĸöÁË¡£

ÈçºÎ±£´æ¶ÓÁÐÏû·Ñ½ø¶È£¿

EQueueÖУ¬Ã¿¸öQueue£¬¶¼»áÓÐÒ»¸ö¶ÔÓ¦µÄConsumer¡£Ïû·Ñ½ø¶È¾ÍÊÇÕâ¸öQueueµ±Ç°±»Ïû·Ñµ½ÄÄÀïÁË£¬Ò»¸öOffsetÖµ¡£±ÈÈçOffsetΪ100£¬¾Í±íʾµ±Ç°Õâ¸öQueueÒѾ­Ïû·Ñµ½µÚ99£¨ÒòΪÊÇ´Ó0¿ªÊ¼µÄ£©¸öλÖõÄÏûÏ¢ÁË¡£ÒòΪһ¸öBrokerÉÏÓкܶàµÄQueue£¬±ÈÈçÓÐ100¸ö¡£¶øÎÒÃÇÏÖÔÚÊÇʹÓÃÎļþµÄ·½Ê½À´´æ´¢ÐÅÏ¢ÁË¡£ËùÒÔ×ÔÈ»Ïû·Ñ½ø¶ÈÒ²ÊÇÓÃÎļþÁË¡£µ«ÓÉÓÚÏû·Ñ½ø¶ÈµÄÐÅÏ¢ºÜÉÙ£¬Ò²²»ÊǵÝÔöµÄÐÎʽ¡£ËùÒÔÎÒÃÇ¿ÉÒÔ¼òµ¥Éè¼Æ£¬Ä¿Ç°EQueue²ÉÓÃÒ»¸öÎļþµÄ·½Ê½À´±£´æËùÓÐQueueµÄÏû·Ñ½ø¶È£¬ÎļþÄÚÈÝΪJSON£¬JSONÀï¼Ç¼ÁËÿ¸öQueueµÄÏû·Ñ½ø¶È¡£ÎļþÄÚÈÝ¿´ÆðÀ´ÏñÏÂÃæÕâÑù£º

{"SampleGroup":{"topic1-3":89055,"topic1-2":89599,"topic1-1":89471,"topic1-0":89695}}

ÉÏÃæµÄJSON±êʶһ¸öÃûΪSampleGroupµÄConsumerGroup£¬ËûÏû·ÑÁËÒ»¸öÃûΪtopic1µÄtopic£¬È»ºóÕâ¸ötopicϵÄÿ¸öQueueµÄÏû·Ñ½ø¶È¼Ç¼ÁËÏÂÀ´¡£Èç¹ûÓÐÁíÒ»¸öConsumerGroup£¬Ò²Ïû·ÑÁËÕâ¸ötopic£¬ÄÇÏû·Ñ½ø¶ÈÊǸôÀëµÄ¡£Èç¹û»¹²»Çå³þConsumerGroupµÄͬѧ£¬ÒªÈ¥¿´Ò»ÏÂÎÒ֮ǰдµÄEQueueµÄÎÄÕÂÁË¡£

»¹ÓÐûÓпÉÒÔÓÅ»¯µÄµØ·½£¿

µ½Ä¿Ç°ÎªÖ¹£¬»¹ÓÐûÓÐÆäËû¿ÉÓÅ»¯µÄ´óµÄµØ·½ÄØ£¿ÓС£Ö®Ç°ÎÒ×öEQueueʱ£¬×ÜÊǰÑÏûÏ¢´ÓÊý¾Ý¿â¶ÁÈ¡³öÀ´£¬È»ºó¹¹Ôì³öÏûÏ¢¶ÔÏó£¬ÔÙ°ÑÏûÏ¢¶ÔÏóÐòÁл¯Îª¶þ½øÖÆ£¬ÔÙ·µ»Ø¸øConsumer¡£ÕâÀïÉæ¼°µ½´ÓDBÄóöÀ´£¬ÔÙÐòÁл¯Îª¶þ½øÖÆ¡£Ñ§Ï°ÁËRocketMQµÄ´úÂëºó£¬ÎÒÃÇ¿ÉÒÔ×öµÄ¸ü´ÏÃ÷Ò»µã¡£ÒòΪÆäʵ»ùÓÚÎļþ´æ´¢Ê±£¬ÎÒÃÇ´ÓÎļþÀïÄóöÀ´µÄÒѾ­ÊǶþ½øÖÆÁË¡£ËùÒÔ¿ÉÒÔÖ±½Ó°Ñ¶þ½øÖÆ·µ»Ø¸øÏû·ÑÕß¼´¿É¡£²»ÐèÒªÏÈת»»Îª¶ÔÏóÔÙ×öÐòÁл¯ÁË¡£Í¨¹ýÕâ¸öÉè¼ÆµÄ¸Ä½ø£¬ÎÒÃÇÏÖÔÚµÄÏû·ÑÕßÏû·ÑÏûÏ¢£¬¿ÉÒÔ˵ÎÞÈÎºÎÆ¿¾±ÁË£¬·Ç³£¿ì¡£

ÈçºÎͳ¼ÆÏûÏ¢¶ÁдÇé¿ö£¿

ÔÚ²âÊÔдÎļþµÄÕâ¸ö°æ±¾Ê±£¬ÎÒÃǺÜÏ£ÍûÖªµÀÿ¸öChunkµÄ¶ÁдÇé¿öµÄͳ¼Æ£¬´Ó¶øÈ·¶¨Éè¼ÆÊÇÕýÈ·µÄ¡£ËùÒÔ£¬ÎÒ¸øEQueueµÄChunkÔö¼ÓÁËʵʱͳ¼ÆChunk¶ÁдµÄͳ¼Æ·þÎñ¡£Ä¿Ç°ÎÒÃÇÔÚÔËÐÐEQueue×Ô´øµÄÀý×Óʱ£¬Broker»áÿ¸öÒ»Ãë´òÓ¡³öËùÓÐChunkµÄ¶ÁдÇé¿ö£¬Õâ¸öÌØÐÔ¼«´óµÄ·½±ãÎÒÃÇÅжÏÏûÏ¢µÄ·¢ËͺÍÏû·ÑÊÇ·ñÕý³££¬Ïû·ÑÊÇ·ñÓÐÑӳٵȡ£

ÆäËûÐÂÔö¹¦ÄÜ ¸üÍêÉÆºÍ°²È«µÄ¶ÓÁÐÀ©ÈݺÍËõÈÝÉè¼Æ

Õâ´ÎÎÒ¸øEQueueµÄWebºǫ́¹ÜÀí¿ØÖÆÌ¨Ò²ÍêÉÆÁËһ϶ÓÁеÄÔö¼ÓºÍ¼õÉÙµÄÉè¼Æ¡£Ôö¼Ó¶ÓÁУ¨¼´¶ÓÁеÄÀ©ÈÝ£©±È½Ï¼òµ¥£¬Ö±½ÓÐÂÔö¼´¿É¡£µ«Êǵ±ÎÒÃÇҪɾ³ýÒ»¸ö¶ÓÁÐʱ£¬ÔõÑù°²È«µÄɾ³ýÄØ£¿Ö÷ÒªÊÇҪȷ±£É¾³ýÕâ¸ö¶ÓÁÐʱ£¬ÒѾ­Ã»ÓÐProducer»òConsumerÔÚʹÓÃÕâ¸ö¶ÓÁÐÁË¡£ÒªÔõô×öµ½ÄØ£¿ÎÒµÄ˼·ÊÇ£¬ÎªÃ¿¸öQueue¶ÔÏóÉè¼ÆÁ½¸öÊôÐÔ£¬±íʾ¶ÔProducerÊÇ·ñ¿É¼û£¬¶ÔConsumerÊÇ·ñ¿É¼û¡£µ±ÎÒÃÇҪɾ³ýij¸öQueueʱ£¬¿ÉÒÔ£º1£©ÏÈÈÃÆä¶ÔProducer²»¿É¼û£¬ÕâÑùProducerºóÐø¾Í²»»áÔÙ·¢ËÍеÄÏûÏ¢µ½Õâ¸ö¶ÓÁÐÁË£»È»ºóµÈ´ý£¬Ö±µ½Õâ¸ö¶ÓÁÐÀïµÄÏûÏ¢¶¼±»ËùÓеÄÏû·ÑÕßÏû·ÑµôÁË£»È»ºóÔÙÉèÖÃΪ¶ÔConsumer²»¿É¼û¡£È»ºóÔÙ¹ý¼¸Ã룬ȷ±£Ã¿¸öÏû·ÑÕß¶¼²»»áÔÙÏòÕâ¸ö¶ÓÁз¢³öÀ­È¡ÏûÏ¢µÄÇëÇóÁË¡£ÕâÑùÎÒÃǾÍÄܰ²È«µÄɾ³ýÕâ¸ö¶ÓÁÐÁË¡£É¾³ý¶ÓÁеÄÂß¼­´ó¸ÅÈçÈçÏ£º

public void DeleteQueue(string topic, int queueId) { lock (this) { var key = QueueKeyUtil.CreateQueueKey(topic, queueId); Queue queue; if (!_queueDict.TryGetValue(key, out queue)) { return; } //¼ì²é¶ÓÁжÔProducer»òConsumerÊÇ·ñ¿É¼û£¬Èç¹û¿É¼ûÊDz»ÔÊÐíɾ³ýµÄ if (queue.Setting.ProducerVisible || queue.Setting.ConsumerVisible) { throw new Exception("Queue is visible to producer or consumer, cannot be delete."); } //¼ì²éÊÇ·ñÓÐδÏû·ÑÍêµÄÏûÏ¢ var minConsumedOffset = _consumeOffsetStore.GetMinConsumedOffset(topic, queueId); var queueCurrentOffset = queue.NextOffset - 1; if (minConsumedOffset < queueCurrentOffset) { throw new Exception(string.Format("Queue is not allowed to delete, there are not consumed messages: {0}", queueCurrentOffset - minConsumedOffset)); } //ɾ³ý¶ÓÁеÄÏû·Ñ½ø¶ÈÐÅÏ¢ _consumeOffsetStore.DeleteConsumeOffset(queue.Key); //ɾ³ý¶ÓÁб¾Éí£¬°üÀ¨ËùÓеÄÎļþ queue.Delete(); //×îºó½«¶ÓÁдÓ×ÖµäÖÐÒÆ³ý _queueDict.Remove(key); } }

´úÂëÓ¦¸ÃºÜ¼òµ¥Ö±½Ó£¬²»¶à½âÊÍÁË¡£¶ÓÁеĶ¯Ì¬ÐÂÔöºÍɾ³ý£¬¿ÉÒÔ·½±ãÎÒÃÇÏßÉÏÓ¦¸¶ÔÚÏ߻ʱ£¬ËæÊ±ÎªÏû·ÑÕßÌṩ¸ü¸ßµÄ²¢ÐÐÏû·ÑÄÜÁ¦£¬ÒÔ¼°»î¶¯½áÊøºóÈ¥µô¶àÓàµÄ¶ÓÁС£ÊǷdz£ÊµÓõŦÄÜ¡£

Ö§³ÖTag¹¦ÄÜ

¡¡

1.±¾Õ¾×ñÑ­ÐÐÒµ¹æ·¶£¬ÈκÎ×ªÔØµÄ¸å¼þ¶¼»áÃ÷È·±ê×¢×÷ÕߺÍÀ´Ô´£»2.±¾Õ¾µÄÔ­´´ÎÄÕ£¬Çë×ªÔØÊ±Îñ±Ø×¢Ã÷ÎÄÕÂ×÷ÕߺÍÀ´Ô´£¬²»×ðÖØÔ­´´µÄÐÐΪÎÒÃǽ«×·¾¿ÔðÈΣ»3.×÷ÕßͶ¸å¿ÉÄܻᾭÎÒÃDZ༭Ð޸Ļò²¹³ä¡£

Ïà¹ØÎÄÕÂ
  • ÔËÓÃgoogle-protobufµÄIMÏûÏ¢Ó¦Óÿª·¢£¨Ç°¶Ëƪ£© - ×ÓĽ´óÊ«ÈË

    ÔËÓÃgoogle-protobufµÄIMÏûÏ¢Ó¦Óÿª·¢£¨Ç°¶Ëƪ£© - ×ÓĽ´óÊ«ÈË

    2017-03-30 18:00

  • Session·Ö²¼Ê½¹²Ïí = Session + Redis + Nginx - °ÁÒí·Éº®

    Session·Ö²¼Ê½¹²Ïí = Session + Redis + Nginx - °ÁÒí·Éº®

    2017-03-10 16:00

  • ¡¾G¡¿¿ªÔ´µÄ·Ö²¼Ê½²¿Êð½â¾ö·½°¸£¨Ò»£© - ¿ªÆª - ѰÕÒºÍг

    ¡¾G¡¿¿ªÔ´µÄ·Ö²¼Ê½²¿Êð½â¾ö·½°¸£¨Ò»£© - ¿ªÆª - ѰÕÒºÍг

    2017-01-24 14:01

  • ASP.Net MVC4+Memcached+CodeFirstʵÏÖ·Ö²¼Ê½»º´æ - ±¼Åܰɣ¡Ð¡¹ù

    ASP.Net MVC4+Memcached+CodeFirstʵÏÖ·Ö²¼Ê½»º´æ - ±¼Åܰɣ¡Ð¡¹ù

    2017-01-01 13:00

ÍøÓѵãÆÀ
´