自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (1)
  • 收藏
  • 关注

原创 Soul-源码阅读21-rateLimiter插件

前言采用redis令牌桶算法进行限流。限流插件是网关对流量管控、限制核心的实现。流量配置可以到接口级别、参数级别。使用rateLimiter启动soul-admin,在 soul-admin–> 插件管理–> rate_limiter 将其设置为开启,redis部署模式默认为单机,如果是哨兵(sentinel),集群(cluster)等多节点的,在URL中的配置,请对每个实列使用 ; 分割. 如 192.168.1.1:6379;192.168.1.2:6379。。在b

2021-02-05 23:22:56 1076

原创 Soul-源码阅读20-数据同步总结

4种同步方式启动的时候都会初始化数据。websocket bootstrap 启动之后,会发一个初始化的消息(MYSELF)给 admin,然后 amdin 会直接从数据库拉取数据到本地缓存。zookeeper 会先判断 zookeeper 里面有没有数据,没有就去数据查询,缓存到本地,然后更新zookeeper。有数据的话就以zookeeper的数据为准。nacos 和 zookeeper 一样的判断逻辑,没有就去数据查询,缓存到本地,然后更新nacos(需要新建命名空间namespac

2021-02-05 08:15:17 1084

原创 Soul-源码阅读19-Http长轮询总结3

Soul-源码阅读19-Http长轮询3继上一节ConfigController# fetchConfigs 从admin 获取响应数据后,bootstrap 更新本地缓存。boostrap刷新数据HttpSyncDataService# doFetchGroupConfigprivate void doFetchGroupConfig(final String server, final ConfigGroupEnum... groups) { // ...... String

2021-02-03 08:41:53 1064

原创 Soul-源码阅读18-Http长轮询2

回顾上一篇: admin 启动之后,会每隔5分钟查询一次数据库,把数据刷新到缓存soul-bootstrap端根据上一节yml文件配置的http同步配置方式,实例化httpSyncDataService类。@Configuration@ConditionalOnClass(HttpSyncDataService.class)@ConditionalOnProperty(prefix = "soul.sync.http", name = "url")@Slf4jpublic class Ht

2021-02-01 21:41:26 100

原创 Soul-源码阅读17-Http长轮询1

概念zookeeper、websocket 数据同步的机制比较简单,而 http 同步会相对复杂一些。Soul 借鉴了 Apollo、Nacos 的设计思想,取其精华,自己实现了 http 长轮询数据同步功能。注意,这里并非传统的 ajax 长轮询!服务启动启用http同步配置方式,修改admin的application.ymlsoul: database: dialect: mysql init_script: "META-INF/schema.sql" init_

2021-01-30 23:01:36 70

原创 Soul-源码阅读16-Nacos同步数据分析4-bootstrap端

soul-bootstrap 如何同步网关数据Nacos数据同步和zookeeper数据同步相似,都是通过监听数据变化来实现。soul-bootstrap 添加了nacos依赖 soul-spring-boot-starter-sync-data-nacos,服务启动后会自动注入NacosSyncDataConfigurationpublic class NacosSyncDataConfiguration { // 实例化一个数据同步服务。 public SyncDataServic

2021-01-29 22:53:19 1065 1

原创 Soul-源码阅读15-Nacos同步数据分析3-admin端

本次分析在0125号萧大佬修复了:当Nacos数据是空的时候,soul-admin不会初始化同步数据到nacos,问题之后。soul-admin 如何同步网关数据这块的数据更新其实类似zookeeper、websocket。soul-admin数据初始化全量更新,在DataSyncConfiguration类的内部类监听NacosListener@Configurationpublic class DataSyncConfiguration {//....... @Configu

2021-01-29 22:04:15 74

原创 Soul-源码阅读14-Nacos同步数据分析2

问题回顾解决继续分析昨天boot-strap启动报错NPE的问题,提示:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nacosSyncDataService' defined in class path resource [org/dromara/soul/springboot/starter/sync/data/nacos/NacosSyncDataConfigurati

2021-01-28 23:57:18 401

原创 Soul-源码阅读13-Nacos同步数据分析1

配置admin 的 pom.xml 已经默认添加了 nacos-client 依赖<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>${nacos-client.version}</version></dependency>adm

2021-01-27 23:26:45 116

原创 win10启动和安装nacos服务

下载压缩文件GitHub下载地址:https://github.com/alibaba/nacos/releases,可选择稳定版的1.4.0的.zip压缩文件,尾缀ALPHA的是测试版本。下载解压后的文件:启动服务打开bin目录下startup.cmd脚本文件,发现nacos默认的启动模式就是cluster集群模式(set MODE=“cluster”),修改为单机模式standaloneset MODE="standalone"set FUNCTION_MODE="all"

2021-01-27 22:04:46 1637

原创 Soul-源码阅读12-Zookeeper同步数据分析2

继上节分析2soul的各种插件启动基本流程是通过自定义starter启动,然后内部做一系列的依赖注入,zkClient 也不例外。上1节我们知道soul-bootstrap 引入上面这个starter,里面的启动配置类 ZookeeperSyncDataConfiguration,创建了同步数据的syncDataService类,再往spring容器注册了zkClient。其实这里面还有个知识点:ObjectProvider Bean依赖查找注入,然后实例化的zkclient有url、se

2021-01-26 23:21:52 80

原创 Soul-源码阅读11-Zookeeper同步数据

ZK同步原理基于 zookeeper 的同步原理很简单,主要是依赖 zookeeper 的 watch 机制,soul-web 会监听配置的节点,soul-admin 在启动的时候,会将数据全量写入 zookeeper,后续数据发生变更时,会增量更新 zookeeper 的节点,与此同时,soul-web 会监听配置信息的节点,一旦有信息变更时,会更新本地缓存。DEMO启动soul-admin配置在application.yml 注释掉websocket的开关,开启zk同步配置。soul:

2021-01-25 23:14:56 79

原创 Soul-源码阅读10-Websocket 同步数据

启动admin,与网关。 admin操作,使用websocket同步数据到网关说明数据同步是指将 soul-admin 配置的数据,同步到 soul 集群中的JVM内存里面,是网关高性能的关键。将网关与 admin 建立好 websocket 连接时,admin 会推送一次全量数据,后续如果配置数据发生变更,则将增量数据通过 websocket 主动推送给 soul-web使用websocket同步的时候,特别要注意断线重连,也叫保持心跳。soul使用java-websocket 这个第三...

2021-01-24 00:36:57 165

原创 Soul-源码阅读9-divide插件2

回顾前天写的divide插件文章:Soul-源码阅读5-回顾总结插件相关那天做了总结并分析了AbstractSoulPlugin方法(主要是选择器和规则的设定)。今天深入看了divide插件是怎么根据selector和rule进行http请求的代理转发的。DividePlugin看之类DividePlugin 的doExecute()方法根据选择器id获取selector配置的服务地址list, 如果为空会抛出NPE. final List<DivideUpstream&

2021-01-22 23:22:28 908

原创 Soul-源码阅读8-http插件注册简析2

回顾昨天的:Soul-源码阅读7-http插件注册简析简单总结一下:http服务项目里添加了如下依赖,soul-spring-boot-starter-client-springmvc。项目启动后,这个依赖会扫描项目中有@SoulSpringMvcClient注解的controller以及接口方法。<artifactId>soul-spring-boot-starter-client-springmvc</artifactId>注解的时候给这个注解传递的path值,

2021-01-22 22:49:06 969

原创 Soul-源码阅读7-http插件注册简析

SoulClientController- registerSpringMvc启动http-example的服务时(Started SoulTestHttpApplication) ,会来调用这个方法,注册服务到soul-admin。 @PostMapping("/springmvc-register") public String registerSpringMvc(@RequestBody final SpringMvcRegisterDTO springMvcRegisterDTO)

2021-01-21 22:53:53 333

原创 Soul-源码阅读6-回顾总结插件相关2

SoulSpringMvcClientSoulSpringMvcClientSpringMvcClientBeanPostProcessor implements BeanPostProcessorSpringMvcClientBeanPostProcessor构造方法public SpringMvcClientBeanPostProcessor(final SoulSpringMvcConfig soulSpringMvcConfig) { ValidateUtils.valida

2021-01-20 17:39:35 1047

原创 Soul-源码阅读5-回顾总结插件相关

插件相关divide插件divide插件是网关处理http请求的核心处理插件。divide进行http正向代理,该插件处理所有http类型的请求进行负载均衡的调用。http配置,可以配置多个,设置负载均衡权重,具体的负载均衡策略,在规则中指定。插件和选择器是1对多关系,选择器和规则是1对多的关系。AbstractSoulPlugin测试:http://localhost:9195/http/order/findById?id=222具体分析下 AbstractSoulPl

2021-01-19 23:45:03 1153 4

原创 Soul-源码阅读4-接入sofa应用

今天计划:1.运行examples下面的 sofa-rpc服务2.学习文档,结合sofa插件,发起http请求soul网关,体验sofa代理准备工作启动下mysql和zookeeper启动zk启动soul-admin 和 soul-bootstrap先需要设置 sofa 插件 的注册中心,因为 Soul Bootstrap 服务网关需要从注册中心获取到 sofa 服务的实例列表。进入界面:系统管理 --> 插件管理 找到插件:sofa,点击编辑,将状态修改为开启(是个开关

2021-01-18 19:58:21 429

原创 Soul-源码阅读3-接入dubbo应用2(踩坑记录)

异常记录1、本地zk版本和curator版本不兼容导致:如图解决:排插zk的引用:<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>${curator.version}</version>

2021-01-17 17:32:29 110

原创 Soul-源码阅读3-接入dubbo应用

Soul-入门,安装部署单机版 https://blog.csdn.net/tbmingzhao/article/details/112645382准备工作运行 soul-example 目录 的 soul-examples-apache-dubbo-service 工程先需要设置 dubbo 插件 的注册中心,因为 Soul Bootstrap 服务网关需要从注册中心获取到 Dubbo 服务的实例列表。启动zk 或 nacos 注册中心运行服务启动-soul-e..

2021-01-17 00:54:15 957

原创 Soul-源码解析2-接入http应用

在上一节对Soul做了一个概述,安装部署了一个简单的单机版,补充上一节目录结构:soul-admin: soul 插件元数据配置管理服务,内部包含了soul-dashboard交互页面soul-bootstrap: soul 网关启动程序入口今天计划:运行examples下面的 http服务结合divde插件,发起http请求soul网关,体验http代理准备工作启动soul-admin登录 Admin 后台 http://localhost:9095 进入「系统管理 ->

2021-01-15 20:16:45 608

原创 Soul-入门,安装部署单机版

1. 概述Soul 是基于 WebFlux 实现的响应式的 API 网关,具有异步、高性能、跨语言等特点。猫大人说:我希望能够有一样东西像灵魂一样,保护您的微服务。在参考了 Kong、Spring Cloud Gateway 等优秀的网关后,站在巨人的肩膀上,Soul 由此诞生!2. 搭建网关环境(github 一键三连 star,watch,fork)https://github.com/dromara/soulFork分支到本地,设置upstream从soul的repo上fork一个分

2021-01-15 00:07:24 1594

原创 Windows下部署redis-集群(cluster)

Redis集群(cluster)1. 安装ruby环境双击下载的“rubyinstaller-3.0.0-1-x64.exe”安装即可,同样,为了操作方便,也是建议安装在盘符根目录下,如:C:\Ruby30-x64 ,安装会默认把ruby添加到path环境变量(需重启后,gem…才会生效)2. 安装Ruby环境下Redis的驱动将下载的"Ruby环境下Redis的驱动文件(redis-3.2.2.gem)"拷贝到Ruby安装根目录(C:\Ruby30-x64 )下。然后执行安装命令如下:gem

2021-01-09 17:11:08 403

原创 Redis主从-哨兵

Redis主从1.把下载的redis安装包解压,复制2份redis.windows.conf配置文件,分别命名为redis.windows6380.conf和redis.windows6381.conf修改配置 对应的端口启动服务在redis安装目录下执行命令redis-server.exe redis.windows.confredis-server.exe redis.windows6380.confredis-server.exe redis.windows6381.con查

2021-01-09 14:16:03 184 3

原创 数据结构与算法-排序(上)

冒泡排序( Bubble Sort ) // 冒泡排序,a表示数组,n表示数组大小 public void bubbleSort(int[] a, int n) { if (n &lt;= 1) return; for (int i = 0; i &lt; n; ++i) { // 提前退出冒泡循环的标志位 ...

2019-01-22 12:03:24 140

原创 数据结构与算法-队列

极客笔记一、什么是队列?1.先进者先出,这就是典型的“队列”结构。2.支持两个操作:入队enqueue(),放一个数据到队尾;出队dequeue(),从队头取一个元素。3.所以,和栈一样,队列也是一种操作受限的线性表。二、如何实现队列?1.队列APIpublic interface Queue&lt;T&gt; {public void enqueue(T item); //入队...

2019-01-21 16:58:37 114

原创 数据结构与算法-栈

一、什么是栈?后进者先出,先进者后出,这就是典型的 “ 栈 ” 结构。从栈的操作特性来看,是一种 “ 操作受限 ” 的线性表,只允许在端插入和删除数据。二、为什么需要栈?栈是一种操作受限的数据结构,其操作特性用数组和链表均可实现。但,任何数据结构都是对特定应用场景的抽象,数组和链表虽然使用起来更加灵活,但却暴露了几乎所有的操作,难免会引发错误操作的风险。所以,当某个数据集合只涉及...

2019-01-21 09:46:32 234

原创 开关驱动开发

基于主干的开发每天至少向主干Trunk提交一次。Trunk始终在可发布状态。将新功能代码(或者未完成的代码)隐藏在功能开关后面。使用branch by abstraction 进行重构。可以开分支branch,但是一般不超过2天。branch by abstraction功能开关的优劣势优点:新功能和代码发布分离,减轻发布风险迭代速度快,快速创新实验可定制高级A/B...

2019-01-15 19:44:33 723

原创 数据结构与算法-如何轻松写出正确的链表代码

极客学习笔记6大学习技巧技巧一:理解指针或引用的含义含义:将某个变量(对象)赋值给指针(引用),实际上就是就是将这个变量(对象)的地址赋值给指针(引用)。示例:p—&amp;amp;amp;gt;next = q; 表示p节点的后继指针存储了q节点的内存地址。p—&amp;amp;amp;gt;next = p—&amp;amp;amp;gt;next—&amp;amp;amp;gt;next; 表示p节点的后继指针存储了p节点的下下个节点的内存地

2019-01-14 16:31:36 149

原创 数据结构与算法-如何用链表来实现LRU缓存淘汰策略

极客笔记什么是缓存?缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非广泛的应用,比如常见的CPU缓存、数据库缓存、浏览器缓存等等。为什么使用缓存?即缓存的特点缓存的大小是有限的,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?就需要用到缓存淘汰策略。什么是缓存淘汰策略?指的是当缓存被用满时清理数据的优先顺序。有哪些缓存淘汰策略?常见的3种包括先进先出策略...

2019-01-13 22:02:10 337

原创 数据结构与算法-为什么数组从0开始

极客学习笔记从数组存储的内存模型上来看,“下标”最确切的定义应该是“偏移(offset)”。前面也讲到,如果用 a 来表示数组的首地址,a[0] 就是偏移为 0 的位置,也就是首地址,a[k] 就表示偏移 k 个 type_size 的位置,所以计算 a[k] 的内存地址只需要用这个公式:a[k]_address = base_address + (k-1)*type_size但是,如果...

2019-01-12 11:34:14 545

翻译 阿里开源分布式事务框架-fescar

fescar 是一种分布式事务解决方案,具有高性能和易用性的微服务架构分布式事务分布式事务是一个全局事务,由一批分支事务组成,通常分支事务只是本地事务FESCAR有3个基本组件事务协调器(TC):维护全局和分支事务的状态,驱动全局提交或回滚。Transaction Manager(TM):定义全局事务的范围:开始全局事务,提交或回滚全局事务。资源管理器(RM):管理分支事务的资源,...

2019-01-12 10:04:52 1450

Java程序设计[唐振明][程序源代码]

Java程序设计[唐振明][程序源代码],提供程序源代码,还不错的一个东西

2012-01-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除