我已经编写了一个Spring Boot应用程序,旨在推送和使用来自JBoss Wildfly 10 ActiveMQ Artemis的消息(注意:不是Apache ActiveMQ 5.x)。我正在通过Spring Tool Suite运行此代码。
我还在本地系统上(在8080端口上)设置了JBoss Wildfly 10,并在standalone-full.xml
配置文件中运行了该程序,以便在Wildfly的消息子系统中创建名为TestQ
的队列。
接下来,我在Spring Boot代码中使用JMSTemplate
来推送和使用上述队列中的消息,并在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的,而不是嵌入到JBoss Wildfly中的ActiveMQ Artemis。
我有以下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);
}
}
答案 0 :(得分:1)
在我看来,application.properties
中的属性是针对ActiveMQ 5.x客户端而非ActiveMQ Artemis客户端的。正如Spring Boot documentation所说:
Artemis配置由
spring.artemis.*
中的外部配置属性控制。
此外,您应该将Wildfly上的端口直接公开给ActiveMQ Artemis代理,而不要使用合并端口8080
,因为这需要在Artemis上将httpUpgradeEnabled
设置为true
客户的URL,由于某种原因,无法使用Spring Boot集成来做到这一点。