स्प्रिंग AMQP + RabbitMQ 3.3.5 ACCESS_REFUSED - प्रमाणीकरण तंत्र PLAIN का उपयोग करके लॉगिन को मना कर दिया गया था


94

मैं नीचे अपवाद हो रही है

org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - प्रमाणीकरण तंत्र के उपयोग से इनकार कर दिया गया था। विवरण के लिए ब्रोकर लॉगफाइल देखें।

कॉन्फ़िगरेशन: विंडोज़ पर RabbitMQ 3.3.5

Https://www.rabbitmq.com/access-control.html के%APPDATA%\RabbitMQ\rabbit.config अनुसार मैंने नीचे की विन्यास फाइल में परिवर्तन किया है

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

मैंने एक उपयोगकर्ता / pwd बनाने की भी कोशिश की - परीक्षण / परीक्षण यह काम करने के लिए प्रतीत नहीं होता है।

इस पोस्ट से चरणों की कोशिश की ।

अन्य विन्यास विवरण नीचे दिए गए हैं:

टॉमकैट ने स्प्रिंग एप्लीकेशन प्रसंग की मेजबानी की:

<!-- 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 - प्रमाणीकरण तंत्र के उपयोग से इनकार कर दिया गया था। विवरण के लिए ब्रोकर लॉगफाइल देखें।


त्रुटि संग्रह

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

यदि आपके कोई विचार / सुझाव हैं तो कृपया मुझे बताएं


सुनिश्चित करें कि आप लोड किए गए संपादन को कॉन्फ़िगर करते हैं।
पाइनपैन

zaq178m मियामी, मैंने यह सुनिश्चित करने के लिए कुछ कदम उठाए हैं कि यह लोड किया जाए। सेवा को पुनरारंभ करें, मशीन को फिर से बूट करें और यहां तक ​​कि 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

@ सीपीयू -100 उत्तर को पूरा करने के लिए ,

यदि आप वेब इंटरफ़ेस को सक्षम / उपयोग नहीं करना चाहते हैं, तो आप नीचे की तरह कमांड लाइन का उपयोग करके एक नया क्रेडेंशियल्स बना सकते हैं और इसे अपने कोड में RabbitMQ से कनेक्ट करने के लिए उपयोग कर सकते हैं।

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

1
धन्यवाद, मेरे पास RabbitMQ के साथ शून्य अनुभव है, और यह प्रयोग करने के लिए एक एडब्ल्यूएस एएमआई से लाया गया एक सर्वर से दूरस्थ कनेक्शन प्राप्त करने के लिए एक त्वरित समाधान था, यह देखने के लिए कि क्या मुझे आगे देखना चाहिए।
jbm

36

उपयोगकर्ता 'अतिथि' केवल लोकलहोस्ट के माध्यम से जुड़ सकता है

यह सच है क्योंकि RabbitMQ 3.3.x. इसलिए आपको उसी संस्करण को क्लाइंट लाइब्रेरी में अपग्रेड करना चाहिए, या बस स्प्रिंग एएमक्यूपी को नवीनतम संस्करण में अपग्रेड करना चाहिए (यदि आप निर्भरता प्रबंधन प्रणाली का उपयोग करते हैं)।

क्लाइंट के पिछले संस्करण 127.0.0.1को hostविकल्प के लिए डिफ़ॉल्ट मान के रूप में उपयोग किया जाता है ConnectionFactory


हाय आर्टेम, मैंने जार के संस्करणों के लिए pom.xml प्रविष्टि जोड़ी है। आदर्श रूप से मैं अतिथि उपयोगकर्ता नाम और पासवर्ड का उपयोग करने से दूर रहना चाहूंगा। क्या आप मुझे बता सकते हैं कि क्या आपके पास किसी भी संकेत के लिए प्रयोग करने योग्य तैयार केस / प्रूफ ऑफ कॉन्सेप्ट ऊपर के सिनारियो में उपयोग करने योग्य है?
जावबॉय १०'१४

