Spring AMQP + RabbitMQ 3.3.5 ACCESS_REFUSED - Login ditolak menggunakan mekanisme otentikasi PLAIN

94

Saya mendapatkan pengecualian di bawah ini

org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login ditolak menggunakan mekanisme otentikasi PLAIN. Untuk detailnya lihat logfile broker.

Konfigurasi: RabbitMQ 3.3.5 di windows

Pada file Config di %APPDATA%\RabbitMQ\rabbit.config saya telah melakukan perubahan di bawah ini sesuai https://www.rabbitmq.com/access-control.html

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

Saya juga mencoba membuat pengguna / pwd - test / test sepertinya tidak berhasil.

Mencoba Langkah-langkah dari posting ini .

Detail Konfigurasi Lainnya adalah sebagai berikut:

Konteks Aplikasi Musim Semi yang dihosting 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>

Di Kelas Pengontrol saya

@Autowired
RmqMessageSender rmqMessageSender;

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

Di pengirim Pesan Saya:

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

Pengecualian di atas Blok memberikan Pengecualian di bawah


org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login ditolak menggunakan mekanisme otentikasi PLAIN. Untuk detailnya lihat logfile broker.


Catatan eror

  =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 temukan di bawah entri 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>

Tolong beri tahu saya jika Anda memiliki pemikiran / saran

Javaboy
sumber
Pastikan konfigurasi yang Anda edit dimuat.
Pinepain
zaq178miami, saya telah melakukan beberapa langkah untuk memastikannya dimuat. Mulai ulang layanan, boot ulang mesin & bahkan instal ulang RabbitMQ.
Javaboy

Jawaban:

107

Saya yakin apa yang dijelaskan Artem Bilan di sini mungkin menjadi salah satu penyebab kesalahan ini:

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

