Подтвердить что ты не робот

Spring AMQP + RabbitMQ 3.3.5 ACCESS_REFUSED - Вход был отклонен с использованием механизма аутентификации PLAIN

Я получаю ниже исключения

org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Вход был отклонен с использованием механизма аутентификации PLAIN. Подробнее см. В файле журнала брокера.

Конфигурация: RabbitMQ 3.3.5 для Windows

В файле конфигурации в %APPDATA%\RabbitMQ\rabbit.config Я сделал следующее изменение в соответствии с https://www.rabbitmq.com/access-control.html

[{rabbit, [{loopback_users, []}]}].

Я также попытался создать user/pwd-test/test, похоже, не работает.

Пробовал шаги из этой публикации.

Другие параметры конфигурации:

Tomcat размещен Spring Контекст приложения:

<!-- Rabbit MQ configuration Start -->
    <!-- Connection Factory -->
    <rabbit:connection-factory id="rabbitConnFactory" virtual-host="/" username="guest" password="guest" port="5672"/>

    <!-- Spring AMQP Template -->
    <rabbit:template id="rabbitTemplate" connection-factory="rabbitConnFactory" routing-key="ecl.down.queue" queue="ecl.down.queue" />

    <!-- Spring AMQP Admin -->
    <rabbit:admin id="admin" connection-factory="rabbitConnFactory"/>

    <rabbit:queue id="ecl.down.queue" name="ecl.down.queue" />

    <rabbit:direct-exchange name="ecl.down.exchange">
        <rabbit:bindings>
            <rabbit:binding key="ecl.down.key" queue="ecl.down.queue"/>
        </rabbit:bindings>
    </rabbit:direct-exchange>

В моем классе контроллера

@Autowired
RmqMessageSender rmqMessageSender;

//Inside a method
rmqMessageSender.submitToECLDown(orderInSession.getOrderNo());

В отправителе моего сообщения:

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("messageSender")
public class RmqMessageSender  {

    @Autowired
    AmqpTemplate                rabbitTemplate;

    public void submitToRMQ(String orderId){
        try{
            rabbitTemplate.convertAndSend("Hello World");
        } catch (Exception e){
            LOGGER.error(e.getMessage());
        }
    }       
}

Над исключением Блок дает ниже Исключение


org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Вход был отклонен с использованием механизма аутентификации PLAIN. Подробнее см. В файле журнала брокера.


Журнал ошибок

  =ERROR REPORT==== 7-Nov-2014::18:04:37 ===
closing AMQP connection <0.489.0> (10.1.XX.2XX:52298 -> 10.1.XX.2XX:5672):
    {handshake_error,starting,0,
                     {amqp_error,access_refused,
                                 "PLAIN login refused: user 'guest' can only connect via localhost",
                                 'connection.start_ok'}}

Найдите запись ниже записи pom.xml

        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
            <version>1.3.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-amqp</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>

Пожалуйста, дайте мне знать, если у вас есть мысли/предложения

4b9b3361

Ответ 1

Я уверен, что то, что объяснил здесь Артем Билан, может быть одной из причин этой ошибки:

Caused by: com.rabbitmq.client.AuthenticationFailureException: 
ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. 
For details see the

но решение для меня было то, что я вошел на страницу администратора rabbitMQ (http://localhost: 15672/#/users) с именем пользователя и паролем по умолчанию, который является guest/guest, затем добавил нового пользователя и для этого нового пользователя я включил разрешение на доступ к нему с виртуального хоста, а затем использовал новое имя пользователя и пароль вместо гостевого по умолчанию, и это устранило ошибку.

enter image description here

Ответ 2

Пользователь 'guest' может подключаться только через localhost

Это верно, так как RabbitMQ 3.3.x. Следовательно, вы должны обновить до той же версии клиентскую библиотеку или просто обновить Spring AMQP до последней версии (если вы используете систему управления зависимостями).

Предыдущая версия клиента использовала 127.0.0.1 как значение по умолчанию для параметра host ConnectionFactory.

Ответ 3

Чтобы завершить @cpu-100 answer,

если вы не хотите включать/использовать веб-интерфейс, вы можете создать новые учетные данные с помощью командной строки, как показано ниже, и использовать ее в своем коде для подключения к RabbitMQ.

$ rabbitmqctl add_user YOUR_USERNAME YOUR_PASSWORD
$ rabbitmqctl set_user_tags YOUR_USERNAME administrator
$ rabbitmqctl set_permissions -p / YOUR_USERNAME ".*" ".*" ".*"

Ответ 4

Ошибка

ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.

может произойти, если учетные данные, которые ваше приложение пытается использовать для подключения к RabbitMQ, неверны или отсутствуют.

Это произошло, когда учетные данные RabbitMQ, хранящиеся в моем файле web.config приложения ASP.NET web.config имели значение "" для пароля вместо фактического значения строки пароля.

Ответ 5

Чтобы разрешить гостевой доступ удаленно, напишите

[{rabbit, [{loopback_users, []}]}].

здесь

c:\Users\[your user name]\AppData\Roaming\RabbitMQ\rabbitmq.config

затем перезапустите службу windows rabbitmq (Источник https://www.rabbitmq.com/access-control.html)

Ответ 6

Новое решение:

Модуль node не может правильно обрабатывать : в пароле. Даже URL-код закодирован, как будто он работает нормально, он не работает.

Не используйте обычные символы из URL-адреса в пароле!

Как одно из следующего: : . ? + %


Оригинал, неправильный ответ:

Сообщение об ошибке явно жалуется на использование PLAIN, это не означает, что кривенальные функции неверны, это означает, что вы должны использовать зашифрованную передачу данных (TLS) вместо открытого текста.

Изменение amqp:// в строке подключения на amqps:// (обратите внимание на s) разрешает это.

Ответ 7

Для меня решение было простым: имя пользователя чувствительно к регистру. Отказ от использования правильных заглавных букв также приведет к ошибке.

Ответ 8

Грепит выше прав. Не используйте guest/guest, но создайте нового пользователя/пароль и предоставьте ему необходимые разрешения.

Ответ 9

установить ConnectionFactory или имя хоста подключения в localhost