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”权限?
答案 0 :(得分:4)
JMS规范的含义是createTopic(String)用于为您提供逻辑句柄(javax.jms.Topic,Destination的子类型),您可以随后在其他调用中使用它,例如createProducer(Destination)或createConsumer (目的地)。在ActiveMQ中恰好发生a physical destination will be created at the same time。
如果要确保用户只能发布到已创建的目标,请为该组分配读写权限,而不是admin。显然,假设这些主题已经存在 - 如果它们不存在,那么你将会抛出异常。
您还没有确切地说明您希望如何管理主题创建,但是如果您可以在ActiveMQ配置中将其设置为created at startup,那么在目标块中定义这些主题:< / p>
<broker xmlns="http://activemq.apache.org/schema/core">
<destinations>
<topic physicalName="topic.1" />
<topic physicalName="topic.2" />
</destinations>
</broker>
答案 1 :(得分:2)
JMS api不用于管理,仅用于使用现有主题和队列。在ActiveMQ中,默认情况下,物理队列/主题在需要时会自动创建(有人向其发送/从中进行消费)。
如何在JMS实现中创建物理对象是特定于供应商的,您应该检查在ActiveMQ中如何处理它。