黄爸爸好 / 消息 / 还不知道异步队列?点进来看!

分享

   

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

2021-03-12  黄爸爸好

图片

你不知道的分布式异步队列

关于异步队列你解多少?

它被誉为大数据高并发的终极解决方案。

来先给你介绍几种:

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

生产者代码

图片
图片

消费者代码

图片
图片

运行结果

图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>