本地Docker容器RabbitMQ队列Java读取消息遇连接拒绝问题
解决RabbitMQ Docker容器连接拒绝问题(Java客户端)
嘿,这个问题一眼就能看出来啦——你的Java代码里把RabbitMQ的连接端口写错了!
问题根源
你通过Docker命令正确映射了RabbitMQ的AMQP协议端口:-p 5672:5672,这是RabbitMQ默认的客户端连接端口。但在你的Java代码里,你错误地写了:
factory.setPort(5762);
这里把5672误写成了5762,导致Java客户端尝试连接一个不存在的端口,自然就触发了Connection refused错误。
修正后的代码
只需要把端口改回正确的5672即可,其他代码逻辑没有问题:
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.DeliverCallback; public class Recv { private final static String QUEUE_NAME = "test-queue"; public static void main(String[] argv) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setPort(5672); // 这里改回正确的端口 factory.setUsername("guest"); factory.setPassword("guest"); factory.setVirtualHost("/"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); channel.queueDeclare(QUEUE_NAME, false, false, false, null); System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); DeliverCallback deliverCallback = (consumerTag, delivery) -> { String message = new String(delivery.getBody(), "UTF-8"); System.out.println(" [x] Received '" + message + "'"); }; channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { }); } }
额外排查建议(可选)
如果改完端口还是遇到问题,可以做以下检查:
- 确认Docker容器正在运行:执行
docker ps,查看some-rabbit2的状态是否为Up - 检查端口是否被其他程序占用:在Mac上可以用
lsof -i :5672查看端口占用情况
内容的提问来源于stack exchange,提问作者Ram Jashnani
相关产品推荐
相关产品推荐

