从.NET应用程序连接到RabbitMQ时出错

qyyhg6bp  于 2022-12-04  发布在  RabbitMQ
关注(0)|答案(1)|浏览(428)

我的后端服务在.NET中,我在Docker容器中运行它。同时,rabbitmq也在容器中运行。
运行服务时,它从.NET应用程序中抛出以下错误消息:

There was error while connecting Rabiitmq Broker.
      RabbitMQ.Client.Exceptions.BrokerUnreachableException: None of the specified endpoints were reachable
       ---> System.AggregateException: One or more errors occurred. (Connection failed)
       ---> RabbitMQ.Client.Exceptions.ConnectFailureException: Connection failed
       ---> System.Net.Sockets.SocketException (111): Connection refused
         at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
         at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
         at System.Threading.Tasks.ValueTask.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
      --- End of stack trace from previous location ---
         at RabbitMQ.Client.Impl.TcpClientAdapter.ConnectAsync(String host, Int32 port)
         at RabbitMQ.Client.Impl.TaskExtensions.TimeoutAfter(Task task, TimeSpan timeout)
         at RabbitMQ.Client.Impl.SocketFrameHandler.ConnectOrFail(ITcpClient socket, AmqpTcpEndpoint endpoint, TimeSpan timeout)
         --- End of inner exception stack trace ---
         at RabbitMQ.Client.Impl.SocketFrameHandler.ConnectOrFail(ITcpClient socket, AmqpTcpEndpoint endpoint, TimeSpan timeout)


 var factory = new ConnectionFactory { HostName = hostName, Port = 5672 };
  factory.UserName = PathManager.DataPathManager.GetRabbitmqUserName();
  factory.Password = PathManager.DataPathManager.GetRabbitmqPassword();

             
  _logger.LogInformation($"{module} > ExecuteAsync > factory object created");
                var connection = factory.CreateConnection();
                _logger.LogInformation($"{module} > ExecuteAsync > CreateConnection() method called");

  channel = connection.CreateModel();
  _logger.LogInformation($"{module} > ExecuteAsync > CreateModel() method called");

我可以发送信息,但不能阅读它。但是,在接收端得到这个

There was error while synchronizing with Broker queue.
  System.NullReferenceException: Object reference not set to an instance of an object.
     at Indus.Product.Manager.Managers.ProcessEventHandler.Receive(IModel channel) in /agent/work/5/s/Service/Source/MicroServices/Services/Product/Manager/Managers/Handler.cs:line 128
     at Indus.Product.Manager.SynchronisationWorker.ExecuteAsync(CancellationToken stoppingToken) in /agent/work/5/s/Service/Source/MicroServices/Services/Product/Manager/Handler.cs:line 96
bvn4nwqk

bvn4nwqk1#

此错误消息表示.NET应用程序无法连接到容器中运行的RabbitMQ代理。这可能是由于多种原因造成的,例如代理配置不正确、网络连接问题或无法从.NET应用程序访问代理。
要解决此问题,可以尝试以下步骤:
1.验证RabbitMQ代理是否正在运行并且可以从.NET应用程序访问。您可以尝试使用rabbitmqctl命令行工具连接到代理,或者使用类似telnet的工具在正确的端口(通常为5672)上建立到代理的连接。
1.确保使用正确的主机名和端口连接RabbitMQ代理。在您提供的代码片段中,主机名设置为hostName,端口设置为5672。如果代理运行在不同的主机或端口上,您需要相应地更新这些值。
1.检查RabbitMQ代理配置,确保它允许来自.NET应用程序的连接。默认情况下,RabbitMQ代理只接受来自localhost的连接,因此您可能需要将.NET应用程序的主机名或IP地址添加到rabbitmq.config文件中的允许连接列表中。
1.如果您使用防火墙或其他网络安全措施,请确保它们不会阻止到RabbitMQ代理的连接。您可能需要为RabbitMQ代理的端口(通常为5672)添加一个例外,以允许.NET应用程序连接。
检查完这些项目后,您应该能够连接到RabbitMQ代理并发送和接收消息。如果您仍然遇到问题,启用RabbitMQ代理和.NET应用程序中的日志记录以获取有关连接失败的更多详细信息可能会有所帮助。

相关问题