Vertx eventbus模块解析
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
Vertx eventbus模块解析的更多相关文章
- TypeScript 素描 - 模块解析、声明合并
模块解析 模块解析有两种方式 相对方式 也就是以/或 ./或-/开头的,比如import jq from "/jq" 非相对方式 比如 import model from ...
- python-pcap模块解析mac地址
python-pcap模块解析mac地址 作者:vpoet mail:vpoet_sir@163.com import pcap import binascii a = pcap.pcap() a.s ...
- webpack模块解析
前面的话 在web存在多种支持JavaScript模块化的工具(如requirejs和r.js),这些工具各有优势和限制.webpack基于从这些系统获得的经验教训,并将模块的概念应用于项目中的任何文 ...
- TypeScript和Node模块解析策略
一般我们在模块化编码时,总会导入其它模块,通常我们使用如下语法: import { A } from './a'; // ES6语法 import { A } from 'a'; var A = re ...
- 利用Bioperl的SeqIO模块解析fastq文件
测序数据中经常会接触到fastq格式的文件,比如说拿到fastq格式的原始数据后希望查看测序碱基的质量并去除低质量碱基.一般而言大家都是用现有的工具,比如说fastqc这个Java写的小程序,确实很好 ...
- optparse模块解析命令行参数的说明及优化
一.关于解析命令行参数的方法 关于“解析命令行参数”的方法我们一般都会用到sys.argv跟optparse模块.关于sys.argv,网上有一篇非常优秀的博客已经介绍的很详细了,大家可以去这里参考: ...
- webpack-Module Resolution(模块解析)
模块解析(Module Resolution) resolver 是一个库(library),用于帮助找到模块的绝对路径.一个模块可以作为另一个模块的依赖模块,然后被后者引用,如下: import f ...
- django 数据库连接模块解析及简单长连接改造
django 数据库连接模块解析及简单长连接改造工作中纯服务端的项目用到了线程池和django的ORM部分.django 的数据库连接在每一个线程中开启一份,并在查询完毕后自动关闭连接. 线程池处理任 ...
- 第二章、drf框架 - 请求模块 | 渲染模块 解析模块 | 异常模块 | 响应模块 (详细版)
目录 drf框架 - 请求模块 | 渲染模块 解析模块 | 异常模块 | 响应模块 Postman接口工具 drf框架 注册rest_framework drf框架风格 drf请求生命周期 请求模块 ...
随机推荐
- 【学习总结】Git学习-参考廖雪峰老师教程-总
公元2018-10-21 实验室台式机 win7 64位 参考教程: 廖雪峰Git教程 其他资料:Git-book 北大一只总结的笔记,最终整理的时候可以参考:Git笔记 评论区看到的另一个人,总结在 ...
- java 反射的基本操作
一.反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为j ...
- 对Datatable中过长内容实行省略话
, 16) + '...</a>' } // 点击跳转的实现 else { return '<a id="taskFocus" href="/task_ ...
- python 基本数据类型以及运算符操作
一.基本数据类型 为何要区分类型? 数据类型的值是变量值得类型,变量值之所以区分类型,是因为变量的值 用来记录事物的状态,而事物的状态有不同的种类,对应着,也必须用不 用类型去区分它们. 1.数字类型 ...
- nfs 权限问题
nfs-server 上面的共享文件的权限修改后 到nfs-client 上面挂载后的权限不能刷新的问题 修改/etc/idmap.conf Domain = local.domain.edu #打开 ...
- Hdoj 2149.Public Sale 题解
Problem Description 虽然不想,但是现实总归是现实,Lele始终没有逃过退学的命运,因为他没有拿到奖学金.现在等待他的,就是像FarmJohn一样的农田生涯. 要种田得有田才行,Le ...
- Hdoj 1847.Good Luck in CET-4 Everybody! 题解
Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载 ...
- 联想的笔记本有隐藏分区 导致无法安装win10 eufi启动 报错:windows无法更新计算机的启动配置。无法安装
联想的笔记本都带着类似一键还原等的系统恢复软件,这些软件往往是将出厂设置备份在单 独的一个分区,此分区默认为隐藏,在 Windows 的磁盘管理中可以看到.打开磁盘管理器 的方法是右击计算机——管理, ...
- 使用Webstorm建立vue.js工程并添加vuetify组件
.. .. .. ..等待安装完 ..生成的目录结构 ..打开Webstorm的终端 ..最后出现 ..回到工程目录,右键 ..显示npm面板,点击serve运行 .. ..打开[貌似跟以前不一样了. ...
- Linux设备树(六 memory&chosen节点)
六 memory&chosen节点 根节点那一节我们说过,最简单的设备树也必须包含cpus节点和memory节点.memory节点用来描述硬件内存布局的.如果有多块内存,既可以通过多个memo ...