docker 无法使用Java连接到rabbitmq示例

7y4bm7vi  于 2023-04-20  发布在  Docker
关注(0)|答案(2)|浏览(151)

目前,我的环境中有两个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
vc9ivgsu

vc9ivgsu1#

很显然我得说清楚

factory.setPort(5673);

之前

Connection connection = factory.newConnection("amqp://guest:guest@localhost:5673");

我希望这对某人有帮助。

xsuvu9jc

xsuvu9jc2#

您正在使用newConnection覆盖,该覆盖指定了连接名称:代码
如果您希望使用AMQP URI,请在ConnectionFactory示例上使用setUri方法:代码

**注意:**Team RabbitMQ监控rabbitmq-users邮件列表,仅在StackOverflow上偶尔回答问题。

相关问题