RabbitMQ能否将消息传递给特定客户端?还是必须在客户端进行检查?

3 投票
1 回答
590 浏览
提问于 2025-04-16 14:14

我在我的网络上有很多客户端在运行我的软件。我最近在尝试使用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中,你可以创建很多个队列。为什么不为发送给服务器的消息设置一个队列,同时为每个客户端也设置一个队列呢?

撰写回答