2012-05-14 21 views
0

Я работаю над приложением, и мне просто интересно, возможно ли, чтобы RabbitMQ позволял всем клиентам вводить сообщения в определенную очередь и только прошедшие проверку подлинности пользователи потребляли сообщения из этой очереди? Кажется, я ничего не могу найти об этом:/RabbitMQ - безопасность/аутентификация

В основном моя модель такова: Клиенты все подключаются к одной очереди и нажимают на нее свои сообщения. Также каждый клиент должен зарегистрировать свою собственную очередь, где он получает сообщения (каждый клиент имеет уникальную очередь).

В основном клиенты будут отправлять сообщения в одну очередь, и ТОЛЬКО мое серверное приложение должно быть в состоянии читать из него, обрабатывать данные и отправлять ответ в конкретную очередь пользователей (которые должны быть прочитаны ТОЛЬКО этим пользователем и ТОЛЬКО сервером shoud опубликовать на нем).

Я думаю, что это возможно? Может кто-то направить меня в правильном направлении, где найти более подробную информацию об этих вещей/примеры/учебники

ответ

1

Таким образом, это не представляется возможным AFAIK из коробки, но у вас есть 2 варианта:

  1. Вы можете написать собственный плагин для rabbitmq, если вы знакомы с erlang (это не требует дополнительных знаний erlang - просто основы)
  2. Вы можете создать 2 виртуальных хоста и обменять на каждом хосте (vhost A для чтения vhost B для записи). В виртуальном хосте B создайте обмен и привяжите его к определенной очереди с помощью ключа маршрутизации. В виртуальном хосте A создайте федеративный обмен [1]. Краткая информация: федеративный обмен позволяет осуществлять обмен карточками на восходящий обмен, это означает, что сопоставленный обмен будет получать все сообщения от восходящего обмена. Поэтому сделайте обмен E1 в виртуальном хосте A и сопоставьте его для обмена E2 в виртуальном хосте B. Для каждого виртуального хоста вы можете создавать разных пользователей.

[1]: http://www.rabbitmq.com/federation.html - это руководство по плану федерации, содержащему готовые примеры.

+0

Итак, нет более простого способа предотвратить несанкционированный доступ? Надеюсь, вы видите мою озабоченность здесь, так как я хочу заверить, что мои небольшие рабочие узлы, получающие сообщения из очереди и обрабатывающие их, получат сообщения, если кто-то еще установит способ подключения к этой же очереди, я бы потерял некоторые из сообщения, которые были бы получены от них. И очередь должна иметь возможность получать сообщения от всех, так как клиентское приложение будет размещаться на пользовательских устройствах. – user962563

+2

Жаль, что есть более простой способ: Если вы используете плагин управления (http://www.rabbitmq.com/management.html), вы можете перейти на вкладку Виртуальные хосты и добавить пользователей, есть поля «write regexp» и «read regexp» вы можете передать здесь имена очередей. Или вы можете использовать команду set_permissions из rabbitmqctl. – whiter4bbit

+0

Спасибо :) Похоже, это именно то, что мне нужно. – user962563

Смежные вопросы