eventbus 事件總線

協議棧

TCP分包,粘包解決採用方案: 消息定长(定義消息体總长度),消息分为消息头和消息体

dataType bytes description
int 4 包体总大小 code: << buffer.setInt(0, buffer.length() - 4) >>
byte 1 棧協議版本
byte 1 消息類型 codec 的路徑 io.vertx.core.eventbus.impl.codecs
自定義消息 val: -1
byte 1 發鬆模型 false Publish/subscribe , true Point/Point
int 4 send eventAddr 的長度
String ? send eventAddr 內容
int 4 replyAddress 的長度 , 無需 Response 長度爲 0
String ? replyAddress 內容, cluster模式爲 UUID , local模式採用 AtomicLong,保证全局唯一性
int 4 tcp服務 port
int 4 tcp服務 host 長度
String ? tcp服務 host 地址
int 4 headers exists 標志位, 不存在 appendInt 4 , 存在 appendInt 0
int 4 headers不爲null , headers 总大小
List<Map> ? headers 採用key/val , Map type : String/String
body ? 根據消息類型 append 內容, 不同類型具體實現 
io.vertx.core.eventbus.impl.codecs 包中 encodeToWire method

集羣模式

cluster model 目前 4種

1、Hazelcast 2、Infinispan 3、Apache Ignite 4、Apache Zookeeper

Apache Zookeeper 事件注冊流程

注册事件

一、point-to-point

send message

reply message

note: 1. point-point 核心点 replyAddress 全局唯一标识(UUID),根据标识确定链路point-point.
   2. HandlerRegistration Class的 context(上下文),同一线程处理(vertx存在多实例的情况下).
   3. HandlerRegistration Claass的 maxBufferedMessages最大消息数(DEFAULT:1000),设置可能
      导致消息丢失,超过size直接poll丢弃,超过将丢弃消;防止消息丢失,send端需要超时机制.防止buffer堆积过大,最终导致OOM.
   4. ConnectionHolder class 中 writeMessage方法(参考2-1) //TODO optimise this (contention on monitor)
   5.如果是单向send message ,replyAddress 为 NULL.

2-1、default transports TCP send mechanism :

note: 1、 有丟失消息的風險(网络故障导致丢包).

二、publish-subscribe

最新文章

  1. 【转】bash 参数展开(Parameter Expansion)
  2. Hibernate学习笔记3
  3. java基础之 重排序
  4. 学习angular.js的一些笔记想法(上)
  5. vi/vim基本使用方法
  6. swift基础--字符串
  7. python连接redis002
  8. [LeetCode] Decode Ways [33]
  9. web.xml中&lt;init-param&gt;报错
  10. struts2+mybatis3+log4j2+bulma+mysql8元工程
  11. CDlinux系统破解无线wifi
  12. Mybatis 中实体类的编写
  13. HBase 数据迁移方案介绍 (转载)
  14. 并发编程—— LinkedTransferQueue
  15. csc.exe已退出,代码为-532462766
  16. unity执行顺序问题(如何再次执行start方法)
  17. yii 获取当前模块名、控制器名 、动作名
  18. js 获取高度
  19. ubuntu16.04安装cuda,无法定位软件包问题
  20. 9、MySQL常见的函数?

热门文章

  1. opensetting禁用后小程序二次授权的问题-以及根据定位城市获取天气
  2. Django之ORM
  3. kettle查询
  4. vscode在vue-cli中按照ESlint自动格式化代码
  5. Pyspark 使用 Spark Udf 的一些经验
  6. Codechef April Challenge 2019 Division 2
  7. flv.js怎么用?全面解读flv.js代码
  8. Java8之方法引用
  9. 用beam实现连接kafka和elasticSearch示例 在flink平台运行
  10. 题解-洛谷P1184 高手之在一起