क्षमा करें, यह स्पष्ट नहीं है कि आप सेरेरो के ऊपर `ठेस तैयार उपयोग केस / अवधारणा के सबूत 'के संबंध में क्या मतलब है, क्योंकि मुझे यहाँ कोई उपयोग मामला प्रश्न नहीं दिखता है। RabbitMQ ब्रोकर पर किसी भी उपयोगकर्ता को बनाने के लिए स्वतंत्र महसूस करें।
आर्टेम बिलन

सरल समाधान ऐसा निर्दिष्ट करना localhostहै:ConnectionFactory("localhost")
ब्रेंट बर्नबर्न

Azure UbuntuVM के लिए, azure के साथ असाइन किए गए ip guest/guestअकाउंट विश्व स्तर पर काम करता है! :(
देव आनंद सदाशिवम

13

त्रुटि

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

अगर आपके एप्लिकेशन को RabbitMQ से कनेक्ट करने के लिए उपयोग करने की कोशिश कर रहे क्रेडेंशियल गलत या गायब हैं, तो हो सकता है।

जब मेरे ASP.NET अनुप्रयोग की web.configफ़ाइल में संग्रहीत RabbitMQ क्रेडेंशियल ""वास्तविक पासवर्ड स्ट्रिंग मान के बजाय पासवर्ड के लिए एक मान था, तो मैंने ऐसा किया था ।


1
हां - टाइपो के लिए बाहर देखो। :-)
सुंदर अन्नामलाई

6

दूरस्थ रूप से अतिथि का उपयोग करने की अनुमति देने के लिए, इसे लिखें

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

यहाँ तक

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

फिर rabbitmq विंडोज़ सेवा को पुनः आरंभ करें (स्रोत https://www.rabbitmq.com/access-control.html )


3

मेरे लिए समाधान सरल था: उपयोगकर्ता नाम केस संवेदी है। सही कैप का उपयोग करने में विफल होने से त्रुटि भी होगी।


2

नया समाधान:

नोड मॉड्यूल को संभाल नहीं सकते : एक पासवर्ड को ठीक से है। यहां तक ​​कि url एन्कोडेड है, जैसे कि यह सामान्य रूप से काम करेगा, यह काम नहीं करता है।

पासवर्ड में एक URL से विशिष्ट वर्णों का उपयोग न करें!

निम्न में से एक की तरह: : . ? + %


मूल, गलत उत्तर:

त्रुटि संदेश स्पष्ट रूप से उपयोग करने के बारे में शिकायत PLAINकरता है, इसका मतलब यह नहीं है कि crendentials गलत हैं, इसका मतलब है कि आपको प्लेनटेक्स्ट के बजाय एन्क्रिप्टेड डेटा डिलीवरी (TLS) का उपयोग करना होगा।

amqp://कनेक्शन स्ट्रिंग में बदलना amqps://(नोट करना s) इसे हल करता है।


2

बस RabbitMq से कनेक्ट करने के लिए लॉगिन पासवर्ड जोड़ें

 CachingConnectionFactory connectionFactory = 
         new CachingConnectionFactory("rabbit_host");

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

2

यदि आप नंबर को अपने पासवर्ड के रूप में उपयोग करते हैं, तो शायद आपको स्ट्रिंग का उपयोग करके अपना पासवर्ड बदलने की कोशिश करनी चाहिए।

मैं वेबसाइट पर deltaqin: 000000 का उपयोग करके लॉगिन कर सकता हूं, लेकिन कार्यक्रम चलाते समय यह था। फिर पासवर्ड बदलकर deltaiqn करें। और यह काम करता है।


0

मैंने ठीक वैसा ही बनाया जैसा @grepit ने बनाया था।

लेकिन मुझे अपने जावा कोड में कुछ बदलाव करने थे:

निर्माता और रिसीवर परियोजना में मैंने बदल दिया:

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

        

ऐसा करते हुए, आप अपने द्वारा बनाए गए उपयोगकर्ता के रूप में एक विशिष्ट होस्ट कनेक्ट कर रहे हैं। इससे मेरा काम बनता है!


0

स्प्रिंग बूट एप्लिकेशन में पासवर्ड (spring.rabbitmq.password = rabbit) के अंत में खाली जगह होने के कारण मुझे इस समस्या का सामना करना पड़ रहा था। खाली जगह को हटाने पर विपत्तियों का समाधान हो गया। आशा है कि यह चेकलिस्ट कुछ इस मुद्दे का सामना करने में मदद करती है।


-4

स्थानीयहोस्ट के लिए ConnectFactory या कनेक्शन होस्टनाम सेट करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.