У меня есть программное обеспечение, работающее на множестве клиентов в моей сети.Я играл с 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?