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请求生命周期 请求模块 ...
随机推荐
- js判断数组中有没有指定元素
list.findIndex(target => target.sel === 指定元素) ,如果找到返回下标,如果没有返回-1
- 在IIS上搭建WebSocket服务器(一)
一.搭建环境 1.System.Web.WebSockets需搭建在Windows8及Server2012以上系统的上. 2.在Windows8及Server2012以上系统的上安装IIS和WebSo ...
- C# 数组、HashSet等内存耗尽的解决办法
在C#中,如果数据量太大,就会出现 'System.OutOfMemoryException' 异常. 解决办法来自于Stack Overflow和MSDN https://docs.micro ...
- Django 模板系统
Django模板系统 常用语法 {{}} 变量相关 {%%} 逻辑相关 变量 格式 {{ 变量名 }} 命名规则 包括任何字母数字以及下划线 ("_")的组合 变量名称中不能有空格 ...
- 腾讯笔试---小Q的歌单
链接:https://www.nowcoder.com/questionTerminal/f3ab6fe72af34b71a2fd1d83304cbbb3 来源:牛客网 小Q有X首长度为A的不同的歌和 ...
- HTML编辑器KindEditor
KindEditor 是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本 ...
- Ubuntu16.04 g++5.4依旧不支持C++11问题
jacket@jacket:~$ g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_6 ...
- Vue, React, AngularJS, Angular2 我们对流行JavaScript框架们的选择
转自<奇舞周刊>,好文章mark一下 分割线 一个有趣的事实是:IBM发表的2017年最值得学习的编程语言名单中,JavaScript榜上有名.这位IT巨头指出,JS在网站中惊人地达到94 ...
- ComboBox下拉列表框
属性:DropDownStyle(下拉.可编辑等).Items(条目) 事件:SelectedIndexChanged选择项改变触发 Items内容:总经理.副总经理.财务部 DropDownStyl ...
- thinkphp5.0 分页中伪静态的处理
1.修改文件\thinkphp\library\think\Paginator.php(此文件用于分页) isurl是否为伪静态 加入isurl用于判断是否使用伪静态分页 */ protected $ ...