zoukankan      html  css  js  c++  java
  • sentinel源码学习--transport模块

    一、背景介绍

    sentinel介绍:https://github.com/alibaba/Sentinel

    本篇我们介绍一下sentinel-transport模块,从源码工程的README.md里

    # Sentinel Transport
    The Sentinel transport module provides basic interfaces about Sentinel monitoring API server and client
    (`CommandCenter` and `HeartbeatSender`) as well implementations using different libraries or protocols.

    sentinel transport module 提供了客户端&服务端相关的基础接口和监控api,以及不同的库/协议。主要分为原生socket/netty,使用时客户端选择一个依赖就可以了。

    sentinel transport模块内部用了很多spi的方法进行类加载。内部主要实现的功能:

    1. 客户端向服务端同步心跳包

    2. 向服务端发起注册,客户端接受command命令

    二、主要流程(simple-http模块为例)

    核心类SimpleHttpCommandCenter

    class SimpleHttpCommandCenter implements CommandCenter 

    该类实现了CommandCenter接口

    public interface CommandCenter {   
        void beforeStart() throws Exception; 
        void start() throws Exception;
        void stop() throws Exception;
    }

    那 Sentinel里的怎么加载到SimpleHttpCommandCenter这个类的?从Sentinel定义的Env的静态类加载开始

    /**
     * Sentinel Env. This class will trigger all initialization for Sentinel.
     *
     * <p>
     * NOTE: to prevent deadlocks, other classes' static code block or static field should
     * NEVER refer to this class.
     * </p>
     *
     * @author jialiang.linjl
     */
    public class Env {
    
        public static final Sph sph = new CtSph();
    
        static {
            // If init fails, the process will exit.
            InitExecutor.doInit();
        }
    
    }

    然后我们看下加载流程图

    然后我们再细节的了解下SimpleHttpCommandCenter类的两个核心方法beforeStart和start方法的内部细节

    ok。。这里就差不多了。

    三、后续

    感觉用流程图的方式表达源码会更清晰易懂一些,比纯贴代码好一些。推荐大家打开源码跟着流程一起看

    后续再分享一篇sentinel的责任链流程,责任链模式是sentinel的核心流程。

  • 相关阅读:
    微信证书发布涉及到的问题
    C# Timer自带定时器
    微信accesstoken回调
    c#数组乱序,打乱数组
    JS 数组乱序
    百度地图LBS开放平台AK一直没有用
    C# 微信支付证书使用
    提交失败问题一:检测到有潜在危险
    apache如何发布地图服务
    Java后端进阶教程
  • 原文地址:https://www.cnblogs.com/but999/p/13295285.html
Copyright © 2011-2022 走看看