还不知道异步队列?点进来看!

你不知道的分布式异步队列
关于异步队列你解多少?
它被誉为大数据高并发的终极解决方案。
来先给你介绍几种:
RabbitQM:是爱立信的产品,基于erlang语言(函数式编程大数据 scala语言)
MSMQ:是微软的产品 应用于.net框架
ActiveMQ:是apache的产品 做业务用途广泛
ZeroMQ:大数据中应用广泛,缺点容易丢失数据.但是业务系统中使用率较少
KafkaMQ:大数据项目中使用
以上几种被开发者偏爱的当属RabbitMQ。
这里一起来谈谈RabbitMQ, RabbitMQ是一个由erlang开发基于AMQP协议的开源实现。
官网地址:http://www.rabbitmq.com。
RabbitMQ作为一个消息代理,主要负责接收、存储和转发消息。好像普普通通,它到底有何精妙?
1.AMQP可靠的消息机制。
2.灵活丰富的消息路由。
3.消息的持久保存。
4.支持消息集群和分布式部署。
5.支持可视化插件
下面的内容就RabbitMQ从安装到C#驱动,有各种案例哟。
先来看看RabbitMQ的基本结构。
RabbitMQ的基本结构

上图诠释RabbitMQ的一个基本结构。
生产者Producer和消费者Consumer都是RabbitMQ的客户端。
Producer负责发送消息到RabbitMQ,Consumer负责接受并消费(处理)消息。
接下来我们结合下文来理解RabbitMQ的一些概念:
Broker(Server):
RabbitMQ的核心部位,可以接受客户端连接,实现AMQP消息队列和路由功能的进程。
我们可以把Broker叫做RabbitMQ服务器。
Virtual Host:
一个虚拟概念,一个Virtual Host里面可以有若干个Exchange和Queue,主要用于权限控制,隔离应用。
如应用程序A使用VhostA,应用程序B使用VhostB,那么我们在VhostA中只存放应用程序A的exchange,queue和消息,应用程序A的用户只能访问VhostA,不能访问VhostB中的数据。
Exchange:
接受生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列。
ExchangeType决定了Exchange路由消息的行为。
例如,在RabbitMQ中,ExchangeType有Direct、Fanout、Topic和Header四种,不同类型的Exchange路由规则是不一样的。
Queue:
消息队列,用于存储还未被消费者消费的消息,队列是先进先出的,默认情况下先存储的消息先被处理。
Message:
就是消息,由Header和Body组成。
Header是由生产者添加的各种属性的集合,包括Message是否被持久化、由哪个Message Queue接受、优先级是多少等,Body是真正传输的数据,内容格式为byte[]。
Connection:
连接,对于RabbitMQ而言,其实就是一个位于客户端和Broker之间的TCP连接。
Channel:
信道,仅仅创建了客户端到Broker之间的连接Connection后,客户端还是不能发送消息的。
需要在Connection的基础上创建Channel,AMQP协议规定只有通过Channel才能执行AMQP的命令,一个Connection可以包含多个Channel。之所以需要Channel,是因为TCP连接的建立和释放都是高成本的。
RabbitMQ的安装和配置
RabbitMQ是由erlang语言研发,RabbitMQ运行需要依赖于erlang环境,安装RabbitMQ需要先安装erlang运行时环境;就像人类生存需要食物、水一样。
1
安装erlang
下载地址:http://www.erlang.org/downloads
下载后安装即可
2
安装rabbitmq
下载地址:https://www.rabbitmq.com
下载后安装即可
3
安装web插件
到rabbitmq的安装路径下执行命令:
rabbitmq-plugins enable rabbitmq_management
4
浏览器访问地址
http://127.0.0.1:15672/
正常访问如下图

恭喜你,安装成功了;默认用户名和密码是guest;
同时你还会发现在你的Window服务下会多了一个Window服务。

注意:以上是正常的情况下
需要注意的是安装成功后,
需要从路径:
C:\Windows\System32\config\systemprofile下复制.erlang.cookie到rabbitMq的安装路径下的sbin文件夹下

C#驱动RabbitMQ
1.准备.NET5环境.
2.添加两个.NET Core控制台应用程序ZhaoXi.Advanced.RabbitMQ.Producer(生产者),ZhaoXi.Advanced.RabbitMQ.Consumption(消费者)
3.Nuget引入程序集:最新版本的RabbitMQ.Client
生产者代码


消费者代码


运行结果

