RabbitMQ能否将消息传递给特定客户端?还是必须在客户端进行检查?
我在我的网络上有很多客户端在运行我的软件。我最近在尝试使用RabbitMQ来实现客户端之间的信息传递。
我的测试代码是这样的:
#!/usr/bin/python2
import pika
import time
connection = pika.AsyncoreConnection(pika.ConnectionParameters(
'localhost'))
channel = connection.channel()
def callback(ch, method, properties, body):
# send messages back on certain events
if body == '5':
channel.basic_publish(exchange='',
routing_key='test',
body='works')
print body
channel.queue_declare(queue='test')
channel.basic_consume(callback, queue='test', no_ack=True)
for i in range(0, 8):
channel.basic_publish(exchange='',
routing_key='test',
body='{}'.format(i))
time.sleep(0.5)
channel.close()
可以把这个想象成一个“聊天程序”。每个客户端需要不断地监听消息。有时候,客户端还需要把消息发送回服务器。
这段代码是可以工作的,但我遇到了一个问题。当下面的代码发送出消息works
后,它又从RabbitMQ的队列中接收到了这条消息。有没有办法让我的客户端,即生产者和消费者,不接收它刚刚发送的消息呢?
我没有看到RabbitMQ里有这个功能,所以我想把消息发送成这样的格式:
body='{"client_id" : 1, "message" : "this is the message"}'
然后我可以解析这个字符串,检查client_id
。这样,客户端就可以忽略所有不属于它的消息。
有没有更好的方法?我应该考虑找RabbitMQ的替代品吗?
1 个回答
1
在RabbitMQ中,你可以创建很多个队列。为什么不为发送给服务器的消息设置一个队列,同时为每个客户端也设置一个队列呢?