消息通信模型

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

  

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

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

1. 发布/订阅模型

  

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

  有关发布/订阅相关详情,情查看我的另外一篇博客:NATS_03:发布/订阅机制

2. 请求/响应模型

  

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

3. 队列模型

  

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

  队列模型一般常用语数据队列使用,例如:采集从网页上采集的数据经过处理直接写入到该队列,接收端一方可以起多个线程同时读取其中的一个队列,其中某些数据被一个线程消费了,其他线程就看不到了,这种方式为了解决采集量巨大的情况下,后端服务可以动态调整并发数来消费这些数据。说白了就一点,上游生产数据太快,下游消费可能处理不过来,中间进行缓冲,下游就可以根据实际情况进行动态调整达到动态平衡。

NATS的特性

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

NATS_02:NATS消息通信模型的更多相关文章

  1. NATS—消息通信模型

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

  2. JMS中的消息通信模型

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

  3. 一种开源的分布式消息系统Nats

    一种开源的分布式消息系统Nats 作者:chszs.未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 1.NATS介绍 NATS是一个开源的 ...

  4. NATS—基础介绍

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

  5. NATS_01:NATS基础介绍

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

  6. benthos stream nats 集成试用

    测试demo 来自官方例子 使用docker-compose 进行运行 nats docker-compose file version: '3.3' services: nats: image: n ...

  7. NATS_08:NATS客户端Go语言手动编写

    NATS客户端    一个NATS客户端是基于NATS服务端来说既可以是一个生产数据的也可以是消费数据的.生产数据的叫生产者英文为 publishers,消费数据的叫消费者英文为 subscriber ...

  8. ActiveMQ消息队列从入门到实践(1)—JMS的概念和JMS消息模型

    1. 面向消息的中间件 1.1 什么是MOM 面向消息的中间件,Message Oriented Middleware,简称MOM,中文简称消息中间件,利用高效可靠的消息传递机制进行平台无关的数据交流 ...

  9. [golang] nats的消息传递模型介绍

    目录 nats的消息传递模型 What is NATS 主题式消息(Subject-Based Messaging) 发布订阅(Publish-Subscribe) 请求应答(Request-Repl ...

随机推荐

  1. LeetCode 566. Reshape the Matrix (C++)

    题目: In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a n ...

  2. 欢迎来怼--第三十六次Scrum会议

    一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/12/1 11:35~11:55,总计20min. 地点 ...

  3. Scrum Meeting 11.03

    成员 今日任务 明日计划 用时 徐越 休息     赵庶宏 编写功能说明书,servlet代码移植 servlet代码移植 3h 薄霖 阅读上一届相关代码,思考改进方法 学习安卓界面设计数据库管理 4 ...

  4. Linux读书笔记第一、二章

    第一章    Linux内核简介 1.1Unix历史 Unix特点:1.很简洁 2.所有东西都被当成文件对待 3.Unix内核和相关的系统工具软件都是用C语言编写而成 4.进程创建非常迅速 1.2追寻 ...

  5. 2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-最后阶段

    2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-最后阶段 最后的一周,时间越来越紧张,因为之前的拖沓和一些事情的耽误,导致了如今的紧张,这一周应该是我们小组效率最高 ...

  6. 20162328蔡文琛 week11 大二

    20162328 2017-2018-1 <程序设计与数据结构>第十一周学习总结 教材学习内容总结 在无向图中,表示边的顶点对是无序的. 如果图中的两个顶点之间有边链接,则称它们是领接的. ...

  7. 2018软工实践—Beta冲刺(3)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Beta 冲鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 软件接口编写修正 自动化测试脚本编写 技术文稿更新 展示GitHub当 ...

  8. 【我的python之路】

    目录 我的python之路[第一章]字符编码集,数据类型 我的python之路[第二章]循环-内置方法-数据类型 我的python之路[第三章]函数 我的python之路[第四章]装饰器.生成器.迭代 ...

  9. angularJS1笔记-(16)-模块里的constant、value、run

    index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  10. AVMoviePlayer 视频播放器

    AVMoviePlayer 是使用系统框架 MPMoviePlayerController 封装的视频播放器 一.功能: 1.根据手机旋转自由切换横竖屏:2.手势轻点显示/隐藏topView/bott ...