ERROR com.rabbitmq.client.impl.ForgivingExceptionHandler - An unexpected connection driver error occ

问题描述

Java访问远程服务器的RabbitMQ失败
在这里插入图片描述

我的问题

  1. 导入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
    <version>2.6.13</version>
</dependency>
  1. 配置文件
rabbitmq:
    host: 154.xx.xx.xx  # 远程服务器的地址
    port: 5672
    username: test  # 用户名
    password: 1234  # 密码
    virtual-host: /
  1. 测试代码
public class InitRabbitMq {

    public static void doInit() {
        try {
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("154.xx.xx.xx");
            Connection connection = factory.newConnection(); // error
            // ... 
            log.info("消息队列启动成功");
        } catch (Exception e) {
            log.error("消息队列启动失败");
        }
    }

    public static void main(String[] args) {
        doInit();
    }
}

发现问题出现在哪了吗?

tnnd,配置文件压根没有,这里只是一个测试单元,跟你配置文件配置的什么没关系。
这里连接的是 154.xx.xx.xx:5672的rabbitmq,用户是guest、密码是guest(因为没有在代码中设置用户名和密码,所以使用默认的用户名和密码,都是guest),而不是配置文件自定义的远程连接用户test,密码1234

好吧,我承认这真的很蠢,本来都不打算提的,还是写出来给参考。解决也很简单:代码中设置用户名和密码即可,factory.setUsername("test"); factory.setPassword("1234");

梳理

我知道,你肯定不会犯我这个错误,我的解决方案大概率也对你也没有帮助。但是,我也走了很多弯路,也十分愿意分享我的一些收获。

RabbitMQ需要占用两个端口5672和15672,所以首先,服务器要开放这两个端口。

5672端口: 简单的说,你的Java程序访问RabbitMQ,用的就是 5672端口。
15672端口: 一个RabbitMQ的远程面板,可以通过浏览器访问,http://服务器地址:15672, 这里用的就15672端口。

我连接的是我centos服务器配置的rabbitmq,而不是本地windows系统上的rabbitmq。账号相关:

下载完rabbitmq,默认会创建一个用户名和密码都为guest的账号,这个账号有最高的administrator权限,当然很可惜,这个账号只支持本地访问,不支持远程访问, 所以你需要创建一个支持远程访问的用户(guest账号好像也可以配置支持远程访问,这里不多说)。

# 创建账号和密码
rabbitmqctl add_user 用户名 密码

# 设置用户角色:administrator (还有其他用户角色,这里建议直接管理员权限,不然后面可能由于权限不足,又出问题) 
rabbitmqctl set_user_tags 用户名 administrator 

# 为用户添加资源权限,添加配置、写、读权限
rabbitmqctl set_permissions -p "/" 用户名 ".*" ".*" ".*"

要支持远程访问,需要是修改rabbitmq.conf文件吗

不需要。 其实就已经可以用上面设置的用户进行访问了,支持浏览器通过15672端口访问,同样也支持Java程序通过5672端口访问,所以就不用配置了。

rabbitmq的日志

cd /var/log/rabbitmq/ # 一般存放在这个文件夹下, 名为rabbit@ECSxxx.log
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值