You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WildFly 30配置ActiveMQ服务器报错:需配置Elytron安全域

解决WildFly 30中添加ActiveMQ默认服务器失败的问题

问题场景

在WildFly 30中尝试添加ActiveMQ默认服务器以启用MQTT支持时,执行以下CLI命令失败:

[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default:add

报错信息:

{
    "outcome" => "failed",
    "failure-description" => "WFLYCTL0158: Operation handler failed: java.lang.IllegalStateException: WFLYMSGAMQ0107: You must define a elytron security doman when security is enabled.",
    "rolled-back" => true
}

全新安装环境下,standalone.xml和standalone-full.xml均出现该问题,其中standalone-full.xml的messaging-activemq子系统初始配置如下:

<subsystem xmlns="urn:jboss:domain:messaging-activemq:16.0">
    <remote-connector name="artemis" socket-binding="messaging-activemq">
        <param name="use-nio" value="true"/>
        <param name="use-nio-global-worker-pool" value="true"/>
    </remote-connector>
    <pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="artemis" transaction="xa" user="guest" password="guest"/>
</subsystem>

核心需求:在WildFly中实现MQTT over JMS。


解决方案选项

1. 配置Elytron安全域

WildFly默认提供ApplicationDomain安全域,可直接关联到ActiveMQ服务器:

  • 通过CLI命令添加服务器并配置安全域:
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default:add(security={elytron-domain=ApplicationDomain})
  • 手动修改XML配置:
    在messaging-activemq子系统中添加服务器节点并指定安全域:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:16.0">
    <server name="default">
        <security elytron-domain="ApplicationDomain"/>
        <!-- 可按需添加acceptors、address-settings等配置 -->
    </server>
    <remote-connector name="artemis" socket-binding="messaging-activemq">
        <param name="use-nio" value="true"/>
        <param name="use-nio-global-worker-pool" value="true"/>
    </remote-connector>
    <pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="artemis" transaction="xa" user="guest" password="guest"/>
</subsystem>

2. 关闭安全机制(仅本地运行场景)

若应用仅本地运行、无外部访问需求,可直接关闭ActiveMQ的安全校验:

  • 通过CLI命令添加无安全的服务器:
[standalone@localhost:9990 /] /subsystem=messaging-activemq/server=default:add(security-enabled=false)
  • 手动修改XML配置:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:16.0">
    <server name="default" security-enabled="false">
        <!-- 可添加MQTT acceptor配置,示例:
        <acceptor name="mqtt">
            <factory-class>org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
            <param name="port" value="1883"/>
            <param name="protocols" value="MQTT"/>
        </acceptor>
        -->
    </server>
    <remote-connector name="artemis" socket-binding="messaging-activemq">
        <param name="use-nio" value="true"/>
        <param name="use-nio-global-worker-pool" value="true"/>
    </remote-connector>
    <pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="artemis" transaction="xa" user="guest" password="guest"/>
</subsystem>

3. 独立部署ActiveMQ Artemis并配置远程连接

若希望解耦消息服务与应用服务器,可独立部署ActiveMQ Artemis,再在WildFly中配置远程连接:

  1. 下载并启动独立的ActiveMQ Artemis,确保启用MQTT协议(默认端口1883);
  2. 在WildFly的messaging-activemq子系统中配置指向独立Artemis的连接:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:16.0">
    <remote-connector name="remote-artemis" socket-binding="remote-messaging">
        <param name="use-nio" value="true"/>
        <param name="protocols" value="CORE,AMQP,STOMP,MQTT"/>
    </remote-connector>
    <pooled-connection-factory name="remote-activemq-ra" entries="java:/RemoteJmsXA java:jboss/RemoteDefaultJMSConnectionFactory" connectors="remote-artemis" transaction="xa" user="admin" password="admin"/>
</subsystem>

同时在socket-binding-group中添加对应的socket绑定:

<socket-binding name="remote-messaging" port="61616"/>

内容的提问来源于stack exchange,提问作者mr mcwolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:48:29