Spring AMQP + RabbitMQ 3.3.5 ACCESS_REFUSED - Đăng nhập bị từ chối bằng cách sử dụng cơ chế xác thực PLAIN


92

Tôi nhận được dưới đây ngoại lệ

org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Đăng nhập bị từ chối sử dụng cơ chế xác thực PLAIN. Để biết chi tiết, hãy xem logfile của nhà môi giới.

Cấu hình: RabbitMQ 3.3.5 trên Windows

Trên tệp Cấu hình trong, %APPDATA%\RabbitMQ\rabbit.config tôi đã thực hiện thay đổi bên dưới theo https://www.rabbitmq.com/access-control.html

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

Tôi cũng đã thử tạo người dùng / pwd - kiểm tra / thử nghiệm dường như không làm cho nó hoạt động.

Đã thử các bước từ bài đăng này .

Các chi tiết cấu hình khác như sau:

Bối cảnh ứng dụng mùa xuân được lưu trữ trên 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>

Trong lớp điều khiển của tôi

@Autowired
RmqMessageSender rmqMessageSender;

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

Trong Người gửi tin nhắn của tôi:

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());
        }
    }       
}

Khối trên ngoại lệ đưa ra bên dưới Ngoại lệ


org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Đăng nhập bị từ chối sử dụng cơ chế xác thực PLAIN. Để biết chi tiết, hãy xem logfile của nhà môi giới.


Nhật ký lỗi

  =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'}}

Xin vui lòng tìm thấy bên dưới mục nhập 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>

Vui lòng cho tôi biết nếu bạn có bất kỳ suy nghĩ / đề xuất nào


Đảm bảo rằng cấu hình bạn chỉnh sửa đã tải.
pinepain

zaq178miami, tôi đã thực hiện một số bước để đảm bảo rằng nó được tải. Khởi động lại dịch vụ, khởi động lại máy và thậm chí cài đặt lại RabbitMQ.
Javaboy

Câu trả lời:


104

Tôi chắc chắn những gì Artem Bilan đã giải thích ở đây có thể là một trong những lý do gây ra lỗi này:

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

