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

从ActiveMQ Classic迁移至Artemis:对接外部WebSphere队列求助

解决Artemis对接WebSphere MQ的配置问题

首先明确核心问题:你把Spring的Bean配置放到Artemis的broker.xml里是没用的——broker.xml是Artemis的原生配置文件,根本不解析Spring的<bean>标签和Camel上下文,所以这些配置完全不会生效。

下面给两种可行的解决方案,根据你的需求选择:

方案一:保留Spring + Camel架构,适配Artemis

原来的Camel路由逻辑可以完全保留,只是把ActiveMQ Classic的连接组件换成Artemis的,整个配置还是放在Spring配置文件(比如applicationContext.xml)里,让Spring来加载,Artemis作为独立的消息 broker 运行。

修改后的Spring配置示例

<!-- Artemis 本地连接配置 -->
<bean id="artemisConnectionFactory" class="org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory">
    <!-- 替换成你的Artemis连接地址,默认tcp端口是61616 -->
    <property name="brokerURL" value="tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1" />
</bean>

<bean id="artemisJmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
    <property name="connectionFactory" ref="artemisConnectionFactory" />
    <property name="concurrentConsumers" value="1" />
</bean>

<!-- 把原ActiveMQComponent换成通用JmsComponent,兼容Artemis -->
<bean id="activemq" class="org.apache.camel.component.jms.JmsComponent">
    <property name="configuration" ref="artemisJmsConfig" />
</bean>

<!-- 外部WebSphere MQ连接配置和原来完全一致,不用改 -->
<bean id="usToThemConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory">
    <property name="transportType" value="1" />
    <property name="hostName" value="external.server.ip.address" />
    <property name="port" value="1515" />
    <property name="queueManager" value="DMZP" />
    <property name="channel" value="RECL.SVRCONN" />
</bean>

<bean id="usToThemConfig" class="org.apache.camel.component.jms.JmsConfiguration">
    <property name="connectionFactory" ref="usToThemConnectionFactory" />
    <property name="concurrentConsumers" value="1" />
</bean>

<bean id="websphereOut" class="org.apache.camel.component.jms.JmsComponent">
    <property name="configuration" ref="usToThemConfig" />
</bean>

<!-- 补充原配置里缺失的websphereIn组件(和websphereOut配置一致,按需调整) -->
<bean id="websphereInConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory">
    <property name="transportType" value="1" />
    <property name="hostName" value="external.server.ip.address" />
    <property name="port" value="1515" />
    <property name="queueManager" value="DMZP" />
    <property name="channel" value="RECL.SVRCONN" />
</bean>

<bean id="websphereInConfig" class="org.apache.camel.component.jms.JmsConfiguration">
    <property name="connectionFactory" ref="websphereInConnectionFactory" />
    <property name="concurrentConsumers" value="1" />
</bean>

<bean id="websphereIn" class="org.apache.camel.component.jms.JmsComponent">
    <property name="configuration" ref="websphereInConfig" />
</bean>

<!-- Camel路由逻辑完全保留,不用改 -->
<camelContext id="wmqToAmqContext" xmlns="http://camel.apache.org/schema/spring">
    <!-- 从WebSphere MQ拉取消息到Artemis -->
    <route id="transactionReceiptBridge">
        <from uri="websphereIn:queue:THEM.TRANS.RECEIPT.REXI.QL?mapJmsMessage=true" />
        <convertBodyTo type="java.lang.String" />
        <to uri="activemq:queue:US.TRANS.RECEIPT.REXI" />
    </route>                
    <!-- 从Artemis推送消息到WebSphere MQ -->
    <route id="returnBridge">
        <from uri="activemq:queue:US.CORE.RETURN.PTRO" />
        <to uri="websphereOut:queue:THEM.CORE.RETURN.PTRO?mapJmsMessage=true" />
    </route>
</camelContext>

依赖说明

确保你的项目依赖里包含这些:

<!-- Artemis JMS客户端,版本和你的Artemis服务器一致 -->
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>artemis-jms-client</artifactId>
    <version>2.x.x</version>
</dependency>
<!-- Camel JMS组件 -->
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-jms</artifactId>
    <version>3.x.x</version>
</dependency>
<!-- WebSphere MQ客户端 -->
<dependency>
    <groupId>com.ibm.mq</groupId>
    <artifactId>com.ibm.mq.allclient</artifactId>
    <version>9.x.x</version>
</dependency>

方案二:用Artemis原生桥接替代Camel

如果只是简单的队列间消息转发,不需要复杂的Camel路由逻辑,可以直接用Artemis自带的桥接功能,完全在broker.xml里配置,不用依赖Spring和Camel。

配置步骤

  1. 把WebSphere MQ的客户端jar包(比如com.ibm.mq.allclient.jar)放到Artemis的lib目录下,让Artemis能加载MQ的驱动类。
  2. 在broker.xml的<core>节点里添加以下配置:
<core xmlns="urn:activemq:core">
    <!-- 你的原有配置... -->

    <!-- 定义外部WebSphere MQ的连接参数 -->
    <external-connectors>
        <external-connector name="wmq-connector">
            <factory-class>com.ibm.mq.jms.MQConnectionFactory</factory-class>
            <param key="transportType" value="1" />
            <param key="hostName" value="external.server.ip.address" />
            <param key="port" value="1515" />
            <param key="queueManager" value="DMZP" />
            <param key="channel" value="RECL.SVRCONN" />
        </external-connector>
    </external-connectors>

    <!-- 配置消息桥接 -->
    <bridges>
        <!-- 入站桥接:从WebSphere MQ拉取到Artemis本地队列 -->
        <bridge name="mq-to-artemis-receipt-bridge">
            <queue-name>US.TRANS.RECEIPT.REXI</queue-name> <!-- Artemis本地队列 -->
            <forwarding-address>THEM.TRANS.RECEIPT.REXI.QL</forwarding-address> <!-- MQ队列 -->
            <external-connector-ref>wmq-connector</external-connector-ref>
            <concurrent-consumers>1</concurrent-consumers>
            <transformer-class-name>org.apache.activemq.artemis.core.server.transformer.JMSMessageTransformer</transformer-class-name>
        </bridge>

        <!-- 出站桥接:从Artemis本地队列推送到WebSphere MQ -->
        <bridge name="artemis-to-mq-return-bridge">
            <queue-name>US.CORE.RETURN.PTRO</queue-name> <!-- Artemis本地队列 -->
            <forwarding-address>THEM.CORE.RETURN.PTRO</forwarding-address> <!-- MQ队列 -->
            <external-connector-ref>wmq-connector</external-connector-ref>
            <concurrent-consumers>1</concurrent-consumers>
            <transformer-class-name>org.apache.activemq.artemis.core.server.transformer.JMSMessageTransformer</transformer-class-name>
        </bridge>
    </bridges>
</core>

说明

  • external-connector相当于定义了连接到WebSphere MQ的连接工厂。
  • 每个bridge对应一个单向的消息转发通道,<queue-name>是Artemis的本地队列,<forwarding-address>是外部MQ的队列名。
  • 这种方式更轻量,不需要额外的Spring和Camel依赖,适合简单的消息同步场景。

内容的提问来源于stack exchange,提问作者ugh dad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:44:56