【发布时间】:2017-09-07 22:15:01
【问题描述】:
使用 Wildfly 10.1.0.Final 和自定义 JMS 消息队列,我可以通过 JNDI 名称 java:/ConnectionFactory 的 in-vm InVmConnectionFactory 成功发送和接收消息。
但是,我无法让带有 JNDI 名称 java:/JmsXA 的新 pooled-connection-factory 工作,消息只会丢失并且不会显示在任何地方(还检查了 wildfly 控制台的运行时 JMS 服务器视图 (Runtime->Subsystems->Messaging - ActiveMQ)。
因为active-mq 池化连接工厂被标记为DefaultJMSConnectionFactory,所以使用JMS 2.0 API 并简单地通过注入JMSContext
@Inject
JmsContext jmsContext;
消息发送将不起作用开箱即用。
这很奇怪,我发现最近使用包含的 Artemis (ActiveMQ) 代理的 wildfly 10 配置没有类似问题。
connection-factory 默认定义为 transactional,但这对我们的场景来说太过分了,所以我把它关掉了:
<pooled-connection-factory name="activemq-ra" entries="java:/JmsXA" connectors="in-vm" transaction="none"/>
我查看了Wildfly messaging configuration guide 和各种涵盖 JMS 1.1/2.0 的在线示例,但目前没有发现任何线索。
示例代码:
@Startup // just for a simple test sending a message right on startup
public class MessageService {
@Inject
@JMSConnectionFactory("java:/JmsXA") // activemq-ra pooled-connection-factory
private JMSContext jmsContext;
@Resource(lookup = JAVA_JMS_PROGRESS_QUEUE)
private Queue progressQueue;
public MessageService() {
}
@PostConstruct
private void init() {
final JMSProducer jmsProducer = jmsContext.createProducer();
jmsProducer.send(progressQueue, "Hello queue"));
}
}
【问题讨论】:
标签: configuration jms activemq wildfly