.Net RabbitMQ之消息通讯 构建RPC服务器

一、消息投递服务html

RabbitMQ是一种消息投递服务,怎么理解这句话呢?即RabbitMQ即不是消息的生产者,也是消息的消费者.他就像现实生活中快递模式,消费者在电商网站上下单买了一件商品,此时对应的生产者(商家)则生产了一件货物(概念上的生产,可能已经生产好了),接着生产者(商家)将货物发送给快递公司,由于消费者下单了这个货物,至关于订阅了这件货物,因此快递公司将会把这件货物发送给对应的消费者.RabbitMQ就至关于这里面的快递公司.服务在生产者和消费者之间创建桥梁,即通讯.数据库

 

二、RabbitMQ的实现消息投递的方式服务器

生产者建立消息(包含消息的(有效载荷-即有效的信息,注:他不会关心消息的内容)和(标签-发送给哪一个消费者,注:RabbitMQ会根据标签吧消息发送给感兴趣的对方)),发布到对应的代理服务器.具体流程图以下性能

 

 

可是,上面的图并非很是准确,由于消费者并不会订阅其中的某一条消息,消费者链接到代理服务器,且他只会订阅一个消息队列,当生产者向消费者所订阅的消息队列上发送数据时,那么消费者会接收到该队列的数据.网站

且在RabbitMQ在消息路由的过程当中,消息的标签并无随有效载荷一同传递,除非生产者在消息的有效载荷中显示指定了消息的实际生产者,因此正常状况下,RabbitMQ并不会告诉消费者谁生产了这个消息.操作系统

 

三、信道线程

(1)、传统TCP链接RabbitMQ存在的问题代理

在使用RabbitMQ生产消息或者消费消息时,应用程序必须链接到RabbitMQ,因此一般状况下,你须要创建一个TCP链接,向数据库同样,可是创建TCP链接的代价是很大的,这也说明了为何在使用SqlClient或者其余数据库操做类库时,使用IDbConnection后,必须释放的缘由.且操做系统每秒建立TCP链接的数量有限.若是你知道套接字这个坑的话.因此高峰期使用线程去建立RabbitMQ链接,显然存在性能瓶颈.htm

(2)、为何要使用信道blog

为了解决(1)中的问题,RabbitMQ采用了信道的概念,即全部应用程序线程共用一个TCP链接,链接到RabbitMQ,线程调用RabbitMQ发布或者消费消息时,会在现有的TCP链接上建立一个信道,完成余下的操做.由于你能够每秒成千上万的建立信道而不会影响操做系统.同时你能够试试每秒成千上万的建立数据库链接,对比试试.

注:TCP链接和信道时包含关系,即TCP链接包含信道.在一条TCP链接上建立信道是没有限制的

 

四、使用RabbitMQ搭建RPC服务器

本系列文章跳过了RabbitMQ基础部分的介绍,直接进入RabbitMQ的RPC服务器构建,由于网上关于基础RabbitMQ的使用已经有不少,能够自行百度,关于基础(队列、交换机、信道等概念)能够参考https://www.cnblogs.com/stulzq/p/7551819.html,写的很好.下面进入正题.

相关文章
相关标签/搜索