Spring AMQP + RabbitMQ 3.3.5 ACCESS_REFUSED - Вхід відхилено за допомогою механізму автентифікації PLAIN


94

Я потрапляю нижче винятку

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, []}]}].

Я також спробував створити користувача / pwd - тест / тест, здається, не змусив це працювати.

Спробував кроки з цього допису.

Інші деталі конфігурації наведені нижче:

Контекст весняних додатків, розміщений у 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.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>

Будь ласка, повідомте мене, якщо у вас є якісь думки / пропозиції


Переконайтеся, що конфігурація, яку ви редагуєте, завантажена.
pinepain

zaq178miami, я зробив кілька кроків, щоб переконатися, що його завантажено. Перезапустіть службу, перезавантажте машину і навіть повторно встановіть RabbitMQ.
Javaboy

Відповіді:


106

Я впевнений, що те, що тут пояснив Артем Білан, може бути однією з причин цієї помилки:

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

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

введіть тут опис зображення


3
Це також не працює для мене. Зв'язок з гостем: гість добре. Зв'язок з newUser: newPwd видає цю помилку. Не уявляю чому !!
Шашанк

1
У мене була та сама проблема. Після цієї пропозиції він вирішив цю проблему.
Крістіан Дель Б'янко

45

Для того, щоб завершити @ CPU-100 відповіді ,

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

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

1
Дякую, я маю нульовий досвід роботи з RabbitMQ, і це було швидким рішенням для отримання віддаленого підключення до сервера, виведеного з AWS AMI, для експериментів, щоб дізнатись, чи слід мені розглядати це далі.
jbm

36

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

Це правда, оскільки RabbitMQ 3.3.x. Отже, вам слід оновити до тієї ж версії бібліотеку клієнта, або просто оновити Spring AMQP до останньої версії (якщо ви використовуєте систему управління залежностями).

Попередня версія клієнта використовувалася 127.0.0.1як значення за замовчуванням для hostопції ConnectionFactory.


Привіт Артеме, я додав запис pom.xml для версій jar. В ідеалі я хотів би уникати використання імені користувача та пароля гостя. Не могли б ви повідомити мене, якщо у вас є якісь вказівки, які можна використовувати для готового до використання продукту / доказу концепції у вищезазначеному сенаріо?
Javaboy

На жаль, незрозуміло, що ви маєте на увазі щодо `` готового випадку використання продукту / підтвердження концепції '' у вищезазначеному документі`, оскільки я не бачу тут запитань щодо використання. Не соромтеся створювати будь-якого користувача на Брокер RabbitMQ.
Артем Білан

Просте рішення - вказати localhostтак:ConnectionFactory("localhost")
Брент Бредберн,

Для azure UbuntuVM з призначеним для azure guest/guestобліковим записом ip працює глобально! :(
Dev Anand Sadasivam

13

Помилка

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

може статися, якщо облікові дані, які ваша програма намагається використовувати для підключення до RabbitMQ, неправильні або відсутні.

У мене це сталося, коли облікові дані RabbitMQ, що зберігаються у web.configфайлі моєї програми ASP.NET, мали значення ""пароля замість фактичного значення рядка пароля.


1
Так - слідкуйте за помилками. :-)
Sundar Annamalai


3

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


2

Нове рішення:

Модуль вузла не може обробити : належним чином пароль. Навіть закодована URL-адреса, як би вона працювала нормально, вона не працює.

Не використовуйте в паролі типові спеціальні символи з URL-адреси!

Як одне з наступного: : . ? + %


Оригінальна, неправильна відповідь:

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

Зміна amqp://рядка зв’язку на amqps://(зверніть увагу s) вирішує це.


2

просто додайте пароль для входу, щоб підключитися до RabbitMq

 CachingConnectionFactory connectionFactory = 
         new CachingConnectionFactory("rabbit_host");

 connectionFactory.setUsername("login");
 connectionFactory.setPassword("password");

2

якщо ви використовуєте номер як свій пароль, можливо, вам слід спробувати змінити свій пароль за допомогою рядка.

Я можу увійти, використовуючи deltaqin: 000000 на веб-сайті, але це було під час запуску програми. потім змініть пароль на deltaiqn. і це працює.


0

Я зробив саме те, що зробив @grepit.

Але мені довелося внести деякі зміни в свій код Java:

У проекті Producer and Receiver я змінив:

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("your-host-ip");
factory.setUsername("username-you-created");
factory.setPassword("username-password");

        

Роблячи це, ви підключаєте певний хост як створеного вами користувача. Це працює для мене!


0

Я зіткнувся з цією проблемою через порожній простір в кінці пароля (spring.rabbitmq.password = rabbit) у весняному завантажувальному додатку. Властивості вирішено при видаленні порожнього простору. Сподіваюся, цей контрольний список допомагає комусь, хто стикається з цією проблемою.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.