RabbitMQ:没有指定的端点可以访问

时间:2015-07-15 05:42:58

标签: c# rabbitmq windows-server-2012

我的rabbitmq应用程序在Windows 2012服务器上运行,我随机使用它来获取此错误。

Exception Type: RabbitMQ.Client.Exceptions.BrokerUnreachableException



None of the specified endpoints were reachable

   at RabbitMQ.Client.ConnectionFactory.CreateConnection()

   at Program.Main(String[] args)

Stream does not support writing.

   at System.IO.BufferedStream.EnsureCanWrite()

   at System.IO.BufferedStream.Write(Byte[] array, Int32 offset, Int32 count)

   at RabbitMQ.Client.Impl.SocketFrameHandler.SendHeader()

   at RabbitMQ.Client.Framing.Impl.Connection.StartAndTune()

   at RabbitMQ.Client.Framing.Impl.Connection.Open(Boolean insist)

   at RabbitMQ.Client.Framing.Impl.Connection..ctor(IConnectionFactory factory, Boolean insist, IFrameHandler frameHandler)

   at RabbitMQ.Client.Framing.Impl.ProtocolBase.CreateConnection(IConnectionFactory factory, Boolean insist, IFrameHandler frameHandler)

   at RabbitMQ.Client.ConnectionFactory.CreateConnection()

连接失败的原因可能是什么,并自动开始连接。

任何人都可以帮助我。

6 个答案:

答案 0 :(得分:3)

似乎有几种情况下你可以得到“没有指定的端点可以访问”错误。

当RabbitMQ服务未运行,或者RabbitMQ服务正在运行但处于错误状态时,以及当客户端无法连接时,我都看到了这一点。用户无权访问它尝试连接的虚拟主机。

答案 1 :(得分:2)

很难说究竟是什么问题,但导致发生此类问题的原因之一是RabbitMQ心跳,你可以改变这个值。有关详细信息,请查看此linke Detecting Dead TCP Connections with Heartbeats

ConnectionFactory cf = new ConnectionFactory();

// set the heartbeat timeout to 60 seconds
cf.setRequestedHeartbeat(60);

答案 2 :(得分:2)

我遇到了同样的问题,我通过使用 docker compose 创建新的 RabbitMQ Docker 容器解决了这个问题:

// utils/localStorage.js
export function getItem(keyName) {
  try {
    return JSON.parse(localStorage.getItem(keyName));
  } catch (error) {
    console.log(error);
    return null;
  }
}

export function setItem(keyName, value) {
  localStorage.setItem(keyName, JSON.stringify(value));
}

export function removeItem(keyName) {
  localStorage.removeItem(keyName);
}

export function clearAll() {
  localStorage.clear();
}

并通过我必须在 appsettings.json 文件中将主机设置为我的本地主机 IP 地址的代码访问它:

 rabbitmq:
    container_name: rabbitmq
    tty: true
    hostname: rabbitmq
    ports:
      - "15672:15672"
      - "5672:5672"
    image: rabbitmq:3-management
    environment:
      - RABBITMQ_DEFAULT_USER=user
      - RABBITMQ_DEFAULT_PASS=password

有了这个,它对我有用。

答案 3 :(得分:1)

我遇到了这个问题,最后我可以通过添加ConnectionFactory类的“Ssl”属性来解决它,并指定了“ServerName”子属性。

这是我做的,它连接到Rabbit MQ服务器。 请注意以下代码中的“ ServerName ”部分:

var rabbitMqConnectionFactory
    = new ConnectionFactory
        {
            HostName = rabbitMqHostName,
            Port = rabbitMqPort,
            UserName = rabbitMqUserName,
            Password = rabbitMqPassword,
            VirtualHost = rabbitMqVirtualHost,
            RequestedHeartbeat = 60,
            Ssl =
                {
                    **ServerName** = rabbitMqHostName,
                    Enabled = useSsl
                }
        };

答案 4 :(得分:0)

重要的是:哪个操作系统使用客户端? 它运行的是Windows XP / 7吗?

它可能已达到并发TCP连接的限制。

此处is a link about如何在Windows 7上增加该限制。

使用运行Win7的.NET RabbitMQ客户端进行压力测试时遇到了同样的问题。

答案 5 :(得分:0)

我有同样的问题。在我的情况下,端口5672已关闭。 为了找出问题所在,我在代码中激活了InnerException。