无法连接Spring AMQP / Rabbit MQ:org.springframework.amqp.AmqpConnectException:java.net.ConnectException:连接被拒绝:连接

时间:2015-11-25 11:30:44

标签: rabbitmq spring-amqp

我是Spring AMQP / Rabbit MQ的新手。

在我的项目中使用Spring AMQP / Rabbit MQ。我在运行tomcat后面临以下错误:

  

org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer    - 消费者引发异常,如果连接工厂支持,则处理可以重新启动。

     

异常摘要:org.springframework.amqp.AmqpConnectException:   java.net.ConnectException:连接被拒绝:连接

以下是配置文件:

弹簧amqp.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:rabbit="http://www.springframework.org/schema/rabbit"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/rabbit        http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">

    <rabbit:connection-factory id="connectionFactory" host="127.0.0.1"/>
    <rabbit:admin connection-factory="connectionFactory"/>

    <rabbit:template connection-factory="connectionFactory" id="rabbitTemplate" channel-transacted="true"/>
    <rabbit:queue name="proposalQueue" />

    <rabbit:listener-container connection-factory="connectionFactory">
        <rabbit:listener ref="listener" queue-names="proposalQueue"/>
    </rabbit:listener-container>

    <bean id="rabbitMQTransactionManager" class="org.springframework.amqp.rabbit.transaction.RabbitTransactionManager">
        <property name="connectionFactory" ref="connectionFactory"/>
    </bean>

    <rabbit:direct-exchange name="myExchange">
        <rabbit:bindings>
             <rabbit:binding queue="proposalQueue" key="userMesssage" />
        </rabbit:bindings>
    </rabbit:direct-exchange>
    <bean id="listener" class="com.xxx.xxxx.rabbitmq.QueueServer"/>
 </beans>

QueueServer.java

@Override
    public void onMessage(Message message) {

    Map<String, Object> result = new HashMap<>();       
    MessageProperties props = message.getMessageProperties();
    BasicProperties replyProps = new BasicProperties.Builder().correlationId(new String(message.getMessageProperties().getCorrelationId())).build();
    String inputParameterStr = new String(message.getBody());

        try {
            Map<String,Object> inputParameters  = (Map<String, Object>) Utility.StringToObject(inputParameterStr, "java.util.Map");
            result = service.createQueue(inputParameters);

        } catch (ClassNotFoundException e) {
            logger.error("Error :::: "+getClass()+proposalID, e);
            result.put(Constants.FAILURE, e.getMessage());
        } catch (Exception e) {
            logger.error("Error :::: "+getClass()+proposalID, e);
            result.put(Constants.FAILURE, e.getMessage());
        }
    }

请帮忙解决。

3 个答案:

答案 0 :(得分:11)

  

java.net.ConnectException:连接被拒绝:连接

这仅仅意味着RabbitMQ没有在标准端口(5672)上的localhost127.0.0.1)上运行。

您下载并安装/运行RabbitMQ了吗?它不像ActiveMQ - 它无法在java应用程序中嵌入运行。

答案 1 :(得分:1)

问题的另一个方面是

默认情况下,RabbitMQ只能由本地计算机访问。如果要从其他计算机访问它,通常在&#34; rabbitmq.config&#34;中创建一个条目。文件。该文件的位置因操作系统而异。在Linux中,您可以在以下位置找到:&#34; /etc/rabbitmq/rabbitmq.config &#34;在Windows机器上,您可以在以下位置找到它:&#34; C:\ Program Files \ RabbitMQ Server \ rabbitmq_server-3.6.9 \ etc \ rabbitmq.config &#34;。

您可能无法在上述位置找到此文件。这是一个可选文件,你甚至不用担心它是否丢失。你可以创建自己的。此条目类似于:

[{rabbit, [{tcp_listeners, [{"<IP_OF_MACHINE>", 5672}]},{loopback_users, []}]}].

有了这个,您可以从任何远程计算机访问服务器。

如果在此之后您无法访问服务器,则可以将条目修改为:

[{rabbit, [{tcp_listeners, [{"0.0.0.0", 5672}]},{loopback_users, []}]}].

肯定将服务器连接到任何客户端以及通过管理控制台(如果启用了插件)

答案 2 :(得分:0)

要访问RabbitMQ远程,您需要允许端口4369,25672,5671,5672,15672,61613,61614,1883和8883上的入站TCP流量。

sudo firewall-cmd --zone=public --permanent --add-port=4369/tcp --add-port=25672/tcp --add-port=5671-5672/tcp --add-port=15672/tcp  --add-port=61613-61614/tcp --add-port=1883/tcp --add-port=8883/tcp
sudo firewall-cmd --reload