[英]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.