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

问题描述:

使用Wildfly 10.1.0.Final和定制的JMS消息队列,我可以通过in-vm InVmConnectionFactory成功发送和接收消息,JNDI名称为java:/ConnectionFactory无法通过Wildfly中默认的Artemis/ActiveMQ向本地JMS队列发送消息10

但是,我不能得到新的pooled-connection-factory使用JNDI名称java:/JmsXA工作,消息只是迷路,不要在任何地方显示出来(也检查了wildfly控制台的运行时JMS服务器视图(Runtime->Subsystems->Messaging - ActiveMQ)。

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

@Inject 
JmsContext jmsContext; 

消息发送将不起作用开箱。

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

连接工厂被定义为事务默认情况下,但是这是矫枉过正我们的场景,所以我切换它关闭:

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

我检查覆盖JMS 1.1 /的Wildfly messaging configuration guide和各种网上的例子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")); 
    } 
} 

原来发往何处消息仍然需要声明为非事务性,即使当连接的工厂已被配置为这样的方法:

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

现在工作!