ActiveMQ 中的主题创建

Cac*_*ing 1 java activemq-classic authority

http://docs.oracle.com/javaee/1.4/api/javax/jms/Session.html#createTopic(java.lang.String ) 此 API 表示session.createTopic(topicname)不适用于创建物理主题。这是什么意思?

如果我希望一组具有“admin”权限的用户负责创建主题,另一组具有“write”权限的用户负责向该主题发布消息,我该如何实现呢?看来后一组也必须有“admin”的权限,因为他们必须使用这个方法: session.createTopic(topicname)

如何区分“管理”和“写入”权限?

Jak*_*rab 5

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>
Run Code Online (Sandbox Code Playgroud)