你不知道的分布式异步队列 关于异步队列你解多少? 它被誉为大数据高并发的终极解决方案。 来先给你介绍几种: RabbitQM:是爱立信的产品,基于erlang语言(函数式编程大数据 scala语言) 以上几种被开发者偏爱的当属RabbitMQ。 这里一起来谈谈RabbitMQ, RabbitMQ是一个由erlang开发基于AMQP协议的开源实现。 官网地址:http://www.。 RabbitMQ作为一个消息代理,主要负责接收、存储和转发消息。好像普普通通,它到底有何精妙? 1.AMQP可靠的消息机制。 下面的内容就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路由规则是不一样的。 消息队列,用于存储还未被消费者消费的消息,队列是先进先出的,默认情况下先存储的消息先被处理。 就是消息,由Header和Body组成。 Header是由生产者添加的各种属性的集合,包括Message是否被持久化、由哪个Message Queue接受、优先级是多少等,Body是真正传输的数据,内容格式为byte[]。 连接,对于RabbitMQ而言,其实就是一个位于客户端和Broker之间的TCP连接。 信道,仅仅创建了客户端到Broker之间的连接Connection后,客户端还是不能发送消息的。 需要在Connection的基础上创建Channel,AMQP协议规定只有通过Channel才能执行AMQP的命令,一个Connection可以包含多个Channel。之所以需要Channel,是因为TCP连接的建立和释放都是高成本的。 RabbitMQ的安装和配置 RabbitMQ是由erlang语言研发,RabbitMQ运行需要依赖于erlang环境,安装RabbitMQ需要先安装erlang运行时环境;就像人类生存需要食物、水一样。 1 安装erlang 下载地址:http://www./downloads 下载后安装即可 2 安装rabbitmq 下载地址:https://www. 下载后安装即可 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 生产者代码 消费者代码 运行结果 |
|