无法通过 Wildfly 10 中的默认 Artemis/ActiveMQ 向本地 JMS 队列发送消息

问题描述 投票:0回答:1

使用 Wildfly 10.1.0.Final 和自定义 JMS 消息队列,我可以使用 JNDI 名称

InVmConnectionFactory
在虚拟机内
java:/ConnectionFactory
成功发送和接收消息。

但是,我无法让带有 JNDI 名称

pooled-connection-factory
的新
java:/JmsXA
工作,消息只是丢失并且不会显示在任何地方(还检查了 Wildfly 控制台的运行时 JMS 服务器视图 (
Runtime->Subsystems->Messaging - ActiveMQ
)。

因为

active-mq
池连接工厂被标记为
DefaultJMSConnectionFactory
,使用JMS 2.0 API并简单地通过

注入JMSContext
@Inject
JmsContext jmsContext;

开箱即用,无法发送消息

这很奇怪,我在最近使用包含的 Artemis (ActiveMQ) 代理的 Wildfly 10 配置中没有发现类似的问题。

连接工厂默认定义为

transactional,但这对于我们的场景来说太过分了,所以我将其关闭:

<pooled-connection-factory name="activemq-ra" entries="java:/JmsXA" connectors="in-vm" transaction="none"/>

我检查了

Wildfly消息配置指南以及各种涵盖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 wildfly activemq-artemis
1个回答
0
投票
结果是发送消息的方法

仍然需要被声明为非事务性,即使连接工厂已经这样配置:

@PostConstruct @TransactionAttribute(TransactionAttributeType.NEVER) private void init() { ...

现在可以使用了!

© www.soinside.com 2019 - 2024. All rights reserved.