我正处于异常
之下org.springframework.amqp.AmqpAuthenticationException:com.rabbitmq.client.AuthenticationFailureException:ACCESS_REFUSED - 使用身份验证机制PLAIN拒绝登录。有关详细信息,请参阅代理日志文件。
配置:Windows上的RabbitMQ 3.3.5
在%APPDATA%\RabbitMQ\rabbit.config
的配置文件中
我根据https://www.rabbitmq.com/access-control.html
[{rabbit, [{loopback_users, []}]}].
我也试过创建一个用户/ pwd - 测试/测试似乎没有使它工作。
尝试从this发布的步骤。
其他配置详情如下:
Tomcat托管了Spring Application Context:
<!-- 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());
}
}
}
以上异常Block给出以下异常
org.springframework.amqp.AmqpAuthenticationException:com.rabbitmq.client.AuthenticationFailureException:ACCESS_REFUSED - 使用身份验证机制PLAIN拒绝登录。有关详细信息,请参阅代理日志文件。
错误记录
=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'}}
请在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>
如果您有任何想法/建议,请告诉我
答案 0 :(得分:88)
我确信Artem Bilan解释here可能是导致此错误的原因之一:
Caused by: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the
但我的解决方案是我使用默认用户名和密码(访客/访客)登录了rabbitMQ管理页面(http://localhost:15672/#/users),然后添加了新用户,并为该新用户启用了权限从虚拟主机访问它,然后使用新的用户名和密码而不是默认的guest虚拟机,这清除了错误。
答案 1 :(得分:32)
用户'来宾'只能通过localhost连接
自RabbitMQ 3.3.x以来,这是真的。因此,您应该升级到客户端库的相同版本,或者只是将Spring AMQP升级到最新版本(如果使用依赖管理系统)。
以前版本的客户端使用127.0.0.1
作为host
的{{1}}选项的默认值。
答案 2 :(得分:32)
完成@ cpu-100 answer,
如果您不想启用/使用Web界面,可以使用如下命令行创建新凭据,并在代码中使用它连接到RabbitMQ。
$ rabbitmqctl add_user YOUR_USERNAME YOUR_PASSWORD
$ rabbitmqctl set_user_tags YOUR_USERNAME administrator
$ rabbitmqctl set_permissions -p / YOUR_USERNAME ".*" ".*" ".*"
答案 3 :(得分:6)
错误
ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.
。
当我的ASP.NET应用程序的web.config
文件中存储的RabbitMQ凭据的密码值为""
而不是实际的密码字符串值时,我就会发生这种情况。
答案 4 :(得分:4)
要允许访客远程访问,请写下
[{rabbit, [{loopback_users, []}]}].
到这里
c:\Users\[your user name]\AppData\Roaming\RabbitMQ\rabbitmq.config
然后重启rabbitmq windows服务(来源https://www.rabbitmq.com/access-control.html)
答案 5 :(得分:2)
只需添加登录密码即可连接到RabbitMq
CachingConnectionFactory connectionFactory =
new CachingConnectionFactory("rabbit_host");
connectionFactory.setUsername("login");
connectionFactory.setPassword("password");
答案 6 :(得分:2)
如果使用数字作为密码,也许您应该尝试使用字符串更改密码。
我可以在网站上使用deltaqin:000000登录,但在运行该程序时已登录。然后将密码更改为deltaiqn。而且有效。
答案 7 :(得分:1)
新解决方案:
节点模块无法正确处理密码中的:
。即使是url编码,就像它会正常工作一样,它也不起作用。
请勿在密码中使用网址中的典型特殊字符!
如下所示:: . ? + %
原文,错误答案:
错误消息明显抱怨使用PLAIN
,这并不意味着凭证是错误的,这意味着您必须使用加密数据传送(TLS)而不是明文。
将连接字符串中的amqp://
更改为amqps://
(请注意s
)解决此问题。
答案 8 :(得分:0)
对我来说,解决方案很简单:用户名区分大小写。不正确使用大写字母也会导致错误。
答案 9 :(得分:0)
我所做的正是@grepit所做的。
但是我必须对Java代码进行一些更改:
在生产者和接收者项目中,我进行了更改:
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("your-host-ip");
factory.setUsername("username-you-created");
factory.setPassword("username-password");
这样做,您正在以创建的用户身份连接特定的主机。 它对我有用!
答案 10 :(得分:0)
由于弹簧启动应用程序中密码(spring.rabbitmq.password = rabbit)末尾有空白,我面临着这个问题。解决了删除空白的问题。希望这份清单能帮助面对这一问题的人。
答案 11 :(得分:0)
在 localhost 上,默认使用 'amqp://guest:guest@localhost:5672'
所以在远程或托管的 RabbitMQ 上。假设您拥有以下凭据
用户名:niceboy 密码:notnice 主持人:goxha.com 端口:1597
那么你应该传递的uri是
amqp://niceboy:notnice@goxha.com:1597
遵循模板 amqp://user:pass@host:10000
如果你有一个虚拟主机,你可以做 amqp://user:pass@host:10000/vhost 其中尾随的虚拟主机将是你的虚拟主机的名称
答案 12 :(得分:-3)
将ConnectionFactory或Connection主机名设置为localhost