我正在尝试让一个.Net 4.7.2 Web应用程序连接到运行在(Windows)Docker容器中的RabbitMQ服务器(与Web应用程序运行在同一台机器上)。
更新:使用非Docker版本的RabbitMQ也不能解决问题。控制台连接到非Docker RabbitMQ并可以发布消息,但.Net 4.7.2 Web应用程序仍然失败。
我使用的是RabbitMQ.Client 6.2.4(VMWare),连接代码如下:
ConnectionFactory connectionFactory = new ConnectionFactory();
Uri uri = new Uri("amqp://dan:dan@localhost:5672/");
connectionFactory.Uri = uri;
var theConnection = connectionFactory.CreateConnection();
(Note我也试过,结果一样:
var factory = new ConnectionFactory() { HostName = "localhost", Port = 5672, VirtualHost = "/", UserName = "dan", Password = "dan" };
using (var connection = factory.CreateConnection())
)
使用者 dan 以管理员身份存在,并拥有虚拟主机的权限。
我收到以下错误:
{"None of the specified endpoints were reachable"}
Data: {System.Collections.ListDictionaryInternal}
HResult: -2146232800
HelpLink: null
InnerException: {"connection.start was never received, likely due to a network timeout"}
Message: "None of the specified endpoints were reachable"
Source: "RabbitMQ.Client"
StackTrace: " at RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, String clientProvidedName)\r\n at XXXX.Common.BackgroundSubmit.SubmitBackgroundProcess.<>c.<SubmitJob>b__0_0(String connectionURI) in C:\\XXXX.Common\\BackgroundSubmit\\BackgroundSubmitProcess.cs:line 71"
TargetSite: {RabbitMQ.Client.IConnection CreateConnection(RabbitMQ.Client.IEndpointResolver, System.String)}
RabbitMQ日志报告此活动:
2022-05-18 02:18:59.346295+00:00 [info] <0.1164.0> accepting AMQP connection <0.1164.0> (172.19.0.1:55538 -> 172.19.0.2:5672)
2022-05-18 02:18:59.443173+00:00 [warning] <0.1164.0> closing AMQP connection <0.1164.0> (172.19.0.1:55538 -> 172.19.0.2:5672):
2022-05-18 02:18:59.443173+00:00 [warning] <0.1164.0> client unexpectedly closed TCP connection
我创建了一个小的控制台应用程序,该应用程序工作正常-它可以连接(并随后向队列生成一条消息)。
我已经尝试使用我的机器的实际IP地址以及127.0.0.1和控制台连接,但Web应用程序没有。
我看了几张票,心想这也许是个好线索:
https://stackoverflow.com/questions/68011963/factory-createconnection-generates-a-none-of-the-specified-endpoints-were-reac
这就是说,要确保System.Threading.Tasks.Extension、System.Threading.Channels和System.Memory在所有引用的项目中都是相同的版本,并且它们是。
还尝试使用 rabbitmq_localdev 作为URI中的rabbit主机名。
如有任何建议,我们将不胜感激!
谢谢你,
D级
下面是docker-compose .yaml的代码,如果有帮助的话:
version: "3.2"
services:
rabbitmq:
image: rabbitmq:3-management-alpine
container_name: 'rabbitmq'
ports:
- 5672:5672
- 15672:15672
# Expose 15672 for the management console, localhost:15672, guest/guest
# Expose 5672 for the qmpq port
# https://stackoverflow.com/questions/30747469/how-to-add-initial-users-when-starting-a-rabbitmq-docker-container
hostname: rabbitmq_localdev
volumes:
- ~/.docker-conf/rabbitmq/data/:/var/lib/rabbitmq/
- ~/.docker-conf/rabbitmq/log/:/var/log/rabbitmq
networks:
- rabbitmq_go_net
networks:
rabbitmq_go_net:
driver: bridge
2条答案
按热度按时间q1qsirdb1#
对于那些在未来登陆这里的人,我能够解决这个问题。
我的解决方案有多个项目。其中有RabbitMQ连接工作的MVC项目有RabbitMQ.Client作为NuGet包,但另一个项目没有。我通过NuGet将RabbitMQ.Client添加到另一个项目中,它解决了这个问题。
5ktev3wc2#
我将重新表述已被接受的答案。
如果您在程式库项目中有
RabbitMQ
客户端,请将RabbitMQ.Client
Nuget套件的指涉也加入至主项目(MVC项目、工作、WCF服务等)的根目录。这样可以解决问题。