版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/50996679

Nats的消息通信模型

作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs

6、NATS消息通信模型

NATS的消息通信是这样的:应用程序的数据被编码为一条消息,并通过发布者发送出去;订阅者接收到消息,进行解码,再处理。订阅者处理NATS消息可以是同步的或异步的。

* 异步处理
异步处理使用回调消息句柄处理消息,当有消息到来时,已注册的回调句柄接收并控制处理消息。整个过程客户端不会被阻塞,可以同步执行其它任务。异步处理可以采用多线程调度的设计。
* 同步处理
同步处理需要应用程序显示调用方法来处理到来的消息。这种显示调用是阻塞式的调用,会暂停任务直到消息可用。如果没有可用的消息,消息处理阻塞的周期由客户端设置。同步处理通常用于服务器等待并处理传入的请求消息,并发送响应给客户端。

NATS支持以下消息通信模型,包括:

1)发布/订阅模型


NATS实现了一个发布/订阅消息通信模型,NATS的发布/订阅是一对多的消息通信。发布者在一个主题上发送消息,任何注册(订阅)了此主题的客户端都可以接收到该主题的消息。订阅者可以使用主题通配符注册感兴趣的主题。
如果客户端没有注册某个主题(或者客户端不在线),那么该主题发布消息时,客户端不会收到该消息。NATS系统是一种“发送后不管”的消息通信系统,故如果需要高级服务,需要在客户端开发相应的功能。
对于异步消息通信,消息交付给订阅者的消息句柄。如果客户端没有句柄,那么该消息通信是同步的,那么客户端可能会被阻塞,直到它处理了该消息。

2)请求/响应模型


NATS支持两种请求-响应消息通信:P2P(点对点)和O2M(一对多)。P2P最快、响应也最先。而对于O2M,需要设置请求者可以接收到的响应数量界限。
在请求-响应的消息交换,发布请求操作会发布一个带预期响应的消息到Reply主题。
请求创建了一个收件箱,并在收件箱执行调用,并进行响应和返回

3)队列模型


NATS支持P2P消息通信的队列。要创建一个消息队列,订阅者需注册一个队列名。所有的订阅者用同一个队列名,形成一个队列组。当消息发送到主题后,队列组会自动选择一个成员接收消息。尽管队列组有多个订阅者,但每条消息只能被组中的一个订阅者接收。
队列的订阅者可以是异步的,这意味着消息句柄以回调方式处理交付的消息。异步队列订阅者必须建立处理消息的逻辑。

7、NATS的特性

NATS提供了以下独特的功能:
1)纯发布/订阅
永远不假定有接收者;总是在线
2)集群模式的服务器
NATS服务器可以集群;发布式的队列可以跨域集群;集群感知的客户端
3)订阅者的自动修剪
要支持可伸缩性,NATS提供了客户端连接的自动修剪功能;如果某个客户端APP处理消息很慢,NATS会自动关闭此客户端的连接;如果某个客户端在ping-pong时间间隔内未做响应,服务器会自动关闭此连接;客户端实现了重连逻辑
4)基于文本的协议
开发上手比较容易;不影响服务器的性能;可以直接用Telnet连接服务器

Nats的消息通信模型相关推荐

  1. JMS中的消息通信模型

    1. MQ简介: 消息队列(Message Queue,简称MQ),是应用程序与应用程序之间的一种通信方法.应用程序通过发送和检索出入列队的针对应用程序的数据 - 消息来通信,而无需专用连接来链接它们 ...

  2. nats需要消息服务器吗,浅谈NATS消息系统

    我用过很多消息系统,比如:简单的 Redis Streams:高效的 Kafaka 等等,不过自从我把编程语言切换到 Golang 以后,总觉得必须找个用 Golang 开发的消息系统才配得上门当户对 ...

  3. 使用NATS消息中间件实现云边协同

    1.NATS介绍 NATS(Message bus): 从CloudFoundry的总架构图看,位于各模块中心位置的是一个叫nats的组件.NATS是由CloudFoundry的架构师Derek开发的 ...

  4. ActiveMQ学习笔记(2)——JMS消息模型

    2019独角兽企业重金招聘Python工程师标准>>> 1.1 JMS模型简介 JMS支持两种消息通信模型: 点对点模型(Point to Point,P2P) 发布者/订阅者模型( ...

  5. Heartbeat的可靠消息通信实现分析

    Heartbeat的可靠消息通信实现分析 广东省Linux公共服务技术支持中心  颜定成 摘要 Heartbeat项目是Linux-HA工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通 ...

  6. 深入掌握JMS(一):JMS基础

    2019独角兽企业重金招聘Python工程师标准>>> 1. JMS基本概念      JMS(Java Message Service) 即Java消息服务.它提供标准的产生.发送 ...

  7. Kafka为什么这么快?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 在过去的几年里,软件架构领域发生了巨大的变化.人们不再认为所有的系 ...

  8. Redis详解和实战--云平台技术栈16

    导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的Redis! http://wdxtub.com/2016/07/05/redis-guide/ Redis 是 C 实现的基于内 ...

  9. 那些对数据实时性要求高的APP后端是怎么做的

    我们团队目前主要的工作只能就是一套网关系统,围绕网关或者是接入层系统来说,是存在一套通用解决方案的. 我们目前的系统做的并不是很好,也还有很大一部分的进步空间,围绕做好一套接入层系统或是网关系统,可以 ...

最新文章

  1. Selenium+Java+TestNG环境配置
  2. vim配置python开发环境_VIM插件管理及python开发环境配置
  3. java课程设计图片浏览器_java课程设计图片浏览器
  4. 西安python工资怎么样-python西安薪资
  5. 09day ASM单实例安装部署,并在ASM上安装oracle数据库
  6. 副部长和消费者拼单 拼多多发放农民丰收节交易会消费券
  7. c++ 取机器码_吉林c系列防倒灌风帽怎么卖,流线型通风器可定制
  8. 减负提质的新命题下,网易云信如何为课后服务升级?
  9. dell服务器sd卡装系统,DELL服务器通过sd卡安装系统(iDRACUsevFlash).doc
  10. 一个符合SEO优化标准的网站应具备哪些特征?
  11. leetcode 关于树的题目
  12. 张亚勤称云计算进入2.0时代,百度首推端云一体化芯片,开放110+AI能力
  13. scrapy 的依赖库安装和出现def write(self, data, async=False):的解决方法
  14. hdu-1521 排列组合 指数型母函数
  15. MCSA / Windows Server 2016 使用Hyper-V组件搭建实验环境
  16. CNN卷积神经网络原理详解(上)
  17. 微商公社新兵连第五天
  18. Prophet文档中文翻译--outliers
  19. 黄金分割法求函数最小值
  20. 对策论基础---矩阵对策的基本定理

热门文章

  1. Day07 - Ruby比一比:Symbol符号与String字串
  2. 逆序数技巧 - 牛客
  3. Dubbo原理与框架设计
  4. Windows7旗舰版磁盘分区详解—附分区步骤截图
  5. u3d 逐个点运动,路径运动。 U3d one by one, path motion.
  6. python语言特性-------python2.7教程学习【廖雪峰版】(一)
  7. 企业流程管理平台V2.0介绍
  8. php mysql insert 变量,php – 在blueimp / jquery-file-upload上添加更多自定义变量给mysql insert...
  9. ssm提交post_我用spring mvc做,用post方式提交,后台获取不到参数值,用get方式就可以,什么问题...
  10. 策略模式-Golang实现