wordpress移除自豪的使用,电脑系统优化软件,设计深圳网站制作,接推广任务的平台译文链接#xff1a;https://www.infoworld.com/article/3200210/how-to-work-with-rabbitmq-in-c.htmlRabbitMQ 是一个非常流行的#xff0c;开源的#xff0c;使用Erlang语言编写的框架#xff0c;通常在电信级平台中作为消息中间件使用#xff0c;RabbitMQ实现了高级的… 译文链接https://www.infoworld.com/article/3200210/how-to-work-with-rabbitmq-in-c.htmlRabbitMQ 是一个非常流行的开源的使用Erlang语言编写的框架通常在电信级平台中作为消息中间件使用RabbitMQ实现了高级的AMQP协议用于实现进程间应用程序间服务器之间的消息交互而且它还有一个非常????????的特性你可以使用自定义插件来扩展RabbitMQ的功能而且它还支持多协议高性能高可靠集群以及高可用队列。创建队列的方式也多种多样你可以编码创建也可以通过管理员用户界面甚至通过 PowerShell 进行队列创建。RabbitMQ 术语 当你在用 RabbitMQ 时你要理解下面两个术语队列是一个数据结构上的概念支持 FIFO 特性在本文中消息队列就是一个可以存放消息的巨大缓存。producer(生产者) 的使命是生成数据并推送到队列的一种角色组件consumer(消费者)它能够从存储消息的队列中提取数据进行消费生产者-消费者 是并行编程中非常流行的设计模式之一。安装和启动 安装 RabbitMQ 是非常简单的在安装之前你需要先安装 Erlang根据你的操作系统选择正确版本呢的 Erlang下载地址https://www.erlang.org/downloads 然后继续下载安装 RabbitMQ Server 下载地址https://www.rabbitmq.com/download.html用 C# 构建 RabbitMQ 现在 Erlang 和 RabbitMQ 已经成功安装到你的windows上如果想和 Rabbitmq Server 进行交互你需要安装一个 RabbitMQ .NET client 可以用 NuGet Package Manager 控制台去安装 RabbitMQ Client。在 Visual Studio 中新建一个 Console Application然后通过 NuGet Package Manager 安装 RabbitMQ.Client 开发包假定 RabbitMQ Server 是运行在本机下面的代码片段创建了一个和 RabbitMQ Server 交互的 Connection 连接代码如下
ConnectionFactory connectionFactory new ConnectionFactory();
IConnection connection connectionFactory.CreateConnection();现在再次假定 RabbitMQ 跑在远程服务器上下面的方法返回了一个通往 Rabbitmq Service 的 Connection 连接。
public IConnection GetConnection(string hostName, string userName, string password){ConnectionFactory connectionFactory new ConnectionFactory();connectionFactory.HostName hostName;connectionFactory.UserName userName;connectionFactory.Password password;return connectionFactory.CreateConnection();}发送和接收消息 现在 RabbitMQ Service 已经在本地正常运行使用下面的方法向队列发送消息请注意通往 RabbitMQ Service 的 Connection 用的是默认配置。
public static void Send(string queue, string data){using (IConnection connection new ConnectionFactory().CreateConnection()){using (IModel channel connection.CreateModel()){channel.QueueDeclare(queue, false, false, false, null);channel.BasicPublish(string.Empty, queue, null, Encoding.UTF8.GetBytes(data));}}}channel 常用于和 server 进行通讯从而发送和接收消息不过上面这种队列是不持久的为啥这么说呢因为我在 QueueDeclare 方法的第二个参数中设置了 false所以送往这个 queue 的 message 只会存留于内存中一旦 server 重启这个数据将会丢失。下面的代码展示了如何从 queue 中消费数据。public static void Receive(string queue){using (IConnection connection new ConnectionFactory().CreateConnection()){using (IModel channel connection.CreateModel()){channel.QueueDeclare(queue, false, false, false, null);var consumer new EventingBasicConsumer(channel);BasicGetResult result channel.BasicGet(queue, true);if (result ! null){string data Encoding.UTF8.GetString(result.Body);Console.WriteLine(data);}}}}接下来的代码片段展示了如何使用 Send 和 Receive 方法进行数据的发送和消费。
static void Main(string[] args)
{Send(IDG,Hello World!);Receive(IDG);Console.ReadLine();
}值得一提的是RabbitMQ 对持久化也提供了非常好的支持有两种模式的 queue 可供选择持久化和非持久化如果采用持久化模式消息是存放在硬盘中的反之非持久化的模式数据仅仅存放于内存中一旦server重启非持久化模式的队列数据将会丢失最后补充一下持久化可以用于以下三个级别上QueueExchange 和 Message。