Spring 使用侦听器启动嵌入式 ActiveMQ Artemis
Spring Boot Embedded ActiveMQ Artemis with listener
我正在尝试设置几个通过 ActiveMQ Artemis 进行通信的微型应用程序(作为一些新工具的演示)。因为它只是一个演示,所以我试图让最终用户尽可能简单。因此,我走的是 Spring Boot 现在拥有的嵌入式 Artemis 支持路线。
我的这个工作很好。但是,我不知道如何让它也监听本地端口,以便其他服务也可以连接到它。
基本上我想做的是:
- 服务A
- 作为服务启动的一部分启动嵌入式 Artemis
- 允许其他服务连接此 Artemis 服务器 <-- 此处为位
- 有消费者在这个嵌入式 Artemis 上收听队列
- 服务B
- 连接到服务 A 中的 Artemis 运行ning <-- 此处为
- 有一个 HTTP 端点可以将消息生成到该 Artemis 服务的队列中
我已经标记了我(还)不知道如何去做的部分。
作为参考,我的application.properties
目前是这样的:
server.port=8082
spring.artemis.mode=EMBEDDED
spring.artemis.host=localhost
spring.artemis.port=61616
spring.artemis.embedded.enabled=true
spring.jms.template.default-destination=my-queue-1
logging.level.org.apache.activemq.audit.base=DEBUG
logging.level.org.apache.activemq.audit.message=DEBUG
有可能使这项工作吗?还是我需要让人们 运行 改用外部 Artemis 服务?
干杯
编辑。阿耳emi弥斯不是必需的。它只需要是一些异步消息传递平台。如果它可以用 ActiveMQ Classic、RabbitMQ 或其他任何东西来完成,那很好。
默认情况下 Spring 将只允许 in-vm 连接到 ActiveMQ Artemis 的嵌入式实例。参见 ArtemisEmbeddedConfigurationFactory.
中 InVMAcceptorFactory
的用法
要更改此设置,您需要通过自定义 ArtemisConfigurationCustomizer
bean 添加一个新的 Acceptor 到您的 Artemis 配置,例如:
import org.springframework.boot.autoconfigure.jms.artemis.ArtemisConfigurationCustomizer;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ArtemisConfig implements ArtemisConfigurationCustomizer {
@Override
public void customize(org.apache.activemq.artemis.core.config.Configuration configuration) {
configuration.addAcceptorConfiguration("remote", "tcp://0.0.0.0:61616");
}
}
我正在尝试设置几个通过 ActiveMQ Artemis 进行通信的微型应用程序(作为一些新工具的演示)。因为它只是一个演示,所以我试图让最终用户尽可能简单。因此,我走的是 Spring Boot 现在拥有的嵌入式 Artemis 支持路线。
我的这个工作很好。但是,我不知道如何让它也监听本地端口,以便其他服务也可以连接到它。
基本上我想做的是:
- 服务A
- 作为服务启动的一部分启动嵌入式 Artemis
- 允许其他服务连接此 Artemis 服务器 <-- 此处为位
- 有消费者在这个嵌入式 Artemis 上收听队列
- 服务B
- 连接到服务 A 中的 Artemis 运行ning <-- 此处为
- 有一个 HTTP 端点可以将消息生成到该 Artemis 服务的队列中
我已经标记了我(还)不知道如何去做的部分。
作为参考,我的application.properties
目前是这样的:
server.port=8082
spring.artemis.mode=EMBEDDED
spring.artemis.host=localhost
spring.artemis.port=61616
spring.artemis.embedded.enabled=true
spring.jms.template.default-destination=my-queue-1
logging.level.org.apache.activemq.audit.base=DEBUG
logging.level.org.apache.activemq.audit.message=DEBUG
有可能使这项工作吗?还是我需要让人们 运行 改用外部 Artemis 服务?
干杯
编辑。阿耳emi弥斯不是必需的。它只需要是一些异步消息传递平台。如果它可以用 ActiveMQ Classic、RabbitMQ 或其他任何东西来完成,那很好。
默认情况下 Spring 将只允许 in-vm 连接到 ActiveMQ Artemis 的嵌入式实例。参见 ArtemisEmbeddedConfigurationFactory.
中InVMAcceptorFactory
的用法
要更改此设置,您需要通过自定义 ArtemisConfigurationCustomizer
bean 添加一个新的 Acceptor 到您的 Artemis 配置,例如:
import org.springframework.boot.autoconfigure.jms.artemis.ArtemisConfigurationCustomizer;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ArtemisConfig implements ArtemisConfigurationCustomizer {
@Override
public void customize(org.apache.activemq.artemis.core.config.Configuration configuration) {
configuration.addAcceptorConfiguration("remote", "tcp://0.0.0.0:61616");
}
}