Me estoy poniendo por debajo de la excepción
org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Se rechazó el inicio de sesión mediante el mecanismo de autenticación PLAIN. Para obtener más información, consulte el archivo de registro del intermediario.
Configuración: RabbitMQ 3.3.5 en Windows
En el archivo de configuración, %APPDATA%\RabbitMQ\rabbit.config
hice el siguiente cambio según https://www.rabbitmq.com/access-control.html
[{rabbit, [{loopback_users, []}]}].
También intenté crear un usuario / pwd: la prueba / prueba no parece hacer que funcione.
Probé los pasos de esta publicación.
Otros detalles de configuración son los siguientes:
Contexto de aplicación Spring alojado en 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>
En mi clase de controlador
@Autowired
RmqMessageSender rmqMessageSender;
//Inside a method
rmqMessageSender.submitToECLDown(orderInSession.getOrderNo());
En el remitente de Mi mensaje:
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());
}
}
}
El bloque de excepción anterior da la excepción a continuación
org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Se rechazó el inicio de sesión mediante el mecanismo de autenticación PLAIN. Para obtener más información, consulte el archivo de registro del intermediario.
Registro de errores
=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'}}
Por favor, busque debajo de la entrada 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>
Por favor, avíseme si tiene alguna idea o sugerencia
fuente
Respuestas:
Estoy seguro de que lo que Artem Bilan ha explicado aquí podría ser una de las razones de este error:
pero la solución para mí fue que inicié sesión en la página de administración de rabbitMQ ( http: // localhost: 15672 / # / users ) con el nombre de usuario y la contraseña predeterminados que es invitado / invitado, luego agregué un nuevo usuario y para ese nuevo usuario yo habilitó el permiso para acceder a él desde el host virtual y luego usó el nuevo nombre de usuario y contraseña en lugar del invitado predeterminado y eso borró el error.
fuente
Para completar la respuesta de @ cpu-100 ,
en caso de que no desee habilitar / usar la interfaz web, puede crear nuevas credenciales usando la línea de comando como se muestra a continuación y usarla en su código para conectarse a RabbitMQ.
fuente
Eso es cierto desde RabbitMQ 3.3.x. Por lo tanto, debe actualizar a la misma versión de la biblioteca cliente, o simplemente actualizar Spring AMQP a la última versión (si usa el sistema de administración de dependencias).
Versión anterior del cliente utilizada
127.0.0.1
como valor predeterminado para lahost
opción deConnectionFactory
.fuente
localhost
así:ConnectionFactory("localhost")
guest/guest
cuenta IP asignada a Azure funciona globalmente! :(El error
ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.
puede ocurrir si las credenciales que su aplicación está intentando usar para conectarse a RabbitMQ son incorrectas o faltan.
Esto sucedió cuando las credenciales de RabbitMQ almacenadas en el
web.config
archivo de mi aplicación ASP.NET tenían un valor de""
para la contraseña en lugar del valor real de la cadena de contraseña.fuente
Para permitir el acceso de invitados de forma remota, escriba esto
hacia aqui
luego reinicie el servicio de windows rabbitmq (Fuente https://www.rabbitmq.com/access-control.html )
fuente
Para mí, la solución fue simple: el nombre de usuario distingue entre mayúsculas y minúsculas. No utilizar las mayúsculas correctas también provocará el error.
fuente
Nueva solucion:
El módulo de nodo no puede manejar
:
una contraseña correctamente. Incluso la URL codificada, como funcionaría normalmente, no funciona.¡No utilice caracteres especiales típicos de una URL en la contraseña!
Como uno de los siguientes:
: . ? + %
Respuesta original incorrecta:
El mensaje de error se queja claramente sobre el uso
PLAIN
, no significa que las credenciales sean incorrectas, significa que debe usar la entrega de datos cifrados (TLS) en lugar de texto sin formato.Cambiar
amqp://
la cadena de conexión aamqps://
(tenga en cuentas
) resuelve esto.fuente
simplemente agregue la contraseña de inicio de sesión para conectarse a RabbitMq
fuente
Si usa el número como contraseña, tal vez debería intentar cambiar su contraseña usando una cadena.
Puedo iniciar sesión usando deltaqin: 000000 en el sitio web, pero tuve esto mientras ejecutaba el programa. luego cambie la contraseña a deltaiqn. y funciona.
fuente
Hice exactamente lo que hizo @grepit.
Pero tuve que hacer algunos cambios en mi código Java:
En el proyecto Producer and Receiver modifiqué:
Al hacer eso, está conectando un host específico como el usuario que ha creado. ¡Esto funciona para mi!
fuente
Me enfrentaba a este problema debido al espacio vacío al final de la contraseña (spring.rabbitmq.password = rabbit) en la aplicación de arranque de primavera. Las propiedades se resolvieron al eliminar el espacio vacío. Espero que esta lista de verificación ayude a alguien a enfrentar este problema.
fuente
establecer ConnectionFactory o Connection nombre de host en localhost
fuente