是否可以从另一个应用程序(在单独的进程中启动)连接到Spring Boot嵌入式ActiveMQ实例?

gst*_*low 3 java activemq-classic jms spring-jms spring-boot

我已经阅读了一些有关Spring Boot中对jms支持的示例

通常,发送者,接收者和active-mq(实际上可以是任何其他与jms兼容的消息代理)都位于同一应用程序中。

我知道我可以使用独立的主动mq并使用属性 s:

spring.activemq.broker-url=tcp://192.168.1.210:9876
spring.activemq.user=admin
spring.activemq.password=secret
Run Code Online (Sandbox Code Playgroud)

但我想有2个应用程序:

1-发送器(从嵌入式接收器连接到jms并在其中发送消息)
2-接收器(up应用程序和嵌入式activemq)

可行吗?

Gar*_*ell 5

只需BrokerService在您的应用程序中添加一个bean:

@SpringBootApplication
public class So48504265Application {

    public static void main(String[] args) {
        SpringApplication.run(So48504265Application.class, args);
    }

    @Bean
    public BrokerService broker() throws Exception {
        BrokerService broker = new BrokerService();
        broker.addConnector("tcp://localhost:61616);
        return broker;
    }

    @Bean
    public ApplicationRunner runner(JmsTemplate template) {
        return args -> template.convertAndSend("foo", "AMessage");
    }

    @JmsListener(destination = "foo")
    public void listen(String in) {
        System.out.println(in);
    }

}
Run Code Online (Sandbox Code Playgroud)

spring.activemq.broker-url=tcp://localhost:61616
Run Code Online (Sandbox Code Playgroud)

并将其添加到您的pom

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-kahadb-store</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)