1

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)

如何区分“admin”和“write”权限?

4

2 回答 2

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>
于 2012-07-18T13:27:16.283 回答
3

JMS api 不用于管理,仅用于使用现有主题和队列。在 ActiveMQ 中,默认是物理队列/主题在需要时自动创建(有人正在向它发送/从它消费)。

如何在 JMS 实现中创建物理对象是特定于供应商的,您应该检查在 ActiveMQ 中是如何处理的。

这在 AMQ 中是如何处理的

于 2012-07-18T06:29:14.407 回答