RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介

时间:2022-06-23 22:16:14

今天这篇博文是我翻译的RabbitMQ的最后一篇文章了,介绍一下RabbitMQ的C#开发的接口。好了,言归正传吧。

Net/C# 客户端 API简介

1、主要的命名空间,接口和类

  定义核心的API的接口和类被定义在RabbitMQ.Client这个命名空间下面:

  所以要想使用RabbitMQ的功能,需要以下代码
 
   using RabbitMQ.Client;

   【1】、核心API的接口和类如下:

    IModel:表示一个符合AMQP 0-9-1 协议的通道,并且提供了很多的操作方法

    IConnection:表示一个符合AMQP 0-9-1协议的连接对象,用户和RabbitMQ 服务端的连接

    ConnectionFactory:可以创建一个IConnection对象的实例。

    IBasicConsumer:表示一个消息的消费者,或者是使用者。

   【2】、其他有用的接口和类包含如下:

    DefaultBasicConsumer:通常用作消费者的基类,如果要编写自己的消费者程序,可以从该类继承。

   【3】、除RabbitMQ.Client之外的公共命名空间包括:   

    RabbitMQ.Client.Events:作为客户端库一部分的各种事件和事件处理程序。

       包括EventingBasicConsumer,一个基于C#事件处理程序构建的消费者实现。

    RabbitMQ.Client.Exceptions: 对用户可见的一些异常对象。

    所有其他命名空间都保留用于库的私有实现细节,尽管私有命名空间的成员通常可以使用该库的应用程序使用,以便允许开发人员实现其在库实现中发现的故障或设计错误的解决方法。 应用程序不能依赖于在库的版本中保持稳定的私有命名空间中出现的任何类,接口,成员变量等。


2、创建到代理的连接

  要连接到RabbitMQ,需要实例化一个ConnectionFactory并将其配置为使用所需的主机名,虚拟主机和凭据。 然后使用ConnectionFactory.CreateConnection()打开一个连接。 以下两个代码片段连接到hostName上的RabbitMQ节点:

ConnectionFactory factory = new ConnectionFactory(); // "guest"http://www.mamicode.com/"guest" by default, limited to localhost connections factory.UserName = user; factory.Password = pass; factory.VirtualHost = vhost; factory.HostName = hostName; IConnection conn = factory.CreateConnection(); ConnectionFactory factory = new ConnectionFactory(); factory.Uri = "amqp://user:[email protected]:port/vhost"; IConnection conn = factory.CreateConnection();


   由于.NET客户端使用比其他客户端更严格的AMQP 0-9-1 URI规范解释,因此在使用URI时必须小心。 特别是,主机部分不能被忽略,具有空名称的虚拟主机不可寻址。 所有出厂属性都有默认值。 如果属性在创建连接之前保持未分配,则将使用属性的默认值:

Username "guest" Password "guest" Virtual host "/" Hostname "localhost" port 5672 是针对一般而言的连接, 5671 是针对 TLS 连接的


   IConnection接口可以打开一个通道:

IModel channel = conn.CreateModel();


   通道Channel用于接收和发送消息

3、使用消息交换机和队列

    客户端应用程序将与消息交换机和消息队列(AMQP 0-9-1的高级构建块)配合工作。 【消息交换机】和【消息队列】在使用之前必须先声明他们。 声明任何类型的对象只是确保其中一个名称存在,如有必要,创建它。 继续前面的例子,以下代码声明一个消息交换机和一个队列,然后将它们绑定在一起。

model.ExchangeDeclare(exchangeName, ExchangeType.Direct); model.QueueDeclare(queueName, false, false, false, null); model.QueueBind(queueName, exchangeName, routingKey, null);


  这将声明了以下两个对象:

  【1】、非持久、非自动删除的、交换类型为“direct”的消息交换机;

  【2】、非持久、非自动删除、非排他的消息队列

  可以通过使用附加参数来定制消息交换机。 然后,上面的代码使用给定的路由键将队列绑定到消息交换机。 请注意,许多通道API(IModel)方法重载。 ExchangeDeclare方便的简单形式使用合理的默认值。 还有更多的表单具有更多的参数,可以根据需要修改这些默认值,并在需要时进行完全控制。 在整个API中使用这种“短版本,长版本”模式。

4、发布消息

  要将消息发布到消息交换机,请使用IModel.BasicPublish,如下所示: