问题描述
我一直在将旧的hornetq项目升级到Artemis,而JMSServerControl
遇到了一些问题。我的原始代码如下所示。
final ObjectName on = ObjectNameBuilder.DEFAULT.getJMSServerObjectName();
final JMSServerControl sControl = jmxConnectorFactory.newProxyInstance( mbsc,on,JMSServerControl.class,false );
final boolean success = sControl.createQueue( canonicalName,jndiBinding );
我实际上首先升级了ActiveMQ Artemis 1.3,该代码仍然可以使用。我计划最终使用2.15.0,但是我不确定其他什么东西可能会被弃用,因此我跳到了2.0。当我升级到2.0时,上面的代码中断了,因此我正在使用以下代码。
final ObjectName on = ObjectNameBuilder.DEFAULT.getActiveMQServerObjectName();
final ActiveMQServerControl sControl = jmxConnectorFactory.newProxyInstance( mbsc,ActiveMQServerControl.class,false );
...
现在createQueue
已过时。关于我可以用来获得相同行为的建议吗?
解决方法
您应该使用一种不推荐使用的createQueue
方法,即:
-
org.apache.activemq.artemis.core.management.impl.ActiveMQServerControlImpl#createQueue(java.lang.String)
-
org.apache.activemq.artemis.core.management.impl.ActiveMQServerControlImpl#createQueue(java.lang.String,boolean)
例如:
final ObjectName on = ObjectNameBuilder.DEFAULT.getActiveMQServerObjectName();
final ActiveMQServerControl sControl = jmxConnectorFactory.newProxyInstance( mbsc,on,ActiveMQServerControl.class,false );
sControl.createQueue(new QueueConfiguration(canonicalName).setRoutingType(RoutingType.ANYCAST).toJSON());
此代码将使用canonicalName
路由类型创建一个具有相同名称(即ANYCAST
)的核心队列和核心地址。这将提供与JMS队列等效的语义。我建议您阅读the chapter from the documentation有关JMS到核心的映射。这将帮助您更多地了解核心资源所需的配置,以获取JMS客户端所需的语义。