Spring Boot Embedded ActiveMQ Artemis with listener



我正在尝试设置几个通过ActiveMQ Artemis进行通信的小应用程序——作为一些新工具的演示。因为这只是一个演示,我试图让最终用户尽可能简单。因此,我选择了Spring Boot现在提供的嵌入式Artemis支持。

我把这个工作得很好。但是,我不知道如何使它也侦听本地端口,以便其他服务也可以连接到它。

实际上我要做的是:

  • 服务
    • 作为服务启动的一部分启动嵌入式Artemis
    • 允许其他服务连接此Artemis服务器<—this Bit Here
    • 在这个嵌入的Artemis上有一个监听队列的消费者
  • 服务B
    • 连接到在服务A中运行的Artemis <——和这一点在这里
    • 具有一个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服务?

欢呼编辑。阿尔忒弥斯不是必不可少的。它只需要是某种异步消息传递平台。如果它可以用ActiveMQ Classic, RabbitMQ或其他任何东西完成,那就好了。

默认情况下,Spring只允许在虚拟机内连接到ActiveMQ Artemis的嵌入式实例。参见artemisemembeddedconfigurationfactory中InVMAcceptorFactory的使用。

要改变这一点,你需要通过自定义ArtemisConfigurationCustomizerbean向Artemis配置添加一个新的Acceptor,例如:

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");
}
}

最新更新