Spring AMQP + RabbitMQ 3.3.5 ACCESS_REFUSED - Oturum, kimlik doğrulama mekanizması DÜZ kullanılarak reddedildi


94

İstisnanın altına düşüyorum

org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Oturum, PLAIN kimlik doğrulama mekanizması kullanılarak reddedildi. Ayrıntılar için komisyoncu günlük dosyasına bakın.

Yapılandırma: Windows'ta RabbitMQ 3.3.5

Config dosyasında https://www.rabbitmq.com/access-control.html%APPDATA%\RabbitMQ\rabbit.config uyarınca aşağıdaki değişikliği yaptım

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

Ayrıca bir kullanıcı / pwd oluşturmayı da denedim - test / test çalışmıyor gibi görünüyor.

Dan Adımlar çalıştı bu yazı.

Diğer Yapılandırma Ayrıntıları aşağıdaki gibidir:

Tomcat, Bahar Uygulama Bağlamını barındırdı:

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

Kontrolcü Sınıfımda

@Autowired
RmqMessageSender rmqMessageSender;

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

Mesaj göndericim'de:

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

İstisnanın üstünde Blok aşağıdaki İstisnayı verir


org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Oturum, PLAIN kimlik doğrulama mekanizması kullanılarak reddedildi. Ayrıntılar için komisyoncu günlük dosyasına bakın.


Hata Günlüğü

  =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 girişinin altında bulunur

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

Herhangi bir fikriniz / öneriniz varsa lütfen bana bildirin


Düzenlediğiniz yapılandırmanın yüklendiğinden emin olun.
pinepain

zaq178miami, yüklendiğinden emin olmak için birkaç adım attım. Hizmeti yeniden başlatın, makineyi yeniden başlatın ve hatta RabbitMQ'yu yeniden kurun.
Javaboy

Yanıtlar:


107

Eminim ki burada Artem Bilan'ın açıkladığı şey bu hatanın nedenlerinden biri olabilir:

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

