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

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

org.springframework.протокол AMQP.AmqpAuthenticationException: com.в RabbitMQ.клиент.AuthenticationFailureException: ACCESS_REFUSED - вход был отклонен с помощью механизма аутентификации PLAIN. Подробнее см. брокер журнал.

конфигурация: RabbitMQ 3.3.5 на windows

в конфигурационном файле в %APPDATA%RabbitMQrabbit.config Я сделал ниже изменения https://www.rabbitmq.com/access-control.html

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

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

попробовал действия с этой пост.

другие детали конфигурации, как показано ниже:

Tomcat принимал весенний контекст приложения:

<!-- 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.клиент.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'}}

Pls найти ниже пом.запись 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>

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

7 ответов


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

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

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

enter image description here


пользователь "гость" может подключаться только через localhost

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

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


для завершения @cpu-100 ответ,

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

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

ошибка

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

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

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


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

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

здесь

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

затем перезапустите службу RabbitMQ windows (Source https://www.rabbitmq.com/access-control.html)


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

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

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

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


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

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

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


установите ConnectionFactory или имя хоста соединения в localhost