При попытке запустить этот код я столкнулся с исключением из соединения - PullRequest
0 голосов
/ 11 мая 2019

Код производителя

Я начинаю изучать учебники RabbitMQ.Это мой первый раз, когда я пытаюсь отправить сообщение.

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Send {
      private final static String QUEUE_NAME = "hello";
      public static void main(String[] argv) throws Exception {
          ConnectionFactory factory = new ConnectionFactory();
          factory.setHost("localhost");
          try (Connection connection = factory.newConnection();
               Channel channel = connection.createChannel()) {
              channel.queueDeclare(QUEUE_NAME, false, false, false, null);
              String message = "Hello World!";
              channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
              System.out.println(" [x] Sent '" + message + "'");
          }
      }
    } 

Код потребителя

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Recv {
    private final static String QUEUE_NAME = "hello";

      public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

      }
}


Я сталкиваюсь с этим исключением, пытаясь запустить как производителя, так и потребителя

Exception in thread "main" java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    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:1104)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1063)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1021)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1180)
    at producer.Send.main(Send.java:12)


Мне нужно запустить эту программу, не сталкиваясь с этим отказом в соединении исключение

1 Ответ

0 голосов
/ 14 мая 2019

Вы должны установить имя пользователя, пароль и виртуальный хост в ConnectionFactory, чтобы открыть соединение. RabbitMQ ожидает значение для виртуального хоста, с которым он пытается установить соединение.

По умолчанию RabbitMQ создает пользователя guest и виртуальный хост / и предоставляет роль администратора гостевому пользователю над созданным виртуальным хостом

Данные пользователя:

  1. Имя пользователя: guest
  2. Пароль: guest
  3. VirtualHost: /

Вы можете установить эти значения в ConnectionFactory следующим образом:

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost")
factory.setUser("guest")
factory.setPassword("guest")
factory.setVirtualHost("/")
...