我刚开始在 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
问题解决了。问题是我需要将堆栈名称添加到 RMQ_ADDRESS 变量中。 Docker compose create {stack}_{service} 作为主机名。