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

WSO2 Micro Integrator连接远程RabbitMQ失败,求解决方法

WSO2 Micro Integrator 无法连接远程RabbitMQ服务器的解决方法

我创建了一个从RabbitMQ Broker获取消息的入站端点,消息会在另一个序列中记录。本地安装的RabbitMQ服务器可以正常连接,但无法连接到远程RabbitMQ主机。

入站端点配置

<?xml version="1.0" encoding="UTF-8"?>
<inboundEndpoint name="QueueInboundEP" onError="Common_Error_Sequence" protocol="rabbitmq" sequence="QueueProcess_Sequence" suspend="false" xmlns="http://ws.apache.org/ns/synapse">
    <parameters>
        <parameter name="sequential">true</parameter>
        <parameter name="coordination">true</parameter>
        <parameter name="rabbitmq.connection.factory">AMQPConnectionFactory</parameter>
        <parameter name="rabbitmq.server.host.name">rabbitmq-ts.sl</parameter>
        <parameter name="rabbitmq.server.port">5672</parameter>
        <parameter name="rabbitmq.server.user.name">guest</parameter>
        <parameter name="rabbitmq.server.password">#4Jkas$56</parameter>
        <parameter name="rabbitmq.queue.name">TestQ</parameter>
        <parameter name="rabbitmq.exchange.name">TestQ</parameter>
        <parameter name="rabbitmq.queue.routing.key">1234</parameter>
        <parameter name="rabbitmq.message.content.type">application/json</parameter>
    </parameters>
</inboundEndpoint>

错误信息

ERROR {RabbitMQConnectionFactory} - [AMQPConnectionFactory] Error creating connection to RabbitMQ Broker. Reattempting to connect. java.net.ConnectException: Connection timed out: connect
        at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method)
        at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107)
        at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
        at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
        at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
        at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
        at java.base/java.net.Socket.connect(Socket.java:609)
        at com.rabbitmq.client.impl.SocketFrameHandlerFactory.create(SocketFrameHandlerFactory.java:60)
        at com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFactory.newConnection(RecoveryAwareAMQConnectionFactory.java:62)
        at com.rabbitmq.client.impl.recovery.AutorecoveringConnection.init(AutorecoveringConnection.java:156)
        at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1110)
        at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1067)
        at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:889)
        at org.apache.axis2.transport.rabbitmq.RabbitMQUtils.createConnection(RabbitMQUtils.java:80)
        at org.wso2.carbon.inbound.endpoint.protocol.rabbitmq.RabbitMQConnectionFactory.createConnection(RabbitMQConnectionFactory.java:216)
        at org.wso2.carbon.inbound.endpoint.protocol.rabbitmq.RabbitMQConsumer.initConsumer(RabbitMQConsumer.java:84)
        at org.wso2.carbon.inbound.endpoint.protocol.rabbitmq.RabbitMQConsumer.execute(RabbitMQConsumer.java:71)
        at org.wso2.carbon.inbound.endpoint.protocol.rabbitmq.RabbitMQTask.taskExecute(RabbitMQTask.java:43)
        at org.wso2.carbon.inbound.endpoint.common.OneTimeTriggerInboundTask.execute(OneTimeTriggerInboundTask.java:47)
        at org.wso2.micro.integrator.mediation.ntask.NTaskAdapter.execute(NTaskAdapter.java:105)
        at org.wso2.micro.integrator.ntask.core.impl.TaskQuartzJobAdapter.execute(TaskQuartzJobAdapter.java:63)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)

解决步骤

  • 检查网络连通性
    在WSO2 MI所在服务器上执行以下命令,验证能否访问远程RabbitMQ主机:

    • 测试域名解析:nslookup rabbitmq-ts.sl 或 dig rabbitmq-ts.sl
    • 测试端口连通性:telnet rabbitmq-ts.sl 5672 或 nc -zv rabbitmq-ts.sl 5672
      如果命令执行失败,说明存在网络防火墙或路由策略限制,需要联系运维团队开放WSO2 MI服务器到远程RabbitMQ主机5672端口的访问权限。
  • 处理RabbitMQ guest用户远程登录限制
    RabbitMQ默认的guest用户仅允许本地登录,远程访问会被拒绝。解决方式二选一:

    1. 修改RabbitMQ配置文件(如rabbitmq.conf),添加loopback_users.guest = false,然后重启RabbitMQ服务;
    2. 在RabbitMQ控制台创建新用户,赋予TestQ队列和交换机的读写权限,然后更新入站端点中的rabbitmq.server.user.name和rabbitmq.server.password参数。
  • 核对入站端点参数

    • 尝试用远程RabbitMQ的IP地址替换域名rabbitmq-ts.sl,排除域名解析问题;
    • 确认远程RabbitMQ服务使用的端口确实是5672,若启用了SSL加密连接,需将端口改为5671,并添加SSL相关配置参数;
    • 测试不含特殊字符的密码,排查密码特殊字符转义问题。
  • 配置SSL加密连接(如果远程RabbitMQ启用)
    若远程RabbitMQ要求AMQP SSL连接,需在入站端点参数中添加以下配置:

    <parameter name="rabbitmq.ssl.enabled">true</parameter>
    <parameter name="rabbitmq.ssl.key.store">/path/to/client-keystore.jks</parameter>
    <parameter name="rabbitmq.ssl.key.store.password">keystore-password</parameter>
    <parameter name="rabbitmq.ssl.trust.store">/path/to/client-truststore.jks</parameter>
    <parameter name="rabbitmq.ssl.trust.store.password">truststore-password</parameter>
    

    同时将rabbitmq.server.port改为5671。

  • 验证RabbitMQ连接工厂配置
    确认WSO2 MI的deployment.toml文件中是否正确配置了AMQPConnectionFactory,示例配置如下:

    [[transport.rabbitmq.connection_factory]]
    name = "AMQPConnectionFactory"
    host = "rabbitmq-ts.sl"
    port = 5672
    username = "your-username"
    password = "your-password"
    virtual_host = "/"
    

内容的提问来源于stack exchange,提问作者vasiharan vasi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:25:22