zoukankan      html  css  js  c++  java
  • Nats的消息通信模型

    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连接服务器
    ---------------------
    作者:资深架构师
    来源:CSDN
    原文:https://blog.csdn.net/chszs/article/details/50996679
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    Linux系统-命令行快捷键
    Golang理解-Context包
    Golang理解-垃圾回收机制
    Linux系统-Systemd资源控制
    Linux系统-"cannot access Input/output error"
    Linux系统-ntpdate时间同步报错
    Golang理解-数组和切片
    Golang理解-位运算
    Golang理解-指针
    Maven配置,使用IntelliJ IDEA和Maven创建Java Web项目
  • 原文地址:https://www.cnblogs.com/gao88/p/9851657.html
Copyright © 2011-2022 走看看