【RabbitMQ.Clinet笔记】连接

核心接口和类

  • IConnection:表示一个连接
  • IModel:表示一个Channel
  • ConnectionFactory:连接工厂
  • IBasicConsumer:代表一个消费者消息
  • DefaultBasicConsumer:常用的消费者基类

主要命名空间

RabbitMQ.Client:核心API
RabbitMQ.Client.Events:客户端库的各种事件和事件处理程序,包括 EventingBasicConsumer , 建立在消费者实现c#事件处理程序。
RabbitMQ.Client.Exceptions:用户可见的异常

连接

连接到RabbitMQ,要通过一个连接工厂和其配置为使用所需的主机,虚拟主机和证书。然后使用ConnectionFactory.CreateConnection()打开的连接。

ConnectionFactory connectionFactory = new ConnectionFactory
{
    HostName = "xxx.xxx.xxx.xxx",
    //Port = 5672,
    VirtualHost="/",
    UserName = "admin",
    Password = "admin"
};
IConnection connection = connectionFactory.CreateConnection();

也可以使用下面这种方式:

ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.Uri = "amqp://user:pass@hostName:port/vhost";
IConnection connection = connectionFactory.CreateConnection();

通道

IModel channel = connection.CreateModel();

IModel实例不应由多个线程同时使用,当多个线程同时使用IModel会抛出异常,如果多个线程需要访问特定的IModel实例,应用程序应该实施互斥本身。

IModel channel = connection.CreateModel();
lock (channel) {
  ch.BasicPublish(...);
}

断开RabbitMQ的连接

channel.Close(200, "Goodbye");
connection.Close();

注意,关闭频道被认为是良好的做法,但不是绝对必要的 - 它将在底层连接关闭时自动完成。

IConnection.AutoClose

默认值false,当连接上的最后一个打开通道关闭后连接是否自动关闭。

IConnection conn = factory.CreateConnection(...);
IModel channel = conn.CreateModel();
conn.AutoClose = true;

AutoClosetrue时,最后关闭的通道也将导致连接关闭。

网络故障恢复

客户端和RabbitMQ节点之间的网络连接可能失败,客户端支持自动恢复连接和拓扑

自动恢复连接执行以下操作

1、重新连接 (Reconnect)
2、还原连接侦听器( Restore connection listeners)
3、重新打开通道(Re-open channels)
4、还原频道侦听器(Restore channel listeners)
5、恢复通道basic.qos设置,发布者确认和事务设置( Restore channel basic.qos setting, publisher confirms and transaction settings)

要启用自动连接恢复,请将ConnectionFactory.AutomaticRecoveryEnabled设置为true

ConnectionFactory factory = new ConnectionFactory();
factory.AutomaticRecoveryEnabled = true;
factory.NetworkRecoveryInterval = TimeSpan.FromSeconds(10);//重试间隔
IConnection conn = factory.CreateConnection();

factory.NetworkRecoveryInterval:如果恢复由于异常失败,将在固定的时间间隔(默认为5秒)后重试。

拓扑恢复对channel执行以下操作

1、重新声明交换器
2、重新声明队列
3、恢复所有绑定
4、恢复所有消费者

拓扑恢复涉及恢复queues, exchanges, bindings, and consumers。 默认情况下启用它

ConnectionFactory factory = new ConnectionFactory();
Connection conn = factory.CreateConnection();
factory.AutomaticRecoveryEnabled = true;
factory.TopologyRecoveryEnabled  = true;
posted @ 2020-07-09 16:14  .Neterr  阅读(595)  评论(0编辑  收藏  举报