MQTT---HiveMQ源码详解(十九)Cluster-Request/Response

源博客地址:http://blog.csdn.net/pipinet123


MQTT交流群:221405150


既然是通讯,底层的通讯协议由JGroup负责,那么上层类似于web项目,需要定义Request/Response。

Request

  • Request非常多,基本上数量与Serializer差不多,但特征非常明显。

    • Query Request,向其他持有数据的node请求自己需要的数据
    • Replicate Request, 向其他node分发、备份数据。
    • Node Information Request,节点状态变更、节点信息等。

Response

Response类图相对来说简单,所以如上图我将方法也显示出来了,处理方法也比较通用,熟悉web的朋友对这个应该很容易理解。

  • node接受到消息后,使用ClusterRequestDispatcher进行请求分发。
  • ClusterRequestDispatcher持有ClusterRequest原型与ClusterReceiver对应的Map,根据ClusterRequest类型交付给ClusterReceiver进行具体业务的处理。
  • ClusterReceiver根据一致性hash环来确定请求是否属于自己处理,来对请求进行处理。
  • ClusterReceiver处理完成后,将结果使用ClusterResponse异步返回给请求的node即可。
时间: 2024-07-30 15:42:49

MQTT---HiveMQ源码详解(十九)Cluster-Request/Response的相关文章

MQTT---HiveMQ源码详解(十)Netty-Statistics

HiveMQ中的内置的统计非常之多,多到可怕,几乎你能想到的统计hivemq都已经帮你想全了:同时第三方plugin还可以定义属于自己的统计. 它的实现采用了Metric框架实现统计.度量.收集的数据可以通过多种数据报告接口,这样可以监控broker运行中的各种数据来监控broker. 所谓统计无外乎就是采集埋点.输出报告 采集埋点 类图 通过StatisticsInitializer实现handlerAdded方法,为pipeline中添加GlobalTrafficCounter(流量计数器)

MQTT---HiveMQ源码详解(十二)Netty-MQTT消息、事件处理(流程)

简介 前面这些章节,讲的基本上都是属于netty对MQTT周边的一些处理,由于MQTT协议总共目前可用的消息类型有14个,如果再加上对应的事件处理加载一起那就估计大概有14*3个handler,如果每个来讲一遍,难免有些枯燥,而且知识点会很分散,思考再三,想把整体的MQTT消息以及对应的事件处理作为一节来介绍,我们只讲它整体的实现思路.处理流程即可,这样对需要自己写broker的朋友的帮助应该是非常大的,这也符合最初写此系列博客的初衷. 热身 一.Callback 1.分类 HiveMQ的Cal

MQTT---HiveMQ源码详解(十四)Persistence-LocalPersistence

简介 HiveMQ的Persistence提供配置包括File和Memory,以解决不同场景的不同需求,使用者可以自行配置六种信息的PersistenceMode 就代码来讲,又分为LocalPersistence和Cluster/SinglePersistence.LocalPersistence主要是作本地的Persistence:Cluster/SinglePersistence主要是根据用户是否Cluster来决定不同的Persistence业务处理. 本节我们先讲LocalPersis

MQTT---HiveMQ源码详解(十六)TopicTree

源博客地址:http://blog.csdn.net/pipinet123 MQTT交流群:221405150 功能 启动时,读取持久化的信息,构建出订阅树 根据可订阅/取消订阅/读取订阅(包括计算出QoS) 类图 既然是一棵树,那么肯定是由一堆Node组成的,TopicTreeNode持有当前的topic的segment,通配符订阅者信息(包含订阅者.订阅的QoS.是否共享订阅.以及共享订阅组信息). 每个节点都可以提供订阅.取消订阅.获得订阅者信息.以及一些订阅树节点的数据的增删改查操作.

Android编程之Fragment动画加载方法源码详解

上次谈到了Fragment动画加载的异常问题,今天再聊聊它的动画加载loadAnimation的实现源代码: Animation loadAnimation(Fragment fragment, int transit, boolean enter, int transitionStyle) { 接下来具体看一下里面的源码部分,我将一部分一部分的讲解,首先是: Animation animObj = fragment.onCreateAnimation(transit, enter, fragm

Java concurrent AQS 源码详解

一.引言 AQS(同步阻塞队列)是concurrent包下锁机制实现的基础,相信大家在读完本篇博客后会对AQS框架有一个较为清晰的认识 这篇博客主要针对AbstractQueuedSynchronizer的源码进行分析,大致分为三个部分: 静态内部类Node的解析 重要常量以及字段的解析 重要方法的源码详解. 所有的分析仅基于个人的理解,若有不正之处,请谅解和批评指正,不胜感激!!! 二.Node解析 AQS在内部维护了一个同步阻塞队列,下面简称sync queue,该队列的元素即静态内部类No

深入Java基础(四)--哈希表(1)HashMap应用及源码详解

继续深入Java基础系列.今天是研究下哈希表,毕竟我们很多应用层的查找存储框架都是哈希作为它的根数据结构进行封装的嘛. 本系列: (1)深入Java基础(一)--基本数据类型及其包装类 (2)深入Java基础(二)--字符串家族 (3)深入Java基础(三)–集合(1)集合父类以及父接口源码及理解 (4)深入Java基础(三)–集合(2)ArrayList和其继承树源码解析以及其注意事项 文章结构:(1)哈希概述及HashMap应用:(2)HashMap源码分析:(3)再次总结关键点 一.哈希概

Spring IOC源码详解之容器依赖注入

Spring IOC源码详解之容器依赖注入 上一篇博客中介绍了IOC容器的初始化,通过源码分析大致了解了IOC容器初始化的一些知识,先简单回顾下上篇的内容 载入bean定义文件的过程,这个过程是通过BeanDefinitionReader来完成的,其中通过 loadBeanDefinition()来对定义文件进行解析和根据Spring定义的bean规则进行处理 - 事实上和Spring定义的bean规则相关的处理是在BeanDefinitionParserDelegate中完成的,完成这个处理需

Spring IOC源码详解之容器初始化

Spring IOC源码详解之容器初始化 上篇介绍了Spring IOC的大致体系类图,先来看一段简短的代码,使用IOC比较典型的代码 ClassPathResource res = new ClassPathResource("beans.xml"); DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDe