簡體   English   中英

Kombu消費者節儉服務

[英]Kombu Consumer as Thrift Service

我需要構建一個可以通過編程控制的Kombu使用者。 我所看到的所有示例都是簡單的示例,它們告訴您使用ctrl-c停止程序。

我的主要應用程序作為Twisted Thrift服務運行,我在想我可以以某種方式使用Twisted Reactor處理使用者內部的eventloop,但我不知道如何處理。

這是我的消費階層。 除了阻塞之外,start_consumption()部分還不錯,我無法從外部調用stop_consumping()。

from kombu import BrokerConnection, Exchange, eventloop, Queue, Consumer


class DMS():
    __routing_key = None
    __is_consuming = None
    __message_counter = 0

    def __init__(self, routing_key):
        print 'server: __init__()'
        self.__routing_key = routing_key

    def __handle_message(self, body, message):
        self.__message_counter += 1

        # Print count every 10,000 messsages.
        if (self.__message_counter % 10000) == 0:
            print self.__message_counter

    def start_consuming(self):
        print 'server: start_consuming()'
        self.__is_consuming = True
        exchange = Exchange('raven-exchange', type='topic', durable=False)
        queue = Queue(self.__routing_key, exchange, routing_key=self.__routing_key)

        with BrokerConnection('amqp://guest:guest@10.1.1.121:5672//') as connection:
            with Consumer(connection, queue, callbacks=[self.__handle_message]) as consumer:
                for _ in eventloop(connection):

                    if self.__is_consuming:
                        pass
                    else:
                        break

                consumer.cancel()
            connection.close()

    def stop_consuming(self):
        print 'server: stop_consuming()'
        self.__is_consuming = False

推薦的通過MQ系統路由Thrift服務調用的方法是通過oneway調用,因為這是通過MQ和MessageBus系統進行通信的最自然的方法。

struct Foo {
  1: string whoa
  2: i32 counter
}

service Whatever {
    oneway void FooBar(1: Foo someData, 2:i32 moreData)
}

oneway調用是Thrift RPC調用的一種特殊形式:顧名思義,該調用僅在一個方向上進行。 oneway既不使用返回值,也不使用異常(實際上是返回值)。 該調用僅發送輸入args,並且不等待返回任何值。

為了建立雙向通訊,客戶端需要實施類似的服務,旨在接收傳入的應答消息。 Thrift /contrib文件夾中有一些示例,具有0MQ,Rebus和Stomp。 盡管它們沒有專門針對Python,但主要思想應該變得清晰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM