RabbitMQ connection.start从未收到,可能是由于网络超时,net Web App

3yhwsihp  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(1500)

我正在尝试让一个.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
q1qsirdb

q1qsirdb1#

对于那些在未来登陆这里的人,我能够解决这个问题。
我的解决方案有多个项目。其中有RabbitMQ连接工作的MVC项目有RabbitMQ.Client作为NuGet包,但另一个项目没有。我通过NuGet将RabbitMQ.Client添加到另一个项目中,它解决了这个问题。

5ktev3wc

5ktev3wc2#

我将重新表述已被接受的答案。
如果您在程式库项目中有RabbitMQ客户端,请将RabbitMQ.Client Nuget套件的指涉也加入至主项目(MVC项目、工作、WCF服务等)的根目录。这样可以解决问题。

相关问题