我正在进行从EAP 6.4到7.4的JBoss迁移。发现的一个问题是用ActiveMQ Artemis版本2.16.0.redhat-00022替换HornetQ。我的问题具体是创建的队列的JNDI绑定。
在HornetQ上,使用以下代码创建队列:
import org.hornetq.api.jms.management.JMSServerControl;
...
...
JMSServerControl srv_c = getJMSServerControl(); // this method gets the object from MBServer
srv.createQueue("MyQName", "queue/MyQName", null, false);
字符串
在代码的另一部分,我可以通过JNDI名称搜索队列:
import javax.jms.Queue;
...
...
ctx = new InitialContext();
Queue ourQueue = (Queue) ctx.lookup("queue/MyQName");
if(ourQueue == null) {
log.error("Queue not found!");
} else {
log.info("Queue found");
}
型
为了在Artemis上寻找一个等价的,我尝试使用ActiveMQServerControl并指定队列创建的配置。
import org.apache.activemq.artemis.api.core.management.ActiveMQServerControl;
...
...
ActiveMQServerControl srv_c = getJMSServerControl(); // also found via MBServer
String queueConfig = "{" +
"\"name\": \"MyQName\"," +
"\"address\": \"jms.queue.MyQName\"," +
"\"durable\": false," +
"\"entries\": [\"java:/queue/MyQName\"]" +
"}";
srv_c.createQueue(queueConfig);
型
然而,当我试图通过JNDI查找队列时,它总是返回对象不存在。在整个系统中,队列是通过JNDI检索的,这就是为什么我需要这样做。
1条答案
按热度按时间eqzww0vc1#
您传递给
ActiveMQServerControl.createQueue
的JSON包含无效的“条目”。有关哪些属性有效的详细信息,请参阅QueueConfiguration
的JavaDoc。也就是说,您几乎肯定应该使用WildFly管理客户端之一,而不是尝试直接使用ActiveMQ Artemis的嵌入式示例。(包括添加队列)。此外,这些变化将反映在模型中,这提供了自动更新磁盘上的XML配置文件(例如
standalone-full.xml
)等好处。重要的是要注意,在这种情况下,WildFly本身管理JNDI条目,而不是ActiveMQ Artemis。这就是为什么当您在WildFly中查找JMS管理对象时,您使用
org.wildfly.naming.client.WildFlyInitialContextFactory
而不是ActiveMQ Artemis中的类。