当前位置: 首页 > 知识库问答 >
问题:

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

拓拔耀
2023-03-14

使用Wildfly 10.1.0.final和自定义JMS消息队列,我可以成功地通过in-vmInvmConnectionFactory发送和接收消息,其JNDI名称为java://ConnectionFactory

但是,我无法使用JNDI名称java://jmsxa的新pooled-connection-factory,消息只是丢失,并且不显示在任何地方(还检查了wildfly控制台的运行时JMS服务器视图(runtime->subsystems->messaging-activemq)。

因为active-mq池连接工厂标记为DefaultJMSConnectionFactory,因此使用JMS 2.0 API并通过以下方式注入JMSContext

@Inject
JmsContext jmsContext;

消息发送不能开箱即用。

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

connection-factory在默认情况下被定义为事务性的,但这对于我们的场景来说是过度的,所以我关闭了它:

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

我查看了Wildfly messaging configuration guide和各种涉及JMS1.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"));
    }
}

共有1个答案

苏高峰
2023-03-14

结果表明,发送消息的方法仍然需要声明为非事务性的,即使连接工厂已经配置为非事务性的:

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

现在管用了!

 类似资料:
  • 我有远程ActiveMQ Artemis节点,该节点具有以下安全设置 但是当我发送消息时,我会得到以下错误: 我错过了什么?

  • 我试图向JBoss EAP 7.2中嵌入的远程ActiveMQ Artemis队列发送JMS消息。我在《独立完整》中定义了以下内容。xml: 远程连接器 汇集连接工厂 远程绑定 以下是我的客户程序: 我得到以下例外: 有人能告诉我我做错了什么吗?

  • 我是activeMQ的新手,在将消息从驻留在另一台服务器上的消息生成器推送到activeMQ定义的队列时遇到问题。 我在activeMQ上使用camel routes创建的应用程序中有几个队列。我尝试从另一台服务器上的应用程序对这些队列执行远程JNDI查找。我使用了来自http://activemq.apache.org/jndi-support.html页面的activemq文档片段。 我可以连

  • 我试图将一个Wildfly13实例连接到一个独立的Artemis ActiveMQ,从它生成和使用消息。因此,我遵循了Wildfly13文档和Artemis ActiveMQ文档的相关部分。此外,我尝试使用本教程,并使用JMS2.0Simplified-API对其进行了一些定制。 当我向/Produce发送有效载荷时,不会引发异常。所以我相信JNDI有一个问题。我已经用Wireshark监视了正在

  • 因此,我使用Spring integration链接JMS和ActiveMQ,如下所示:- 如何使其工作,以便发送到此队列并从中接收消息?请帮忙。

  • 我们正在JBoss EAP 7.3中创建ActiveMQ Artemis队列,并从使用Spring Boot开发的远程应用程序调用它们。到目前为止,我们使用协议连接到远程ActiveMQ Artemis,我们使用连接工厂作为。这组配置工作正常。 现在,我们将在创建队列的同一台JBoss服务器上部署Spring Boot应用程序,我们需要在本地而不是远程访问队列。为了在本地访问队列,我们将连接工厂更