【问题标题】:I'm facing Connection refused exception when trying to run this code尝试运行此代码时遇到连接拒绝异常
【发布时间】:2019-05-11 16:36:03
【问题描述】:

生产者代码

我开始学习 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)


我需要运行这个程序而不遇到这个连接被拒绝的异常

【问题讨论】:

  • RabbitMQ 服务器是否以默认端口和默认用户guest 运行在localhost 上?
  • 是的,它在本地主机上运行,​​但不确定默认用户 - 来宾。但我没有做任何改变。

标签: java rabbitmq amqp


【解决方案1】:

您必须在 ConnectionFactory 中设置用户名、密码和虚拟主机才能打开连接。 RabbitMQ 期望它尝试建立连接的虚拟主机的值。

默认情况下,RabbitMQ 创建一个guest 用户和一个/ 虚拟主机,并通过创建的虚拟主机将管理员角色授予来宾用户

用户详情:

  1. 用户名:guest
  2. 密码:guest
  3. 虚拟主机:/

您可以在ConnectionFactory 中设置这些值,如下所示:

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

【讨论】:

    猜你喜欢
    • 2016-11-07
    • 2013-07-17
    • 2021-06-24
    • 1970-01-01
    • 2021-12-23
    • 2022-07-12
    • 1970-01-01
    • 2020-07-04
    • 2021-11-16
    相关资源
    最近更新 更多