2014-11-07 13 views
37

Tôi nhận được dưới đây ngoại lệXuân AMQP + RabbitMQ 3.3.5 ACCESS_REFUSED - Đăng nhập bị từ chối sử dụng cơ chế xác thực PLAIN

org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.

Cấu hình: RabbitMQ 3.3.5 trên cửa sổ

Mở tập tin cấu hình trong %APPDATA%\RabbitMQ\rabbit.config tôi đã thực hiện thay đổi dưới đây theo số https://www.rabbitmq.com/access-control.html

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

Tôi cũng đã cố gắng tạo người dùng/pwd - kiểm tra/kiểm tra dường như không phải là ma ke nó hoạt động.

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

Chi tiết cấu hình khác là như sau:

Tomcat tổ chức ứng dụng Spring Context:

<!-- 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 điều khiển Lớp tôi

@Autowired 
RmqMessageSender rmqMessageSender; 

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

Trong tin nhắn tôi gử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()); 
     } 
    }  
} 

Trên ngoại lệ khối cung cấp cho bên dưới Exception


org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.


Lỗi Log

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

Xin vui lòng cho tôi biết nếu bạn có bất kỳ suy nghĩ/gợi ý nào

+0

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

+0

zaq178miami, tôi đã thực hiện một vài bước để đảm bảo tải nó. 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

Trả lời

51

Tôi chắc chắn những gì Artem Bilan đã giải thích here có thể là một trong những lý do cho 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 đối với tôi là tôi đã đăng nhập vào trang quản trị RabbitMQ (http://localhost:15672/#/users) với mặc định tên người dùng và mật khẩu 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 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à đã xóa lỗi.

enter image description here

+1

Rõ ràng, chính xác những gì tôi đã tìm thấy! –

+0

Nó không hoạt động với tôi –

+0

Nó cũng không hoạt động đối với tôi. Kết nối với khách: khách là tốt. Kết nối với newUser: newPwd đang đưa ra lỗi này. Không biết tại sao !! – Shashank

23

user 'guest' can only connect via localhost

Điều đó đúng với ThỏMQ 3.3.x. Do đó bạn nên nâng cấp lên cùng một phiên bản thư viện máy khách hoặc chỉ cần 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 đã sử dụng 127.0.0.1 làm giá trị mặc định cho tùy chọn host của ConnectionFactory.

+0

Hi Artem, Tôi đã thêm mục nhập pom.xml cho các phiên bản của jar. Lý tưởng nhất là tôi muốn tránh xa 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 được cho một trường hợp sử dụng sẵn sàng/Sử dụng khái niệm ở trên senario chưa? – Javaboy

+0

Xin lỗi, nó không rõ ràng ý của bạn về 'prod ready Use Case/Proof của khái niệm ở trên senario', bởi vì tôi không thấy bất kỳ câu hỏi về trường hợp sử dụng nào ở đây. Vui lòng tạo bất kỳ người dùng nào trên Nhà môi giới RabbitMQ. –

+0

Ok, tôi đã thử tạo lại người dùng và dường như hoạt động tốt .. – Javaboy

2

Các lỗi

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

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

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

1

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

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

đế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)

+0

Vẫn không làm việc với tôi – FindOutIslamNow

11

Để hoàn thành @ cpu-100 answer,

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 một thông tin đăng nhập mới bằng cách sử dụng dòng lệnh như dưới đây 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 không có kinh nghiệm với RabbitMQ, và đây là giải pháp nhanh chóng để nhận kết nối từ xa đến máy chủ được đưa lên từ AWS AMI để thử nghiệm xem liệu tôi có nên xem xét thêm . – jbm

1

giải pháp mới:

Module nút không thể xử lý : trong một mật khẩu đúng. 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 trưng điển hình từ URL trong mật khẩu!

Giống như một trong các cách sau: : . ? + %


gốc, sai câu trả lời:

Thông báo lỗi rõ ràng phàn nàn về việc sử dụng PLAIN, nó không có nghĩa là crendentials là 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 cho văn bản thô.

Thay đổi amqp:// trong chuỗi kết nối thành amqps:// (giải thích s) giải quyết vấn đề này.

-1

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

Các vấn đề liên quan