Я пытался настроить свой сервер activemq, чтобы анонимные клиенты могли просто подписаться на темы (они не могли бы создавать и публиковать на темы).Как я могу подписаться на тему activemq только с правами на чтение?
Я установил права соответственно на моей конфигурации брокера:
<plugins>
<simpleAuthenticationPlugin anonymousAccessAllowed="true">
<users>
<authenticationUser username="system" password="manager"
groups="anonymous,admins"/>
</users>
</simpleAuthenticationPlugin>
<!-- Lets configure a destination based authorization mechanism -->
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue=">" read="admins,anonymous" write="admins" admin="admins" />
<authorizationEntry topic=">" read="admins,anonymous" write="admins" admin="admins" />
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
и я использую ниже код для подписки на основе нескольких учебных пособий, которые я нашел в Интернете. Однако этот потребительский код темы и все те, которые я нашел, создают тему activemq для привязки (событие, если тема уже существует), и, как следствие, это будет разрешено только в том случае, если я дам права администратора пользователю. .. Есть ли способ подписаться на эту тему, не создавая ее?
ActiveMQSslConnectionFactory connectionFactory = new ActiveMQSslConnectionFactory(connectionString);
connection = connectionFactory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createTopic(topicName);
MessageConsumer consumer = null;
consumer = session.createConsumer(destination);
consumer.setMessageListener(this);
connection.start();
Что я имею в виду существующие тема является темой, которая была ранее создана уполномоченным клиентом Java (с правами администратора), и в моем случае, с сообщениями публикуются к нему. А затем, подписчик, чтобы подключиться к той теме, которая уже существует и подписаться на нее. Проблема в том, что я мог бы только подписаться на эту существующую тему на Java, сначала позвонив по адресу 'destination = session.createTopic (topicName);' и для того, чтобы это сделать, я должен предоставить права администратора этому пользователю, в то время как Id, только что прочитали права – Thomas
В действительности метод createTopic не создает никаких связей с Брокером, поэтому вы можете называть его кодом клиента, даже если он имеет доступ только для чтения. Вещи потерпели бы неудачу только тогда, когда клиент затем отправился подписываться или выдавать в пункт назначения, которого не существует, и в этом случае будет выбрано исключение. Вы должны думать о createTopic и createQueue только как о местных методах фабрики для возвращаемых объектов. –