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模块解析的更多相关文章

  1. TypeScript 素描 - 模块解析、声明合并

    模块解析 模块解析有两种方式 相对方式  也就是以/或 ./或-/开头的,比如import jq  from "/jq" 非相对方式  比如 import model  from ...

  2. python-pcap模块解析mac地址

    python-pcap模块解析mac地址 作者:vpoet mail:vpoet_sir@163.com import pcap import binascii a = pcap.pcap() a.s ...

  3. webpack模块解析

    前面的话 在web存在多种支持JavaScript模块化的工具(如requirejs和r.js),这些工具各有优势和限制.webpack基于从这些系统获得的经验教训,并将模块的概念应用于项目中的任何文 ...

  4. TypeScript和Node模块解析策略

    一般我们在模块化编码时,总会导入其它模块,通常我们使用如下语法: import { A } from './a'; // ES6语法 import { A } from 'a'; var A = re ...

  5. 利用Bioperl的SeqIO模块解析fastq文件

    测序数据中经常会接触到fastq格式的文件,比如说拿到fastq格式的原始数据后希望查看测序碱基的质量并去除低质量碱基.一般而言大家都是用现有的工具,比如说fastqc这个Java写的小程序,确实很好 ...

  6. optparse模块解析命令行参数的说明及优化

    一.关于解析命令行参数的方法 关于“解析命令行参数”的方法我们一般都会用到sys.argv跟optparse模块.关于sys.argv,网上有一篇非常优秀的博客已经介绍的很详细了,大家可以去这里参考: ...

  7. webpack-Module Resolution(模块解析)

    模块解析(Module Resolution) resolver 是一个库(library),用于帮助找到模块的绝对路径.一个模块可以作为另一个模块的依赖模块,然后被后者引用,如下: import f ...

  8. django 数据库连接模块解析及简单长连接改造

    django 数据库连接模块解析及简单长连接改造工作中纯服务端的项目用到了线程池和django的ORM部分.django 的数据库连接在每一个线程中开启一份,并在查询完毕后自动关闭连接. 线程池处理任 ...

  9. 第二章、drf框架 - 请求模块 | 渲染模块 解析模块 | 异常模块 | 响应模块 (详细版)

    目录 drf框架 - 请求模块 | 渲染模块 解析模块 | 异常模块 | 响应模块 Postman接口工具 drf框架 注册rest_framework drf框架风格 drf请求生命周期 请求模块 ...

随机推荐

  1. app.use和app.get,app.post区别

    express中,express的实例app: app.use(path,callback)中的callback既可以是router对象又可以是函数 app.get(path,callback)中的c ...

  2. 如何在网中使用百度地图API自定义个性化地图

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  3. Superset安装与使用

    参考: https://www.jianshu.com/p/b02fcea7eb5b

  4. css经常使用的六种文本样式

    css当中经常使用的六种文本样式 css 文本样式是相对于内容进行的样式修饰,下面来说下几种常见的文本样式. 首行缩进 首行缩进是将段落的第一行缩进,这是常用的文本格式化效果.一般地,中文写作时开头空 ...

  5. C/C++ const

    一 含义 const修饰的变量在C和C++中的含义是什么?一样吗? 在C中用const修饰的变量仅仅表示这个符合表示的变量不能被赋值,是只读的,那么它与常量有啥区别呢?区别就是一个是常量,一个是变量. ...

  6. dajngo cache,throttling

    缓存 背景介绍: 动态网站的问题就在于它是动态的. 也就是说每次用户访问一个页面,服务器要执行数据库查询,启动模板,执行业务逻辑以及最终生成一个你所看到的网页,这一切都是动态即时生成的. 从处理器资源 ...

  7. Zookeeper分布式集群原理与功能

    Zookeeper功能简介 ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现. 分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅 ...

  8. 联想的笔记本有隐藏分区 导致无法安装win10 eufi启动 报错:windows无法更新计算机的启动配置。无法安装

    联想的笔记本都带着类似一键还原等的系统恢复软件,这些软件往往是将出厂设置备份在单 独的一个分区,此分区默认为隐藏,在 Windows 的磁盘管理中可以看到.打开磁盘管理器 的方法是右击计算机——管理, ...

  9. 大数质因解:浅谈Miller-Rabin和Pollard-Rho算法

    2017-07-19 08:54 Amphetamine:能发一下代码吗? 应我那位谜一样好友的邀约,我打算好好看一看Miller-Rabin和Pollard-Rho算法.很奇怪,各种地方有很多代码描 ...

  10. svn客户端更改用户名

    你是用的小乌龟做客户端吗?在文件夹里点右键,选择TortoiseSVN->Setings->SavedData里面有个authentication data,点击后面的Clear就好了下次 ...