nhưng giải pháp cho tôi là tôi đã đăng nhập vào trang quản trị RabbitMQ ( http: // localhost: 15672 / # / users ) với tên người dùng và mật khẩu mặc định là khách / khách sau đó thêm người dùng mới và cho người dùng mới đó tôi. đã bật quyền truy cập nó từ máy chủ ảo và sau đó sử dụng tên người dùng và mật khẩu mới thay vì khách mặc định và điều đó đã xóa lỗi.

nhập mô tả hình ảnh ở đây


2
Nó cũng không làm việc cho tôi. Kết nối với khách: khách vẫn ổn. Kết nối với newUser: newPwd đang mắc lỗi này. Không biết tại sao !!
Shashank

1
Tôi đã từng gặp vấn đề tương tự. Làm theo gợi ý này nó đã giải quyết được vấn đề này.
Christian Del Bianco

43

Để hoàn thành câu trả lời @ cpu-100 ,

trong trường hợp bạn không muốn bật / sử dụng giao diện web, bạn có thể tạo thông tin đăng nhập mới bằng dòng lệnh như bên dưới và sử dụng nó trong mã của bạn để kết nối với RabbitMQ.

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

1
Cảm ơn bạn, tôi chưa có kinh nghiệm với RabbitMQ và đây là một giải pháp nhanh chóng để có được kết nối từ xa tới máy chủ được cung cấp từ AWS AMI để thử nghiệm xem tôi có nên xem xét thêm hay không.
jbm

36

người dùng 'khách' chỉ có thể kết nối qua máy chủ cục bộ

Điều đó đúng kể từ khi RabbitMQ 3.3.x. Do đó, bạn nên nâng cấp lên cùng phiên bản thư viện máy khách hoặc chỉ nâng cấp Spring AMQP lên phiên bản mới nhất (nếu bạn sử dụng hệ thống quản lý phụ thuộc).

Phiên bản trước của ứng dụng khách được sử dụng 127.0.0.1làm giá trị mặc định cho hosttùy chọn của ConnectionFactory.


Xin chào Artem, tôi đã thêm mục nhập pom.xml cho các phiên bản của jar. Tốt nhất là tôi muốn tránh sử dụng tên người dùng và mật khẩu của khách. Bạn có thể vui lòng cho tôi biết nếu bạn có bất kỳ gợi ý nào có thể sử dụng cho Trường hợp sử dụng / Bằng chứng khái niệm đã sẵn sàng sản xuất trong senario trên không?
Javaboy

Xin lỗi, tôi không rõ ý của bạn về `` Trường hợp sử dụng sẵn sàng cho sản phẩm / Chứng minh khái niệm ở trên senario`, bởi vì tôi không thấy bất kỳ câu hỏi nào về trường hợp sử dụng ở đây. Hãy thoải mái tạo bất kỳ người dùng nào trên Nhà môi giới RabbitMQ.
Artem Bilan

Giải pháp đơn giản là chỉ định localhostnhư vậy:ConnectionFactory("localhost")
Brent Bradburn,

Đối với UbuntuVM azure, với guest/guesttài khoản ip được gán azure hoạt động trên toàn cầu! :(
Dev Anand Sadasivam

13

Lỗi

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

có thể xảy ra nếu thông tin đăng nhập mà ứng dụng của bạn đang cố gắng sử dụng để kết nối với RabbitMQ không chính xác hoặc bị thiếu.

Điều này đã xảy ra khi thông tin đăng nhập RabbitMQ được lưu trữ trong web.configtệp ứng dụng ASP.NET của tôi có giá trị ""cho mật khẩu thay vì giá trị chuỗi mật khẩu thực tế.


1
Có - Chú ý lỗi chính tả. :-)
Sundar Annamalai

6

Để cho phép khách truy cập từ xa, hãy viết điều này

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

tới đây, đến chỗ này

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

sau đó khởi động lại dịch vụ cửa sổ Rabbitmq (Nguồn https://www.rabbitmq.com/access-control.html )


3

Đối với tôi, giải pháp rất đơn giản: tên người dùng có phân biệt chữ hoa chữ thường. Không sử dụng đúng mũ cũng sẽ dẫn đến lỗi.


2

Giải pháp mới:

Mô-đun nút không thể xử lý :mật khẩu đúng cách. Ngay cả url được mã hóa, giống như nó sẽ hoạt động bình thường, nó không hoạt động.

Không sử dụng các ký tự đặc biệt từ một URL trong mật khẩu!

Giống như một trong những điều sau: : . ? + %


Câu trả lời ban đầu, sai:

Thông báo lỗi rõ ràng là phàn nàn về việc sử dụng PLAIN, điều đó không có nghĩa là thông tin xác thực sai, nó có nghĩa là bạn phải sử dụng phân phối dữ liệu được mã hóa (TLS) thay vì văn bản rõ.

Thay đổi amqp://chuỗi kết nối thành amqps://(lưu ý s) giải quyết điều này.


2

chỉ cần thêm mật khẩu đăng nhập để kết nối với RabbitMq

 CachingConnectionFactory connectionFactory = 
         new CachingConnectionFactory("rabbit_host");

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

2

nếu bạn sử dụng số làm mật khẩu của mình, có thể bạn nên thử thay đổi mật khẩu của mình bằng chuỗi.

Tôi có thể đăng nhập bằng deltaqin: 000000 trên trang web, nhưng đã xảy ra lỗi này khi đang chạy chương trình. sau đó đổi mật khẩu thành deltaiqn. Và nó hoạt động.


0

Tôi đã thực hiện chính xác những gì @grepit đã làm.

Nhưng tôi đã phải thực hiện một số thay đổi trong mã Java của mình:

Trong dự án Người sản xuất và Người nhận, tôi đã thay đổi:

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

        

Làm điều đó, bạn đang kết nối một máy chủ lưu trữ cụ thể với tư cách là người dùng bạn đã tạo. Nó hoạt động cho tôi!


0

Tôi đang gặp phải sự cố này do không gian trống ở cuối mật khẩu (spring.rabbitmq.password = Rabbit) trong ứng dụng khởi động mùa xuân .properties đã được giải quyết khi xóa không gian trống. Hy vọng danh sách kiểm tra này sẽ giúp một số người đang đối mặt với vấn đề này.


-3

đặt ConnectionFactory hoặc tên máy chủ kết nối thành localhost

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.