ancak benim için çözüm, rabbitMQ yönetici sayfasına ( http: // localhost: 15672 / # / users ) konuk / misafir olan varsayılan kullanıcı adı ve parolayla giriş yaptıktan sonra yeni bir kullanıcı ekledim ve bu yeni kullanıcı için ben ona sanal ana bilgisayardan erişim iznini etkinleştirdi ve ardından varsayılan konuk yerine yeni kullanıcı adı ve parolayı kullandı ve bu hatayı temizledi.

görüntü açıklamasını buraya girin


3
Benim için de çalışmıyor. Misafir ile bağlantı: misafir iyi. NewUser ile bağlantı: newPwd bu hatayı veriyor. Neden olduğuna dair hiçbir fikrim yok !!
Shashank

1
Ben de aynı sorunu yaşadım. Bu öneriyi takiben bu sorunu çözdü.
Christian Del Bianco

46

@ Cpu-100 yanıtını tamamlamak için ,

Web arayüzünü etkinleştirmek / kullanmak istemiyorsanız aşağıdaki gibi komut satırını kullanarak yeni bir kimlik bilgisi oluşturabilir ve RabbitMQ'ya bağlanmak için kodunuzda kullanabilirsiniz.

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

2
Teşekkürler, RabbitMQ ile sıfır deneyimim var ve bu, daha fazla araştırmam gerekip gerekmediğini görmek için deneyler yapmak için bir AWS AMI'den getirilen bir sunucuya uzaktan bağlantı kurmak için hızlı bir çözümdü.
jbm

36

kullanıcı 'misafir' yalnızca localhost aracılığıyla bağlanabilir

RabbitMQ 3.3.x'ten beri bu doğru. Bu nedenle, istemci kitaplığını aynı sürüme yükseltmelisiniz veya yalnızca Spring AMQP'yi en son sürüme yükseltmelisiniz (bağımlılık yönetim sistemi kullanıyorsanız).

İstemcinin önceki sürümü seçeneği 127.0.0.1için varsayılan değer olarak kullanıldı .hostConnectionFactory


Merhaba Artem, jar sürümleri için pom.xml girdisi ekledim. İdeal olarak, misafir kullanıcı adı ve şifresini kullanmaktan uzak durmak isterim. Yukarıdaki senaryoda kullanıma hazır bir Kullanım Örneği / Kavram Kanıtı için kullanılabilecek herhangi bir işaretiniz varsa lütfen bana bildirir misiniz?
Javaboy

Maalesef, "kullanıma hazır Kullanım Örneği / Yukarıdaki senaryonda kavram kanıtı" ile ilgili olarak ne demek istediğiniz net değil, çünkü burada herhangi bir kullanım durumu sorusu göremiyorum. RabbitMQ Broker'da herhangi bir kullanıcı yaratmaktan çekinmeyin.
Artem Bilan

Basit çözüm şu şekilde belirtmektir localhost:ConnectionFactory("localhost")
Brent Bradburn

Azure UbuntuVM için, masmavi atanmış ip guest/guesthesabı ile dünya çapında çalışır! :(
Dev Anand Sadasivam

14

Hata

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

Uygulamanızın RabbitMQ'ya bağlanmak için kullanmaya çalıştığı kimlik bilgileri yanlış veya eksikse ortaya çıkabilir.

ASP.NET uygulamamın web.configdosyasında depolanan RabbitMQ kimlik bilgileri "", gerçek parola dizesi değeri yerine parola için bir değere sahip olduğunda bu durumla karşılaştım .


1
Evet - Yazım hatalarına dikkat edin. :-)
Sundar Annamalai


3

Benim için çözüm basitti: kullanıcı adı büyük / küçük harfe duyarlıdır. Doğru büyük harflerin kullanılmaması da hataya yol açacaktır.


2

Yeni çözüm:

Düğüm modülü :bir parolayı düzgün şekilde işleyemez . Normalde çalışacağı gibi kodlanmış url bile çalışmıyor.

Şifrede bir URL'den tipik özel karakterler kullanmayın!

Aşağıdakilerden biri gibi: : . ? + %


Orijinal, yanlış cevap:

Hata mesajı açıkça kullanımdan şikayet ediyor PLAIN, bu suçlama bilgilerinin yanlış olduğu anlamına gelmiyor, düz metin yerine şifreli veri teslimatı (TLS) kullanmanız gerektiği anlamına geliyor.

Değişen amqp://bağlantı dizesinde amqps://(not s) bu çözer.


2

RabbitMq'e bağlanmak için sadece giriş şifresi ekleyin

 CachingConnectionFactory connectionFactory = 
         new CachingConnectionFactory("rabbit_host");

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

2

Numarayı şifreniz olarak kullanırsanız, belki de şifrenizi string kullanarak değiştirmeyi denemelisiniz.

Web sitesinde deltaqin: 000000 kullanarak giriş yapabilirim, ancak programı çalıştırırken bunu yaptım. ardından şifreyi deltaiqn olarak değiştirin. ve çalışıyor.


0

@Grepit'in yaptığı şeyi tam olarak yaptım.

Ancak Java kodumda bazı değişiklikler yapmak zorunda kaldım:

Yapımcı ve Alıcı projesinde değiştirdim:

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

        

Bunu yaparak, oluşturduğunuz kullanıcı olarak belirli bir ana bilgisayara bağlanırsınız. Benim için çalışıyor!


0

İlkbahar önyükleme uygulamasındaki şifrenin sonundaki boş alan (spring.rabbitmq.password = rabbit) nedeniyle bu sorunla karşı karşıyaydım. Özellikler boş alanı kaldırırken çözüldü. Umarım bu kontrol listesi bu sorunla karşılaşan birine yardımcı olur.


-4

ConnectionFactory veya Connection ana bilgisayar adını localhost olarak ayarlayın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.