2009-06-11 24 views
2

私はmorbidからrabbitmqにシステムを移動しようとしていますが、既定ではmorbidと同じブロードキャスト動作が得られないようです。ブロードキャストでは、メッセージがキューに追加されると、すべてのコンシューマがメッセージを受信します。ウサギの場合、メッセージが追加されると、ラウンドロビン方式で各リスナーに配信されます。RabbitmqとPythonでStompブロードキャスト

誰も私に同じ種類のメッセージ配信を達成する方法を教えてもらえますか?

以下で使用ストンプ・ライブラリは、本当に役立つだろう、ストンプにしても、amqplib例を行うことができるという失敗http://code.google.com/p/stomppy/

です。

現時点での私のコードは、この

のように消費者

import stomp 

class MyListener(object): 
    def on_error(self, headers, message): 
     print 'recieved an error %s' % message 

    def on_message(self, headers, message): 
     print 'recieved a message %s' % message 

conn = stomp.Connection([('0.0.0.0', 61613), ('127.0.0.1', 61613)], 'user', 'password') 
conn.set_listener('', MyListener()) 
conn.start() 
conn.connect(username="user", password="password") 
headers = {} 

conn.subscribe(destination='/topic/demoqueue', ack='auto') 

while True: 
    pass 
conn.disconnect() 

を検索し、送信者がこの

import stomp 

class MyListener(object): 
    def on_error(self, headers, message): 
     print 'recieved an error %s' % message 

    def on_message(self, headers, message): 
     print 'recieved a message %s' % message 

conn = stomp.Connection([('0.0.0.0', 61613), ('127.0.0.1', 61613)], 'user', 'password') 
conn.set_listener('', MyListener()) 
conn.start() 
conn.connect(username="user", password="password") 
headers = {} 

conn.subscribe(destination='/topic/demotopic', ack='auto') 

while True: 
    pass 
conn.disconnect() 

答えて

3

私は最終的に、「受信グループ」ごとに交換を作成する方法を考え出しました。ウサギが何千もの交換をしてどれくらいうまくいくかわからないので、実際に試してみるとよいでしょう

送信のコードでは:

conn.send(str(i), exchange=exchange, destination='') 

空白先が必要とされ、私は気にすべてが

を受け取るためにそのやり取りに

を送信している

import stomp 
import sys 
from amqplib import client_0_8 as amqp 
#read in the exchange name so I can set up multiple recievers for different exchanges to tset 
exchange = sys.argv[1] 
conn = amqp.Connection(host="localhost:5672", userid="username", password="password", 
virtual_host="/", insist=False) 

chan = conn.channel() 

chan.access_request('/', active=True, write=True, read=True) 

#declare my exchange 
chan.exchange_declare(exchange, 'topic') 
#not passing a queue name means I get a new unique one back 
qname,_,_ = chan.queue_declare() 
#bind the queue to the exchange 
chan.queue_bind(qname, exchange=exchange) 

class MyListener(object): 
    def on_error(self, headers, message): 
     print 'recieved an error %s' % message 

    def on_message(self, headers, message): 
     print 'recieved a message %s' % message 

conn = stomp.Connection([('0.0.0.0', 61613), ('127.0.0.1', 61613)], 'browser', 'browser') 
conn.set_listener('', MyListener()) 
conn.start() 
conn.connect(username="username", password="password") 
headers = {} 

#subscribe to the queue 
conn.subscribe(destination=qname, ack='auto') 

while True: 
    pass 
conn.disconnect() 
3

のように見えるどうやらあなたはSTOMPと直接に行うことはできません。 mailing list threadには、ストップで放送するために飛ばしなければならないすべてのフープが表示されます(これには、下位レベルのAMPQのものが含まれます)。

+0

ありがとう、私は前にスレッドを見て、amqplibでその提案を成功させようとしました。具体的なメッセージはhttp://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2008-September/001786.htmlです。私はamqplibサンプルが私のために仕事をすることを反映するために質問を更新しました。 –

関連する問題