ActiveMQ Artemis升级问题:HornetQ到Artemis 2.0

问题描述

我一直在将旧的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客户端所需的语义。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...