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请求生命周期 请求模块 ...
随机推荐
- CodeVs 1615 数据备份
题目:数据备份 链接:Here 题意:有n个点在一条线上,每次连线可以连接两个点(每个点只能被连一次),要求找出m个连线,他们的和最小(连线权值就是两点距离),输出最小的和.给出n.m和每个点的坐标. ...
- Flutter之Simulation
Simulation 可以理解成动画进行的函数. Flutter中自带了有下面几种. BouncingScrollSimulationBounce弹性的滚动模拟 ClampedSimulation C ...
- Java中反射机制详解
序言 在学习java基础时,由于学的不扎实,讲的实用性不强,就觉得没用,很多重要的知识就那样一笔带过了,像这个马上要讲的反射机制一样,当时学的时候就忽略了,到后来学习的知识中,很多东西动不动就用反射, ...
- iView组件添加API中介绍的事件的方式(render方式添加事件)
iView组件好用,文档齐全,品质可靠稳定.最大的好处是使用了Vue框架,使很多数据绑定和交互问题变的轻松,是难得的开源前端组件.给作者点个赞.用这个组件来学习Vue.js也是不错的选择. 最近用的比 ...
- Qt如何去掉按钮等控件的虚线框(焦点框)
方法1:可以通过代码ui->pushButton->setFocusPolicy(Qt::NoFocus)或在Qt Creator的属性列表中设置. 方法2:如果在嵌入式设备中需要通过按键 ...
- 数据分析---《Python for Data Analysis》学习笔记【01】
<Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...
- 【XSY3126】异或II 数学
题目描述 给你一个序列 \(a_0,a_1,\ldots,a_{n-1}\).你要进行 \(t\) 次操作,每次操作是把序列 \(x\) 变为序列 \(y\),满足 \(y_i=\oplus_{j=0 ...
- Dynamic Rankings ZOJ - 2112(主席树+树状数组)
The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...
- yii2 redirect重定向
redirect使用方法 $this->redirect(array('/site/contact','id'=>12)); //http://www.kuitao8.com/testwe ...
- Codeforces Beta Round #51 D. Beautiful numbers(数位dp)
题目链接:https://codeforces.com/contest/55/problem/D 题目大意:给你一段区间[l,r],要求这段区间中可以整除自己每一位(除0意外)上的数字的整数个数,例如 ...