目前我的环境中有两个 rabbitmq docker 容器。其中一个将外部端口设置为 5672,另一个使用 5673。从我的 java 程序(未 dockerized)我试图通过使用 amqp-client maven 库连接到侦听 5673 的容器。 代码看起来像这样:
ConnectionFactory factory = new ConnectionFactory();
Connection connection = factory.newConnection("amqp://guest:guest@localhost:5673");
Channel channel = connection.createChannel();
channel.queueDeclare("region", true, false, false, null);
DefaultConsumer consumer =
new DefaultConsumer(channel) {
@Override
public void handleConsumeOk(String consumerTag) {
super.handleConsumeOk(consumerTag);
}
@Override
public void handleDelivery(
String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
throws IOException {
String message = new String(body, StandardCharsets.UTF_8);
log.info(message);
}
};
channel.queueBind("region", "gas_region", "");
channel.basicConsume("region", true, consumer);
我遇到的问题是我的 Java 程序一直连接到 5672 实例,而不是监听 5673 的实例。我注意到,因为我在 5672 实例而不是另一个实例中看到创建的队列,而且我的程序也找不到5673 实例中配置的交换。 有人对可能出现的问题有任何想法吗?
我的 rabbitmq 实例的 docker compose 配置如下所示:
input_mb:
image: rabbitmq:3-management
hostname: rabbit1
container_name: input_mb
ports:
- 5672:5672
- 15672:15672
volumes:
- "./input_mb/rabbitmq.config:/etc/rabbitmq/rabbitmq.config"
- "./input_mb/definitions.json:/etc/rabbitmq/definitions.json"
networks:
- common_network
output_mb:
image: rabbitmq:3-management
hostname: rabbit2
container_name: output_mb
ports:
- 5673:5672
- 15673:15672
volumes:
- "./output_mb/rabbitmq.config:/etc/rabbitmq/rabbitmq.config"
- "./output_mb/definitions.json:/etc/rabbitmq/definitions.json"
networks:
- common_network