Jestem poniżej wyjątku
org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - odmówiono logowania przy użyciu mechanizmu uwierzytelniania PLAIN. Aby uzyskać szczegółowe informacje, zobacz plik dziennika brokera.
Konfiguracja: RabbitMQ 3.3.5 w systemie Windows
W pliku konfiguracyjnym %APPDATA%\RabbitMQ\rabbit.config
wykonałem poniższą zmianę zgodnie z https://www.rabbitmq.com/access-control.html
[{rabbit, [{loopback_users, []}]}].
Próbowałem też utworzyć użytkownika / pwd - test / test nie wydaje się działać.
Wypróbowałem kroki z tego postu.
Inne szczegóły konfiguracji są następujące:
Kontekst aplikacji Spring hostowany przez 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>
W mojej klasie kontrolera
@Autowired
RmqMessageSender rmqMessageSender;
//Inside a method
rmqMessageSender.submitToECLDown(orderInSession.getOrderNo());
W nadawcy mojej wiadomości:
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());
}
}
}
Powyższy blok wyjątku podaje poniżej wyjątek
org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - odmówiono logowania przy użyciu mechanizmu uwierzytelniania PLAIN. Aby uzyskać szczegółowe informacje, zobacz plik dziennika brokera.
Dziennik błędów
=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 znajdź poniżej wpis 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>
Daj mi znać, jeśli masz jakieś przemyślenia / sugestie
źródło
Odpowiedzi:
Jestem pewien, że to, co wyjaśnił tutaj Artem Bilan , może być jedną z przyczyn tego błędu:
ale rozwiązaniem dla mnie było to, że zalogowałem się na stronie administratora rabbitMQ ( http: // localhost: 15672 / # / users ) z domyślną nazwą użytkownika i hasłem, którym jest gość / gość, a następnie dodałem nowego użytkownika i dla tego nowego użytkownika I włączył uprawnienia dostępu do niego z wirtualnego hosta, a następnie użył nowej nazwy użytkownika i hasła zamiast domyślnego gościa i to usunęło błąd.
źródło
Aby zakończyć @ cpu-100 odpowiedzi ,
jeśli nie chcesz włączać / używać interfejsu internetowego, możesz utworzyć nowe poświadczenia za pomocą wiersza poleceń, jak poniżej i użyć go w swoim kodzie, aby połączyć się z RabbitMQ.
źródło
To prawda, ponieważ RabbitMQ 3.3.x. Dlatego należy zaktualizować bibliotekę klienta do tej samej wersji lub po prostu zaktualizować Spring AMQP do najnowszej wersji (jeśli używasz systemu zarządzania zależnościami).
Poprzednia wersja klienta była używana
127.0.0.1
jako domyślna wartośćhost
opcjiConnectionFactory
.źródło
localhost
sposób:ConnectionFactory("localhost")
guest/guest
kontem IP Azure działa globalnie! :(Błąd
ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.
może wystąpić, jeśli poświadczenia, których aplikacja próbuje użyć do połączenia z RabbitMQ, są nieprawidłowe lub ich brakuje.
Zdarzało się to, gdy poświadczenia RabbitMQ przechowywane w
web.config
pliku mojej aplikacji ASP.NET miały wartość""
hasła zamiast rzeczywistej wartości ciągu hasła.źródło
Aby umożliwić gościom dostęp zdalny, napisz to
tutaj
następnie uruchom ponownie usługę systemu Windows rabbitmq (źródło: https://www.rabbitmq.com/access-control.html )
źródło
Dla mnie rozwiązanie było proste: w nazwie użytkownika rozróżniana jest wielkość liter. Niezastosowanie odpowiednich kapsli również prowadzi do błędu.
źródło
Nowe rozwiązanie:
Moduł węzła nie może
:
poprawnie obsługiwać hasła. Nawet zakodowany adres URL, tak jakby działał normalnie, nie działa.Nie używaj w haśle typowych znaków specjalnych z adresu URL!
Jak jeden z następujących:
: . ? + %
Oryginalna, zła odpowiedź:
Komunikat o błędzie wyraźnie narzeka na używanie
PLAIN
, nie oznacza to, że dane uwierzytelniające są nieprawidłowe, oznacza to, że musisz użyć szyfrowanego dostarczania danych (TLS) zamiast zwykłego tekstu.Zmiana
amqp://
ciągu połączenia naamqps://
(zwróć uwagę nas
) rozwiązuje ten problem.źródło
po prostu dodaj hasło logowania, aby połączyć się z RabbitMq
źródło
jeśli używasz numeru jako hasła, być może powinieneś spróbować zmienić hasło za pomocą ciągu.
Mogę zalogować się za pomocą deltaqin: 000000 na stronie, ale miałem to podczas uruchamiania programu. następnie zmień hasło na deltaiqn. i to działa.
źródło
Zrobiłem dokładnie to, co zrobił @grepit.
Ale musiałem wprowadzić pewne zmiany w moim kodzie Java:
W projekcie Producer and Receiver zmieniłem:
W ten sposób łączysz się z określonym hostem jako utworzony użytkownik. Mi to pasuje!
źródło
Miałem do czynienia z tym problemem z powodu pustego miejsca na końcu hasła (spring.rabbitmq.password = rabbit) w aplikacji rozruchowej wiosny. Właściwość została rozwiązana po usunięciu pustego miejsca. Mam nadzieję, że ta lista kontrolna pomoże komuś, kto boryka się z tym problemem.
źródło
ustaw ConnectionFactory lub Connection hostname na localhost
źródło