问题描述:
在linux上使用docker安装rabbitmq镜像,启动rabbitMQ后,web管理页面能够访问,但是在idea中的demo却一直报异常:connection refuse
百思不得其解
//生产消息
@Test
public void testSendMessage() throws Exception {
//创建链接mq 的链接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
//设置链接rabbitmq的主机
connectionFactory.setHost("192.168.175.100");
//设置端口
connectionFactory.setPort(5672);
//设置连接哪个虚拟主机
connectionFactory.setVirtualHost("ems");
//设置访问虚拟主机的用户名和密码
connectionFactory.setUsername("ems");
connectionFactory.setPassword("ems");
//获取链接对象
Connection connection = connectionFactory.newConnection();
//获取链接中的通道对象
Channel channel = connection.createChannel();
//通道去绑定对对应的消息队列
//参数1:队列的名称,如果队列不存在会自动创建
//参数2:定义队列特性是否要持久化,true持久化,false不持久化
//参数3:exclusive 是否独占队列:当前队列只允许当前链接可用,其他连接不能使用
//参数4:autoDelete:是否在消费完成后自动删除队列
//参数5:额外的参数
channel.queueDeclare("hello",false,false,false,null);
//发布消息
//参数1:交换机名称
//参数2:队列名称
//参数3:传递消息额外设置
//参数4:消息的具体内容
channel.basicPublish("","hello",null,"hello,world".getBytes());
channel.close();
connection.close();
}
原因分析:
以我的直观感受来说,Connection refuse 通常是 host地址错误,username,password错误,virtualhost错误等。
把以上修改之后发现仍未解决异常
最后发现使用docker启动rabbitmq的时候只映射了15672端口,没有映射5672端口
解决方案:
重新映射rabbitmq的端口
docker run -d --name myrabbitmq -p 15672:15672 -p 5672:5672 myrabbitmq_i
测试成功