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请求生命周期 请求模块 ...
随机推荐
- xadmin在Django 1.11中的使用及中英文切换
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com xadmin是一个强大的替代django admin的管理后台,github地址为:https://g ...
- Ubuntu 系统安装详解 19.04最新版本
Ubuntu 19.04版本系统安装详解 1 .镜像的下载 推荐 阿里云镜像下载 2.安装 1.1.新建虚拟机 注意硬件的兼容性问题 当前只有5.x可以用,其他兼容各位可以尝试下,我也都试过,但只有5 ...
- Maven基础:Maven环境搭建及基本使用(1)
1. Maven环境搭建 1.1 Maven简介 1.2 Maven下载及环境设置 Maven下载地址:http://maven.apache.org/download.cgi 当前下载版本:apac ...
- git 学习(3) ----- 代码共享和多人协作
当我们开发项目的时候,项目会越来越大,就有可能需要其它同事进行参与,甚至进行开源,这时就需要找一个地方把代码存放起来,好供其它人下载并开发.这个地方,最好放到服务器上,因为只要能上网,就可以获取到, ...
- [十二省联考2019]异或粽子——可持久化trie树+堆
题目链接: [十二省联考2019]异或粽子 求前$k$大异或区间,可以发现$k$比较小,我们考虑找出每个区间. 为了快速得到一个区间的异或和,将原序列做前缀异或和. 对于每个点作为右端点时,我们维护出 ...
- 11.2 Flask 配置文件,路由系统
配置文件系统 构建 Flask 应用时指定 app = Flask( __name__, template_folder = '', # 指定存储模板文件夹名称 static_url_path = ' ...
- redis jedis使用
jedis就是集成了redis的一些命令操作,封装了redis的java客户端.提供了连接池管理.一般不直接使用jedis,而是在其上再封装一层,作为业务的使用.如果用spring的话,可以看看spr ...
- CF1059D Nature Reserve
原题链接 网络不好的可以到洛谷上去QwQ 题目大意 有N个点,求与y=0相切的,包含这N个点的最小圆的半径 输入输出样例 输入: 2 0 1 1 1 输出 0.625 感觉最多是蓝题难度? 首先无解的 ...
- Pandas系列(七)-计算工具介绍
内容目录 1. 统计函数 2. 窗口函数 3. 加深加强 数据准备 # 导入相关库 import numpy as np import pandas as pd #Pandas 中包含了非常丰富的计算 ...
- Java多线程:向线程传递参数的三种方法
在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果.但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别.由于线程 ...