ActiveMQ Artemis 升级问题:HornetQ to Artemis 2.0

ActiveMQ Artemis upgrade question: HornetQ to 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, on, ActiveMQServerControl.class, false );
...

现在 createQueue 已被弃用。关于我可以使用什么来获得相同行为的任何建议?

您应该使用 non-deprecated 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());

此代码将使用 ANYCAST routing-type 创建同名(即 canonicalName)的核心队列和核心地址。这将提供与 JMS 队列等效的语义。我建议您阅读 the chapter from the documentation 关于 JMS-to-core 映射的内容。这将帮助您更多地了解核心资源需要什么样的配置才能为您的 JMS 客户端获取所需的语义。