Создание темы в ActiveMQ

http://docs.oracle.com/javaee/1.4/api/javax/jms/Session.html) Этот API говорит, что session.createTopic(topicname) не для создания физической темы. Что это значит?

Если я хочу, чтобы одна группа пользователей с полномочиями "admin" отвечала за создание тем, а другая группа пользователей с полномочиями "write" отвечает за публикацию сообщений в этой теме, как я могу это реализовать? Кажется, что последняя группа также должна иметь полномочия "admin", потому что они должны использовать этот метод: session.createTopic(topicname),

Как разделить полномочия "admin" и "write"?

2 ответа

Решение

API JMS не для администрирования, а только для использования существующих тем и очередей. В ActiveMQ по умолчанию физическая очередь / тема создается автоматически, когда это необходимо (кто-то отправляет в нее / потребляет из нее).

Способ создания физических объектов в реализации JMS зависит от поставщика, и вы должны проверить, как это обрабатывается в ActiveMQ.

Как это лечится в AMQ

Спецификация JMS означает, что createTopic(String) используется для предоставления вам логического дескриптора (javax.jms.Topic, подтипа Destination), который впоследствии можно использовать в других вызовах, таких как createProducer(Destination) или createConsumer(Destination)., В ActiveMQ случается так, что одновременно создается физическое назначение.

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

Вы не сказали точно, как вы хотели бы управлять созданием тем, но если вы согласны с этим в конфигурации ActiveMQ, чтобы они создавались при запуске, определите эти темы в блоке мест назначения:

<broker xmlns="http://activemq.apache.org/schema/core">
  <destinations>
    <topic physicalName="topic.1" />
    <topic physicalName="topic.2" />
  </destinations>
</broker>
Другие вопросы по тегам