1. 程式人生 > >使用guest使用者遠端連線RabbitMQ使用者名稱密碼錯誤

使用guest使用者遠端連線RabbitMQ使用者名稱密碼錯誤

使用的是預設使用者guest,密碼也是guest

程式碼:

package com.adtec.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("192.168.71.111"); factory.setUsername("guest"); factory.setPassword("guest"); factory.setPort(5672); 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("UTF-8")); System.out.println(" [x] Sent '" + message + "'"); channel.close(); connection.close(); } }

錯誤資訊:

[AMQP Connection 192.168.71.111:5672] WARN com.rabbitmq.client.impl.ForgivingExceptionHandler
- An unexpected connection driver error occured (Exception message: Connection reset) Exception in thread "main" com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile. at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:342) at com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFactory.newConnection(RecoveryAwareAMQConnectionFactory.java:62) at com.rabbitmq.client.impl.recovery.AutorecoveringConnection.init(AutorecoveringConnection.java:99) at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:900) at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:859) at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:817) at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:954) at com.adtec.rabbitmq.Send.main(Send.java:17)

我在Windows機器上也裝了一個RabbitMQ,也用這個使用者登入,結果是可以!!!

package com.adtec.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");
    factory.setUsername("guest");
    factory.setPassword("guest");
    factory.setPort(5672);
    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("UTF-8"));
    System.out.println(" [x] Sent '" + message + "'");

    channel.close();
    connection.close();
  }
}

這裡寫圖片描述

查了官網才知道

因為guest使用者只是被容許從localhost訪問。官網文件描述如下:

“guest” user can only connect via localhost

這裡寫圖片描述

有興趣的可以詳細瞭解:http://www.rabbitmq.com/access-control.html

解決辦法就是新建使用者並授權

新建test使用者,授予administrator許可權

rabbitmqctl add_user test root
rabbitmqctl set_user_tags test administrator
rabbitmqctl set_permissions -p / test ".*" ".*" ".*"


這裡寫圖片描述

再連線:

這裡寫圖片描述

好使了!!!