C# Rabbitmq-从C连接到群集#
我们已经创建了一个具有两个节点(rabbit和rabbit1)的RabbitMQ集群。我们有4个队列,通过以下和配置为高可用队列 在集群之前,我们使用下面的代码片段连接到节点C# Rabbitmq-从C连接到群集#,c#,.net,rabbitmq,C#,.net,Rabbitmq,我们已经创建了一个具有两个节点(rabbit和rabbit1)的RabbitMQ集群。我们有4个队列,通过以下和配置为高可用队列 在集群之前,我们使用下面的代码片段连接到节点 var factory = new ConnectionFactory(){ HostName = _rabbitMQ_Hostname, UserName = _rabbitMQ_Username, Password = _rabbitMQ_Password}; using (var conne
var factory = new ConnectionFactory(){ HostName = _rabbitMQ_Hostname, UserName = _rabbitMQ_Username, Password = _rabbitMQ_Password};
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: _autoCancellationPNS_QueueName,
durable: true,
exclusive: false,
autoDelete: false,
arguments: null);
string message = appointmentId.ToString();
var body = Encoding.UTF8.GetBytes(message);
IBasicProperties properties = channel.CreateBasicProperties();
properties.DeliveryMode = 2;
channel.BasicPublish(exchange: _rabbitMQ_Exchange,
routingKey: _autoCancellationPNS_RoutingKey,
basicProperties: properties,
body: body);
returnMessage.ShortMessage = "Added to queue";
returnMessage.LongMessage = "Added to queue";
logger.Debug("|Added to queue");
}
我们应该如何处理集群?您可以连接到您喜欢的节点 交换和队列在集群中可见 在节点前面使用负载平衡器是常见的做法,因此客户端必须只知道平衡器IP/DNS
clients ----> balancer -----> RabbitMQ cluster
据我所知,.Net客户端不提供任何支持。您自己构建一些东西来选择并连接到集群上的节点
例如,如果要实现循环策略,伪代码如下
Get list of hostname/port combinations that form the cluster
do {
try {
connect to next hostname in the list
} catch (rabbit connection failed) {
maybe log a warning
}
} while not connected
当然,您现在需要考虑连接策略、重试次数、连接尝试次数、指数退避
。。。这就是为什么我强烈建议寻找一个已经提供了这种功能(以及更多)的库。一个这样的库是EasyNetQ
(可在nuget上获得),可能NServiceBus(带有RabbitMq传输)或MassTransit也很有趣
另一种方法是在各个节点前面设置智能负载平衡器(因此myrabbitcluster.mycompany.com在集群节点之间进行负载平衡,然后负责检测节点故障并将故障节点移出集群).RabbitMQ.Client支持连接到多个主机已有一年多了。它是固定的。您应该能够执行以下操作
using (var connection = connectionFactory.CreateConnection(hostList))
using (var channel = connection.CreateModel())
{
}
但是,使用这种方法,您需要自己执行所有恢复等操作。大约一年前,我们在EasyNetQ
客户端的稳定性方面遇到了巨大的问题,但自从我们开始使用集群环境以来,从来没有真正遇到过问题
免责声明:我是RawRabbit的创建者。请披露您是否制作了您建议的库。