Способен ли RabbitMQ передавать сообщения конкретным клиентам? Или я должен выполнить эти проверки на стороне клиента? - PullRequest
3 голосов
/ 23 марта 2011

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

Вы можете иметь столько же очередей в RabbitMQ. Почему бы не иметь очередь сообщений на сервер, а также очередь для каждого клиента?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...