专栏首页GreenLeaves.Net RabbitMQ之消息通信 构建RPC服务器

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

1、消息投递服务

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

2、RabbitMQ的实现消息投递的方式

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

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

且在RabbitMQ在消息路由的过程中,消息的标签并没有随有效载荷一同传递,除非生产者在消息的有效载荷中显示指定了消息的实际生产者,所以正常情况下,RabbitMQ并不会告诉消费者谁生产了这个消息.

3、信道

(1)、传统TCP连接RabbitMQ存在的问题

在使用RabbitMQ生产消息或者消费消息时,应用程序必须连接到RabbitMQ,所以通常情况下,你需要建立一个TCP连接,向数据库一样,但是建立TCP连接的代价是很大的,这也说明了为什么在使用SqlClient或者其他数据库操作类库时,使用IDbConnection后,必须释放的原因.且操作系统每秒创建TCP连接的数量有限.如果你知道套接字这个坑的话.所以高峰期使用线程去创建RabbitMQ连接,显然存在性能瓶颈.

(2)、为什么要使用信道

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

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

4、使用RabbitMQ搭建RPC服务器

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • .Net RabbitMQ系列之环境搭建于RabbitMQ基本介绍

    本系列主要讲解RabbitMQ在.Net环境下的应用,由于Linux环境下,本人Linux功力有限,所以本系列的RabbitMQ跑在Windows环境中.所以的...

    郑小超.
  • C# 多线程之List的线程安全问题

    网上关于List的线程安全问题将的很少,所以自己实验了一把,发现确实是线程不安全的.所以当你在进行多线程编程中使用了共享的List集合,必须对其进行线程安全处理...

    郑小超.
  • IIS 站点部署多级域名

    当站点的规模达到一定程度,往往会对业务进行拆分,部署到一台服务器的不同站点,,而一个域名(顶级域名)只能绑定一个站点(核心站点),这个时候就通过给顶级域名创建子...

    郑小超.
  • C#调用RabbitMQ实现消息队列

    我在刚接触使用中间件的时候,发现,中间件的使用并不是最难的,反而是中间件的下载,安装,配置才是最难的。

    Kiba518
  • RabbitMQ的介绍及使用进阶(Docker+.Net Core)

    RabbitMQ是什么? --"RabbitMQ是基于AMQP协议的队列服务",.

    小世界的野孩子
  • 图表系列——纵向对比分析优化要点

    图表对于展示来说是非常重要的一环,什么样的业务使用什么样的图能更快,更明确的反应业务指标也是我们需要考虑的。我们现在来聊一聊图表的使用及优化原理。

    逍遥之
  • 能进互联网公司的个个都是人才

    良月柒
  • 高科技引领新生活

    Google I/O Google I/O 寓为“开放中创新”(Innovation in the Open),它是由Google举行的网络开发者年会,讨论的...

    HTML5学堂
  • 前端性能优化

    用JS操作DOM,是比较慢的。为什么呢?首先,补充一下浏览器相关的知识。下图为浏览器结构:

    娜姐
  • 【干货教程】可视化大数据最易犯的10个错误:排序混乱,扭曲数据...

      从传播学的角度,这意味着以图片为载体的视觉叙事更加引人注意,更容易获得人们的好感。   通过可视化信息,我们的大脑可以更有效地合成和保留信息内容,增强对信息...

    BestSDK

扫码关注云+社区

领取腾讯云代金券