RabbitMQのとPythonとストンプ放送
質問
イムのRabbitMQへの病的使用してから、システムを移動しようとしているが、私は同じブロードキャスト動作は、デフォルトで提供病的なように見えることはできません。放送によって私は、メッセージがキューに追加されたときに、すべての消費者がそれをrecievesことを意味します。ウサギでは、メッセージが追加されたとき、彼らはすべてのリスナーにラウンドロビンスタイルを配布されます。
誰がどのようにメッセージ配信の同じ種類を達成するために私に言うことはできますか?
以下で使用ストンプ・ライブラリは、 http://code.google.com/p/stomppy/ですの
本当に役立つだろう、ストンプを持つとしてもamqplib例を行うことができるという失敗ます。
現在の私のコードは次のようになります。
コンシューマ
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()
解決 2
私は最終的にそれぞれの「recievingグループ」との交換を作成することにより、それを行う方法を考え出し、イム本番でそれをしようとする前に、この多額のテストを把握したい場合がありますので、交換の何千も行いますどれだけウサギわかりません
送信コードで
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()
他のヒント
どうやらあなたはSTOMPと直接に行うことはできません。すべて示しメーリングリストのスレッドではありあなたが(それはいくつかの低レベルAMPQのものを必要とする)の放送は、ストンプでの作業を取得してジャンプする必要がフープます。
所属していません StackOverflow