我如何才能订阅具有“刚读”权限的activemq主题?

我如何才能订阅具有“刚读”权限的activemq主题?,activemq,Activemq,我一直在尝试配置activemq服务器,以便匿名客户端可以订阅主题(它们将无法创建或发布主题) 我已对我的代理配置设置了相应的权限: 我一直在使用下面的代码订阅基于我在网上找到的一些教程。但是,这个主题使用者代码,以及我找到的所有主题,创建了一个要绑定到的activemq主题(如果该主题已经存在,则为事件),因此,只有在我向用户授予管理员权限时,它才会被授权有没有办法订阅主题而不创建它? ActiveMQSslConnectionFactory connectionFactory=新的Act

我一直在尝试配置activemq服务器,以便匿名客户端可以订阅主题(它们将无法创建或发布主题)

我已对我的代理配置设置了相应的权限:


我一直在使用下面的代码订阅基于我在网上找到的一些教程。但是,这个主题使用者代码,以及我找到的所有主题,创建了一个要绑定到的activemq主题(如果该主题已经存在,则为事件),因此,只有在我向用户授予管理员权限时,它才会被授权有没有办法订阅主题而不创建它?

ActiveMQSslConnectionFactory connectionFactory=新的ActiveMQSslConnectionFactory(connectionString);
connection=connectionFactory.createConnection();
会话=connection.createSession(false,session.AUTO_-ACKNOWLEDGE);
destination=session.createTopic(topicName);
MessageConsumer=null;
consumer=session.createConsumer(目的地);
consumer.setMessageListener(this);
connection.start();

必须有人创建主题才能阅读。创建需求的替代方法是通过
块中的
块创建主题:

<destinations>
    <topic physicalName="someTopic"/>
</destinations>

当您说“创建一个要绑定到的activemq主题(如果该主题已经存在),您可能会看到它是按需创建的(这是正常的)。您应该将以下内容添加到授权配置中:

<authorizationEntry topic="ActiveMQ.Advisory.>" 
    read="admins" 
    write="admins,anonymous" 
    admin="admins,anonymous" />


我所说的“现有主题”是指以前由授权的java客户端(具有管理员权限)创建的主题,在我的情况下,是指向其发布消息的主题。然后,一个订阅者连接到已经存在的主题并订阅它。问题是,我只能通过首先调用
destination=session.createTopic(topicName)订阅Java上现有的主题
为了能够做到这一点,我必须授予该用户管理员权限,同时我希望他具有读取权限。实际上,createTopic方法不会与代理产生任何通信,因此您可以从客户端代码中自由调用它,即使它只有读取权限。只有当客户端继续订阅或生成一个不存在的目的地时,事情才会失败,在这种情况下会抛出异常。您应该仅将createTopic和createQueue视为它们返回的对象的本地工厂方法。