tetapi solusi bagi saya adalah saya masuk ke halaman admin rabbitMQ ( http: // localhost: 15672 / # / users ) dengan nama pengguna dan kata sandi default yaitu tamu / tamu kemudian menambahkan pengguna baru dan untuk pengguna baru itu saya mengaktifkan izin untuk mengaksesnya dari host virtual dan kemudian menggunakan nama pengguna dan sandi baru, bukan tamu default, dan itu menghapus kesalahan.

masukkan deskripsi gambar di sini

grepit
sumber
3
Itu juga tidak berhasil untuk saya. Koneksi dengan tamu: tamu baik-baik saja. Koneksi dengan newUser: newPwd memberikan kesalahan ini. Tidak tahu kenapa !!
Shashank
1
Saya memiliki masalah yang sama. Mengikuti saran ini, itu memecahkan masalah ini.
Christian Del Bianco
46

Untuk melengkapi jawaban @ cpu-100 ,

jika Anda tidak ingin mengaktifkan / menggunakan antarmuka web, Anda dapat membuat kredensial baru menggunakan baris perintah seperti di bawah ini dan menggunakannya dalam kode Anda untuk terhubung ke RabbitMQ.

$ rabbitmqctl add_user YOUR_USERNAME YOUR_PASSWORD
$ rabbitmqctl set_user_tags YOUR_USERNAME administrator
$ rabbitmqctl set_permissions -p / YOUR_USERNAME ".*" ".*" ".*"
Rahman
sumber
2
Terima kasih, saya tidak memiliki pengalaman dengan RabbitMQ, dan ini adalah solusi cepat untuk mendapatkan koneksi jarak jauh ke server yang dibawa dari AWS AMI untuk bereksperimen untuk melihat apakah saya harus memeriksanya lebih jauh.
jbm
36

pengguna 'tamu' hanya dapat terhubung melalui localhost

Itu benar sejak RabbitMQ 3.3.x. Oleh karena itu, Anda harus meningkatkan ke versi yang sama dengan pustaka klien, atau cukup memutakhirkan Spring AMQP ke versi terbaru (jika Anda menggunakan sistem manajemen ketergantungan).

Versi klien sebelumnya digunakan 127.0.0.1sebagai nilai default untuk hostopsi ConnectionFactory.

Artem Bilan
sumber
Hai Artem, saya telah menambahkan entri pom.xml untuk versi jar. Idealnya saya tidak ingin menggunakan nama pengguna & kata sandi tamu. Bisakah Anda memberi tahu saya jika Anda memiliki petunjuk yang dapat digunakan untuk Kasus Penggunaan / Bukti konsep yang siap pakai di senario di atas?
Javaboy
Maaf, tidak jelas apa yang Anda maksud tentang `prod ready Use Case / Proof of concept in di atas senario`, karena saya tidak melihat pertanyaan use case di sini. Jangan ragu untuk membuat pengguna mana pun di RabbitMQ Broker.
Artem Bilan
Solusi sederhananya adalah dengan menentukan localhostseperti ini:ConnectionFactory("localhost")
Brent Bradburn
Untuk UbuntuVM biru, dengan guest/guestakun ip yang ditetapkan biru berfungsi secara global! :(
Dev Anand Sadasivam
14

Kesalahannya

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

dapat terjadi jika kredensial yang coba digunakan aplikasi Anda untuk terhubung ke RabbitMQ salah atau hilang.

Saya mengalami ini terjadi ketika kredensial RabbitMQ yang disimpan di web.configfile aplikasi ASP.NET saya memiliki nilai ""untuk kata sandi alih-alih nilai string kata sandi yang sebenarnya.

Jon Schneider
sumber
1
Ya - Hati-hati dengan kesalahan ketik. :-)
Sundar Annamalai
6

Untuk mengizinkan akses tamu dari jarak jauh, tulis ini

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

ke sini

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

kemudian restart layanan windows rabbitmq (Sumber https://www.rabbitmq.com/access-control.html )

Peter Szanto
sumber
3

Bagi saya, solusinya sederhana: nama pengguna peka huruf besar / kecil. Gagal menggunakan tutup yang benar juga akan menyebabkan kesalahan.

Michel van Engelen
sumber
2

Solusi baru:

Modul node tidak dapat menangani : kata sandi dengan benar. Bahkan url yang dikodekan, seperti itu akan bekerja secara normal, itu tidak berfungsi.

Jangan gunakan karakter khusus khas dari URL dalam kata sandi!

Seperti salah satu dari berikut ini: : . ? + %


Asli, jawaban salah:

Pesan error tersebut jelas mengeluh tentang penggunaan PLAIN, bukan berarti crendentialsnya salah, itu artinya anda harus menggunakan encrypted data delivery (TLS) bukan plaintext.

Mengubah amqp://string koneksi ke amqps://(perhatikan s) memecahkan masalah ini.

Daniel W.
sumber
2

cukup tambahkan kata sandi login untuk terhubung ke RabbitMq

 CachingConnectionFactory connectionFactory = 
         new CachingConnectionFactory("rabbit_host");

 connectionFactory.setUsername("login");
 connectionFactory.setPassword("password");
benderalex5
sumber
2

jika Anda menggunakan nomor tersebut sebagai kata sandi Anda, mungkin Anda harus mencoba mengubah kata sandi Anda menggunakan string.

Saya dapat login menggunakan deltaqin: 000000 di situs web, tetapi saya memilikinya saat menjalankan program. kemudian ubah kata sandi menjadi deltaiqn. dan berhasil.

dianerta
sumber
0

Saya membuat persis seperti yang dibuat @grepit.

Tetapi saya harus membuat beberapa perubahan dalam kode Java saya:

Dalam proyek Produser dan Penerima, saya mengubah:

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

        

Melakukan itu, Anda menghubungkan host tertentu sebagai pengguna yang Anda buat. Ini berhasil untuk saya!

Evandro Brunassi
sumber
0

Saya menghadapi masalah ini karena ruang kosong di akhir kata sandi (spring.rabbitmq.password = kelinci) di aplikasi boot musim semi. Properti diselesaikan dengan menghapus ruang kosong. Semoga daftar periksa ini membantu seseorang menghadapi masalah ini.

Mallikarjun Revgond
sumber
-4

setel ConnectionFactory atau Hostname koneksi ke localhost

wen
sumber