当前位置: 首页 > 知识库问答 >
问题:

无法连接到C#程序中由Docker启动的RabbitMQ(使用RabbitMQ.Client)

孟杰
2023-03-14

我开始了一个RabbitMQ容器下面的文章:https://docs.docker.com/samples/library/rabbitmq使用图像包括管理工具

docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq:3-management
docker container ls --all
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS
         NAMES
8a42bb749074        rabbitmq:3-management   "docker-entrypoint.s…"   8 hours ago         Up 8 hours          4369/tcp, 5671-5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:8080->15672/tcp   some-rabbit

我可以通过http://localhost:8080访问管理工具

然后,我创建了这篇文章之后最基本的C#项目,以与我的本地RabbitMQ实例通信:

using System.Globalization;
using RabbitMQ.Client;

namespace RabbitCSharp
{
    public static class Program
    {
        public static void Main(params string[] args)
        {
            var factory = new ConnectionFactory
            {
                HostName = "localhost"
            };
            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                }
            }
        }
    }
}

但不幸的是,运行时出现以下错误:

Unhandled Exception: 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.Internals.S
ocketExceptionFactory+ExtendedSocketException: No connection could be made because the target machine actively refused it 127.0.0.1:5672
   at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
   at System.Net.Sockets.Socket.<>c.<ConnectAsync>b__272_0(IAsyncResult iar)
--- End of stack trace from previous location where exception was thrown ---
   at RabbitMQ.Client.TcpClientAdapter.ConnectAsync(String host, Int32 port)
   at RabbitMQ.Client.Impl.TaskExtensions.TimeoutAfter(Task task, Int32 millisecondsTimeout)
   at RabbitMQ.Client.Impl.SocketFrameHandler.ConnectOrFail(ITcpClient socket, AmqpTcpEndpoint endpoint, Int32 timeout)
   --- End of inner exception stack trace ---
   at RabbitMQ.Client.Impl.SocketFrameHandler.ConnectUsingAddressFamily(AmqpTcpEndpoint endpoint, Func`2 socketFactory, Int32 timeout, AddressFamily fami
ly)
   at RabbitMQ.Client.Impl.SocketFrameHandler..ctor(AmqpTcpEndpoint endpoint, Func`2 socketFactory, Int32 connectionTimeout, Int32 readTimeout, Int32 wri
teTimeout)
   at RabbitMQ.Client.ConnectionFactory.CreateFrameHandler(AmqpTcpEndpoint endpoint)
   at RabbitMQ.Client.EndpointResolverExtensions.SelectOne[T](IEndpointResolver resolver, Func`2 selector)
   --- End of inner exception stack trace ---
   at RabbitMQ.Client.EndpointResolverExtensions.SelectOne[T](IEndpointResolver resolver, Func`2 selector)
   at RabbitMQ.Client.Framing.Impl.AutorecoveringConnection.Init(IEndpointResolver endpoints)
   at RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, String clientProvidedName)
   --- End of inner exception stack trace ---
   at RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, String clientProvidedName)
   at RabbitCSharp.Program.Main(String[] args) in C:\Users\eperret\Desktop\RabbitCSharp\RabbitCSharp\RabbitCSharp\Program.cs:line 14

Process finished with exit code -532,462,766.

不太清楚RabbitClient为什么不能通过127.0。0.1:5672

有什么想法吗?

共有1个答案

公西宏峻
2023-03-14

我的集装箱端口5672似乎没有映射到本地端口5672。

我刚刚创建了另一个包含端口映射的容器,如下面的回答所示:

docker stop some-rabbit
docker commit some-rabbit some-rabbit-right
docker run -p 5672:5672 -p 8080:15672 -td some-rabbit-right

或直接运行新实例:

docker run -d --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 8080:15672 rabbitmq:3-management
 类似资料:
  • 我在我的kubernetes集群上部署了RabbitMQ服务器,我能够从浏览器访问管理用户界面。但是我的Spring启动应用程序无法连接到端口5672,我收到连接拒绝错误。如果我将我的application.yml属性从kuberntes主机替换为localhost并在我的机器上运行docker映像,同样的代码也可以工作。我不确定我做错了什么? 有人试过这种设置吗?请帮帮忙。谢谢!

  • 我有一个Java应用程序在Docker容器中运行,在另一个容器中运行。 如何连接容器以在Java应用程序中使用<code>rabbitmq</code>?

  • 我想在一个容器中运行 RabbitMQ,在另一个容器中运行工作进程。工作进程需要访问 RabbitMQ。 我希望这些通过进行管理。 这是我的<代码>docker compose。迄今为止,yml文件: 所以我暴露了RabbitMQ端口。工作进程使用以下URL访问RabbitMQ: 这是他们在官方教程中使用的,但是已被替换为,因为容器应该可以使用与容器名称相同的主机名来发现: 默认情况下,“合成”会

  • 问题内容: 我在CentOS机器上运行Jenkins和Docker。我有一个詹金斯(Jenkins)工作,可以拉出Github存储库并构建Docker映像。当我尝试运行作业时,出现错误: 即使我通过将jenkins添加到我的docker用户组并重新启动计算机,也会发生这种情况。我该如何解决? 顺便说一句,如果尝试将命令更改为我只是得到错误 问题答案: 在安装了Jenkins和Docker之后。将j

  • 这是我的设置: -内部程序-慢响 我目前被迫使用Windows进行开发,因此我成为了microsoft insider成员,并以WSL2模式安装了ubuntu。Docker desktop支持WSL2的集成,所以我尝试了它。。。一个星期以来,它工作得完美无缺。今天电脑重启后,我无法让docker再次运行。Ubuntu可以从Docker桌面看到注入的二进制文件,但它不能再连接到windows托管的D

  • 问题内容: 我想迁移到Docker,所以我才刚开始使用它。我已经在VirtualBox Ubuntu 15.10(Wily Werewolf)安装上安装了Docker,然后按照此处的建议,我尝试运行基本的nginx Docker映像: 因此,我检查了Docker是否正在运行: 这表明Docker守护程序实际上已经在运行,但是请确保我只是手动启动了Docker守护程序: 然后,我尝试再次运行该映像,