首页 > 解决方案 > 如何将消息从 Spring Boot 推送和消费到独立的 JBoss Wildfly 10 Artemis Activemq?

问题描述

我编写了一个 Spring Boot 应用程序,旨在推送和使用来自 JBoss Wildfly 10 ActiveMQ Artemis 的消息(注意:不是 Apache ActiveMQ 5.x)。我正在通过 Spring Tool Suite 运行此代码。

我还在我的本地系统(在 8080 端口上)上设置了 JBoss Wildfly 10,并在配置文件中运行了相同的standalone-full.xml配置,以便创建TestQ在 Wildfly 的消息传递子系统中调用的队列。

接下来,我JMSTemplate在 Spring Boot 代码中用于推送和使用上述队列中的消息,其中包含以下内容application.properties

spring.activemq.username=admin
spring.activemq.username=admin
spring.activemq.broker-url=http://localhost:8080

但是,我Could not send message在运行代码时遇到错误。

您能否建议需要进行哪些更改?

我的基本目标是使用 Spring Boot 从这个外部队列推送和消费消息。

我在网上尝试了替代方案,但我得到的每个示例都是针对 Apache ActiveMQ 而不是 ActiveMQ Artemis 嵌入到 JBoss Wildfly 中,这是必需的。

我有以下2个课程:

1.

@SpringBootApplication
@EnableJms
public class App  {

    @Bean
    public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory,
                                                    DefaultJmsListenerContainerFactoryConfigurer configurer) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        configurer.configure(factory, connectionFactory);
        return factory;
    }

    public static void main(String[] args) {
        // Launch the application
        ConfigurableApplicationContext context = SpringApplication.run(App.class, args);

        JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);

        System.out.println("Sending a JMS message.");
        jmsTemplate.convertAndSend("sampleQueue", "Hello world!");
    } 
}

2.

@Component
public class ReceiveMessage {

    @JmsListener(destination = "sampleQueue")
    public void receiveMessage(String msg) {
        System.out.println("Received :" + msg);
    }
}

标签: spring-bootjboss-eap-7activemq-artemis

解决方案


在我看来,其中的属性application.properties是针对 ActiveMQ 5.x 客户端而不是 ActiveMQ Artemis 客户端的。正如Spring Boot 文档所说:

Artemis 配置由spring.artemis.*.

此外,您应该将 Wildfly 上的端口直接暴露给 ActiveMQ Artemis 代理,而不是使用合并端口8080,因为这需要在 Artemis 客户端的 URL 上httpUpgradeEnabled设置,true并且由于某种原因无法使用 Spring Boot 集成来做到这一点.


推荐阅读