尝试运行此代码时,我面临“连接被拒绝”异常

时间:2019-05-11 16:36:04

标签: java rabbitmq amqp

生产者代码

我开始学习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 :(得分:0)

您必须在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("/")