从 .Net WebAPI 连接到 Docker Swarm 中的 RabbitMQ/Masstransit 服务时出现问题

问题描述 投票:0回答:1

我刚开始在 Docker Swarm 中使用 RabbitMQ/Masstransit。从所述堆栈中的其他服务(C# .Net WebAPI)连接到我的堆栈中的 RabbitMQ 服务时遇到问题。从堆栈外部连接到 RabbitMQ 服务工作正常。

我收到的错误消息是:

Unhandled exception. System.UriFormatException: Invalid URI: The hostname could not be parsed.

RabbitMQ 服务在我的 compose yaml 中定义如下:

  rabbitmq:
    image: docker.io/masstransit/rabbitmq:latest
    ports:
      - "5672:5672"
      - "15672:15672"
    deploy:
      mode: replicated
      replicas: 1
    networks: 
    - smartflow_default

WebAPI 服务在我的 compose yaml 中定义如下:

  apiexports:
    image: docker.io/renegisbertzdareit/padex.smartflow.exports:1.0.1
    ports:
      - "41003:443"
      - "42003:80"
    deploy:
      mode: replicated
      replicas: 3
    environment:
      - ASPNETCORE_Kestrel__Certificates__Default__Password=********
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/run/secrets/padex_solution_nl_wildcard_certificate
      - ASPNETCORE_URLS=https://+;http://+
      - LOGGING_DEFAULT_LANGUAGE="en-us"
      - LOGGING_MINIMUM_LEVEL="Debug"
      - LOGGING_FILE_PATH="/var/log/log-.json"
      - RMQ_ADDRESS="rabbitmq:5672"
      - RMQ_USERNAME="guest"
      - RMQ_PASSWORD="guest"
    networks:
      - smartflow_default
    secrets:
      - padex_solution_nl_wildcard_certificate 

使用 WebAPI .Net 解决方案,我尝试使用以下代码进行连接:

builder.Services.AddMassTransit(x =>
{
    x.UsingRabbitMq((context, cfg) =>
    {
        cfg.Host(new Uri($"amqp://{Environment.GetEnvironmentVariable("RMQ_USERNAME")}:{Environment.GetEnvironmentVariable("RMQ_PASSWORD")}@{Environment.GetEnvironmentVariable("RMQ_ADDRESS")}"));
        cfg.ConfigureEndpoints(context);
    });
});

希望得到一些帮助来找出我做错了什么。谢谢!

我也尝试过其他地址:

rabbitmq:15672
rabbitmq
10.203.1.30:15672
10.203.1.30:5672
10.203.1.30
.net rabbitmq docker-swarm masstransit
1个回答
0
投票

问题解决了。问题是我需要将堆栈名称添加到 RMQ_ADDRESS 变量中。 Docker compose create {stack}_{service} 作为主机名。

© www.soinside.com 2019 - 2024. All rights reserved.