我一直在将一个旧的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 Artemis1.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已经被否决了。有什么建议我可以用什么来代替得到同样的行为吗?
发布于 2020-10-06 17:03:24
您应该使用非推荐的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队列的语义。我建议您阅读关于JMS映射的文件中的一章。这将帮助您更多地了解核心资源所需的配置,以获得JMS客户端所需的语义。
https://stackoverflow.com/questions/64191900
复制相似问题