【问题标题】:How to make a connection to RabbitMQ which is installed in Linux如何连接到安装在 Linux 中的 RabbitMQ
【发布时间】:2021-09-22 07:59:35
【问题描述】:

我在尝试连接到安装在 Linux 中的 rabbitmq 并且我的应用程序支持 docker 时收到错误“指定的端点都无法访问”。任何人都知道如何连接到 rabbitmq 或如何解决上述问题错误??

【问题讨论】:

  • “如何解决上述错误”做一些基本的网络故障排除。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: c# rabbitmq


【解决方案1】:

这意味着客户端无法访问服务器。尝试找出 RabbitMQ 端口是否暴露给主机(使用 netstat 检查打开的端口)。

netstat -an

如果端口没有通过 Docker 公开,你可以这样做:

  ports:
    - 5672:5672
    - 15672:15672

如果它暴露了,我会检查你是否可以使用 netcat 或 telnet 连接到端口。如果这不起作用,则可能是 Linux 中的防火墙。

如果所有端口均可访问,请确保您的连接正确。您应该使用端口 5672 或至少在运行 Rabbit MQ 服务器的地方。 15672 是 HTTP API 端口和管理 UI。

请注意,UI 和 HTTP API 端口(通常为 15672)不支持 AMQP 0-9-1、AMQP 1.0、STOMP 或 MQTT 连接。这些客户端应该使用单独的端口。

连接字符串:

{  
   ….  
  "Rabbit-MQ-AMPQ": "amqp://[username]:[password]@21.72.175.25"  
  ….  
} 

您可以尝试不指定端口,看看会发生什么。

示例:

/* 
using RabbitMQ.Models; 
using RabbitMQ.Client; 
using Microsoft.Extensions.Configuration; 
using System.Text; 
*/  
 public void Produce(string message)  
        {  
            var factory = new ConnectionFactory()  
            {  
                Uri = new Uri(configuration["Rabbit-MQ-AMPQ"])  //Through DI
            };  
  
            using (var conn = factory.CreateConnection())  
            {  
                using (var channel = conn.CreateModel())  
                {  
  
                    channel.QueueDeclare(queue: "messages_share",  
                                durable: false,  
                                exclusive: false,  
                                autoDelete: false,  
                                arguments: null);  
  
                    var body = Encoding.UTF8.GetBytes(message);  
                    channel.BasicPublish(exchange: "",  
                                         routingKey: "messages_share",  
                                         basicProperties: null,  
                                         body: body);  
  
                    Console.WriteLine(" [x] Sent {0}", message);  
                }  
            }  
  
        }  

免责声明:检查您的 RabbitMQ 服务器配置,并了解为确认​​端口所做的工作的性质。

【讨论】:

  • 感谢您的回复...但它对我不起作用。我有带有 HTTP 协议的 rabbitmq URL,但我的应用程序将端点称为“amqp”协议……这是问题吗??
  • 那么rabbit MQ端口暴露给主机OS了?您能否提供更多关于您所做的工作和配置的详细信息?您可以将其添加到问题中以帮助我们提供帮助。
  • 是的。端口暴露。 rabbit MQ 安装在 Linux 中,并且是 dockerized。假设“21.72.175.25:15672”是rabbit MQ URL,connectionfactory参数的端点是“amqp://21.72.175.25:15672”。
  • rabbitMQ URL 是否需要开启 amqp 协议?
  • 请注意,管理 UI 和 HTTP API 端口(通常为 15672)不支持 AMQP 0-9-1、AMQP 1.0、STOMP 或 MQTT 连接。这些客户端应该使用单独的端口。
猜你喜欢
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 2020-04-07
  • 2016-05-13
  • 2017-09-11
  • 2019-04-19
  • 2016-07-22
相关资源
最近更新 更多