web-dev-qa-db-fra.com

Impossible de se connecter Spring AMQP / Rabbit MQ: org.springframework.amqp.AmqpConnectException: Java.net.ConnectException: connexion refusée: connexion

Je suis nouveau sur Spring AMQP/Rabbit MQ.

J'utilise un Spring AMQP/Rabbit MQ dans mon projet. Je fais face à l'erreur suivante après avoir exécuté un Tomcat:

org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer - Exception déclenchée par le consommateur, le traitement peut redémarrer si la fabrique de connexions le prend en charge.

Résumé de l'exception: org.springframework.amqp.AmqpConnectException: Java.net.ConnectException: connexion refusée: connexion

Voici le fichier de configuration:

spring-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());
        }
    }

Veuillez aider à résoudre.

13
AmolKumar

Java.net.ConnectException: connexion refusée: connexion

Cela signifie simplement que RabbitMQ ne fonctionne pas sur localhost (127.0.0.1) sur le port standard (5672).

Avez-vous téléchargé et installé/exécuté RabbitMQ? Ce n'est pas comme ActiveMQ - il ne peut pas être intégré dans une application Java.

13
Gary Russell

Il y a un aspect de plus au problème .

Par défaut, RabbitMQ est accessible uniquement à la machine locale. Si vous souhaitez y accéder depuis une autre machine, vous créez généralement une entrée dans le fichier "rabbitmq.config". L'emplacement de ce fichier varie d'un système d'exploitation à l'autre. Sous Linux, vous pouvez trouver ceci à: "/ etc/rabbitmq/rabbitmq.config" et dans la machine Windows, vous pouvez le trouver à: "C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.9\etc\rabbitmq.config ".

Il est possible que vous ne trouviez pas ce fichier à l'emplacement mentionné. Il s'agit d'un fichier facultatif et vous ne devez pas vous inquiéter s'il manque même. Vous pouvez créer le vôtre. Cette entrée est quelque chose comme:

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

Avec cela, vous pouvez accéder au serveur à partir de n'importe quelle machine distante.

Si après cela, vous obtenez le serveur inaccessible, vous pouvez modifier l'entrée pour:

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

Vous assurément obtiendrez le serveur connecté à n'importe quel client ainsi que via la console de gestion (si le plugin est activé)

1
Ajay Sodhi

Pour accéder à la télécommande RabbitMQ, vous devez autoriser le trafic entrant TCP trafic sur les ports 4369, 25672, 5671, 5672, 15672, 61613, 61614, 1883 et 8883.

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
0
Green Lei