如何将远程 Spring 启动应用程序连接到 Wildfly 上的 ActiveMQ?

How to connect remote Spring Boot App to ActiveMQ on Wildfly?

我必须将新创建的应用程序连接到 WildFly 应用程序服务器内的 ActiveMQ。我不希望 Spring 应用程序位于 WildFly 服务器内。它将 运行 作为嵌入式 Tomcat 上的独立应用程序。 我在 Spring 应用程序中添加了:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

现在我想像文档中那样连接:

spring.activemq.broker-url=tcp://localhost:9876
spring.activemq.user=admin
spring.activemq.password=admin

我当然知道用户名、密码和url是错误的,但我真的不知道java:jboss/DefaultJMSConnectionFactory的默认值是什么,也没有明确说明.

standalone.xml 中看起来像这样:

<subsystem xmlns="urn:jboss:domain:messaging-activemq:5.0">
    <server name="default">
        <security-setting name="#">
            <role name="guest" send="true" consume="true" create-non-durable-queue="true" delete-non-durable-queue="true"/>
        </security-setting>
        <http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor"/>
        <http-connector name="http-connector-throughput" socket-binding="http" endpoint="http-acceptor-throughput">
            <param name="batch-delay" value="50"/>
        </http-connector>
        <in-vm-connector name="in-vm" server-id="0">
            <param name="buffer-pooling" value="false"/>
        </in-vm-connector>
        <http-acceptor name="http-acceptor" http-listener="default"/>
        <http-acceptor name="http-acceptor-throughput" http-listener="default">
            <param name="batch-delay" value="50"/>
            <param name="direct-deliver" value="false"/>
        </http-acceptor>
        <in-vm-acceptor name="in-vm" server-id="0">
            <param name="buffer-pooling" value="false"/>
        </in-vm-acceptor>

<pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" transaction="xa"/>

我希望我应该添加一个端口公开并启用一些?连接器?通过 tcp 到 activeMQ,以便我可以远程连接。你能给我一些建议吗?

首先要注意的是,WildFly中嵌入的ActiveMQ是ActiveMQArtemis。因此,您应该使用:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-artemis</artifactId>
</dependency>

并且由于您直接连接到 ActiveMQ Artemis 的嵌入式实例而不是在 JDNI 中查找 JMS ConnectionFactory,因此您可以使用已经在端口 [= 上公开的 http-acceptor 14=],例如:

spring.artemis.mode=native
spring.artemis.broker-url=tcp://localhost:8080?httpUpgradeEnabled=true
spring.artemis.user=admin
spring.artemis.password=secret

最后,我建议您使用更新版本的 WildFly。大约 4 年前,第 14 版发布了。最新版本是 26.0.1.