- 博客(847)
- 资源 (18)
- 收藏
- 关注

原创 基于Sentinel的高可用限流系统HASentinel设计及实现
一、背景说明1、为什么要限流拿旅游景点举个示例,每个旅游景点通常都会有最大的接待量,不可能无限制的放游客进入,比如故宫每天只卖八万张票,超过八万的游客,无法买票进入,因为如果超过八万人,景点的工作人员可能就忙不过来,过于拥挤的景点也会影响游客的体验和心情,并且还会有安全隐患;只卖N张票,这就是一种限流的手段。软件架构中的服务限流也是类似,也是当系统资源不够的时候,已经不足以应...
2020-01-02 19:17:51
2784
原创 Spring Gateway集成 Nacos注册中心不能够发现服务的问题解决
一、问题描述我们现在是在用Nacos替换Eureka,原来Eureka和Spring gateway运行正常,可以通过Spring gateway调用注册到Eureka中的服务。当前Spring cloud的版本是Hoxton.SR8,Nacos discovery的版本为0.9.0.RELEASE,使用的Nacos版本为2.0.3。Nacos替换Eureka改动的地方如下:1、去掉POM中Eureka的引入;2、去掉主类中引入的@EnableEurekaClient注解;3、引入N
2021-10-09 17:31:37
14697
原创 Nacos使用域名做为服务地址遇到的问题及解决方案
一、发现问题应用启动时,增加Nacos服务端的配置信息。应用使用IP加端口连接Nacos服务器时,运行一切正常:#启动参数增加以下Nacos参数-Dspring.cloud.nacos.discovery.namespace=DEV -Dspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848但是将server-addr换成解析好的域名就有问题:#Nacos默认的服务端端口为8848,因而Nacos服务端的端口必须配置,#否
2021-09-22 13:42:55
11310
原创 Eureka迁移到Nacos之服务名称大小问题解决
我们应用往Eureka中注册使用的名称以及应用内部通过Feign调用,使用的服务名称都是小写,如user-service,但是注册到Eureka中后,应用的名称全部都是以大写的形式存储及展现,由于Eureka客户端对大小写的支持都是一样的,因而通过Feign使用小写的名称调用就没有问题。现在是将Spring Cloud注册中心由Eureka迁移到Nacos,但是Nacos服务端及Nacos客户端对服务名称的支持是区分大小写的,即从Eureka同步到Nacos中的大写服务名称,通过Feign中使用小写的服
2021-09-17 14:11:39
2741
原创 HASentinel支持Nacos做为配置中心控制台改造完成
HASentinel(https://gitee.com/laofeng/hasentinel)支持Nacos做为配置中心控制台改造完成,先来张Nacos中配置的截图:后续会修改修改客户端,不过当前项目较忙,会先把Eureka切换为Nacos弄完后再接着弄了。本次同时把支持更多配置中心的架构给设计好了,后续会续还会支持Apollo,觉得好请观注项目的后续发展。...
2021-09-07 20:16:01
358
原创 Nacos的连接错误:ErrCode:-401, ErrMsg:Client not connected,current status:STARTING的解决办法
最近在将HASentinel(https://gitee.com/laofeng/hasentinel)接入Nacos配置中心,在连接的时候怎么都不能够连接成功,报错误:ErrCode:-401, ErrMsg:Client not connected,current status:STARTING使用的Nacos server及client的版本都是2.0.3。创建ConfigService使用的是方法ConfigFactory.createConfigService(Properties),
2021-09-07 18:34:17
23781
10
原创 NacosSync支持Eureka与Nacos的双向批量同步改造完成
默认情况下Nacos只支持单个应用的同步,针对数百个应用要配置同步,单页面配置就是一项不小的工作量,且每新增加一个应用就需要增加一个同步配置,如果是Eureka与Nacos的双向同步则需要增加两条配置,当然可以直接在数据库中插入数据,但是这毕竟也不是长久之计,使用上也会不便,更加不符合程序员的做事风格。改造完成后Eureka与Nacos双向配置,就只以下两条配置记录:且以后不论是Eureka或是Nacos有应用注册,都会同步给对彼此,不需要新增任何的配置:注册到Eureka的应用会自动同步到
2021-09-02 19:37:58
1568
2
原创 NacosSync从Eureka批量同步应用到Nacos改造完成
默认情况下Nacos只支持单个应用的同步,针对数百个应用要配置同步,单页面配置就是一项不小的工作量,当然可以直接在数据库中插入数据,但是这毕竟也不是长久之计,使用上也会不便,更加不符合程序员的做事风格。于是就直接针对源码开刀,改造源码支持应用名称配置为“*”时,表示从Eureka中同步全部的应用信息:现在已经改造完成了,一项配置完成了原来数百项配置才能够完成的工作,哦耶!后续接着改造从Nacos中到Eureka的批量化同步!...
2021-08-31 18:55:53
613
原创 Nacos作为Dubbo注册中心时Consumer更新Provider的机制
一、NacosRegistryConsumer端启动时,通过NacosRegistry中的doSubscribe(...)方法,往Nacos服务端发起注册及获取Provider信息:方法doSubscribe(URL, NotifyListener)中根据Consumer端的url生成对应的Provider服务名称,如此时consumer的url如下:consumer://192.168.22.198/cn.raysonblog.shopserviceprovider.service.Rp
2021-08-25 16:14:45
3150
原创 Nacos配置中心回调机制
一、Nacos的动态配置nacos 服务端保存了配置信息,客户端连接到服务端之后,根据 dataID、group及tanant(就是Namesapce)可以获取到具体的配置信息,当服务端的配置发生变更时,客户端会通过长轮询的HTTP长连接获取到变更通知,然后再由客户端主动去获取变更后的配置信息。二、Nacos回调机制1、Nacos 服务端创建了相关的配置项(创建 ConfigService并实例化 ConfigService);2、客户端添加 Listener进行监听:客户端通过在Cli
2021-08-24 17:56:55
3142
原创 基于Maven的YAPI文档生成插件yapidoc-maven-plugin
功能介绍自动扫描Spring的Controller代码并生成OpenAPI文档,无代码侵入。对比与Swageer的代码侵入显得更加简洁。项目地址:https://gitee.com/laofeng/yapidoc-maven-plugin诞生原因在开发的过程中,尤其是联调的过程中,接口出入参的修改是很频繁的一件事。这就导致开发过程中,修改了接口参数缺忘记修改接口文档。因此需要一个工具能够自动读取Java类中的注释来生成文档。对比SwaggerSpringfox的代码侵入性太强了,使得代码一点
2021-08-18 15:54:59
1382
3
原创 HASentinel被GITEE推荐了
早上打开Gitee,突然发现项目HASentinel被Gitee推荐了,感觉心里好开心!HASentinel特性:1、流控及降级配置改造为存储到Zookeeper中;2、将应用上报的Metrics持久化存储到Influxdb集群中;3、Metrics由Sentinel控制台主动获取,修改为由应用端主动上报,同时支持控制台集群化部署;4、优化Sentinel控制台的操作,将原来只能够针对应用的各个节点的配置操作,优化为针对应用本身的配置操作,然后应用到应用集群的所有节点;5、增加Grafa
2021-07-28 10:42:31
347
原创 将开源RocketMQ的Producer下线后重新启用的操作
由于平台应用场景的需要,允许将启动好的开源版本的RocketMQ的Producer执行下线、上线等操作,下线操作简单,调用其shutdown()可以方便的完成,但是上线这个操作着实费了点力气,主要发现以下几个问题:1、关闭后的Producer不可以再次启用执行了下线操作即执行了shutdown()方法的Producer,该Producer的状态变会为SHUTDOWN_ALREADY,是不允许再次上线的,当直接对该Producer执行start()方法时,就会报状态错误,也就是同一个Producer下
2021-07-23 11:36:17
963
原创 阿里云RocketMQ的订阅类Subscription的HashCode及Equals的设计问题
题外话设计并实现了一个消息投递平台,可以实现对不同业务场景的消息进行订阅,并将这些接收的消息根据业务场景需要,将其转投递到外部的ES、RocketMQ、Get API、Post API以及Spring Cloud类型的API,让应用以最小的接入及改造成本,实现应用的解耦。问题本次发现的问题为源消息中间为阿里云的RocketMQ,当我们在针对同一个Topic的不同Tag进行消息订阅的时候,发现最终都只能够订阅一个Tag,其它Tag的消息不能够订阅,以下代码是组装消息订阅的Map实现:如此时
2021-07-17 11:29:14
1566
3
原创 Docker下安装RocketMQ服务及控制台的Shell脚本
该脚本包括RocketMQ NameServer、RocketMQ Broker及RocketMQ Console的一键安装,其中rocketmq的版本为当前最新版本4.8.0,使用的是foxiswho打包的镜像,而rocketmq-console-ng在Docker上面找了一下,打包的版本至少都是半年以前的了,因而自己拉取最新源码打包并推送到了Docker镜像仓库中。当前安装脚本通过自定义网络及指定网络别名的方式,解决了不同Docker容器之间的相互访问的网络问题,脚本如下:#创建RocketM
2021-07-14 10:54:13
715
原创 Java项目发布到Maven中央仓库操作步骤及相关注意事项
1 注册maven(oss)账号注册地址: https://issues.sonatype.org/secure/Signup!default.jspa注册成功后登陆到首页2 创建一个IssueProject: 项目类型,一般为Community Support。Issue Type: 问题类型, 新的项目为New Project。Summary:项目名称,如HASentinel。Description:项目描述,介绍一下当前项目。Group Id:对应pom.xml
2021-07-04 11:07:40
1329
3
原创 我当宝贝的eeefff.com域名,被我误会了5年
自2016我注册了域名eeeffff.com以后,该域名就被我当宝一样收藏着,虽然在移动互联网时候,现在域名已经不是那么重要的了,但是好的域名收着心理也觉得有成就感,证明自己没有在PC时代白混。但是eeeffff.com一直被我以为是eeefff.com,直到今天我才发现这个问题!为了让HASentinel(基于阿里Sentinel做了高可用及存储持久化改造的项目,可以看我前一篇文章了解)的相关组件上传到Maven中间仓库,就需要做域名拥有者认证,其中有一个认证环节就是给域名增加一条TXT解
2021-07-02 18:40:41
499
2
原创 书名终于确定了:Elasticsearch从原理到实践
经过几天的修改和删减,500多页的书减少到了373页,博文视点的宋编辑也推荐了一个适合本书内容的名字:《Elasticsearch从原理到实践》,虽然这个名字土了点,但是编辑说这是主流书籍的名称,那好吧,就定它了。如果想了解一下这本书,可以看一下我发布的关于Elasticsearch的文章,本书从零基础开始讲解,包括原理讲解、索引操作、文档操作、Mapping及聚合功能等章节,顺便问一下,各位看官对Elasticsearch感兴趣吗?附图中有一些技术书籍的取名参考,感兴趣的可以收藏备用哦。
2021-04-21 17:18:19
797
1
原创 Eureka节点信息同步延迟及单个注册中心节点load偏高问题的排查
问题现象1、网关会报访问后端正在发布的应用超时的错误:2、Eureka注册中心负载Load不均衡二、问题分析1、Eureka客户端同步节点信息的分析Eureka-Client中的com.netflix.discovery.DiscoveryClient类,为负责与Eureka注册中心进行沟通协调的实现类,包括应用节点往注册中心注册、应用节点状态向注册中心更新状态、从注册中心同步注册应用信息等功能。com.netflix.discovery.DiscoveryCl..
2021-03-29 14:06:09
2414
3
原创 一个操作阿里云K8S容器的简易命令
每次都是写完成的K8S命令操作,比较繁锁,就写了一个小小的工具(注:要使用该工具,需要先在本地配置好阿里云的K8S配置,并且该工具需要在Linux的环境化使用)简化了操作,操作如下:完整的Shell脚本如下:#!/bin/bash#功能说明:根据输入的应用名称,直接进入到其对应的K8S Docker容器中#设备要访问环境的namespace,该值必须配置namespace="你要操作的的namespace"if [ "$namespace" == "" ]; then ech
2020-12-21 15:40:19
908
原创 基本Spring Cloud的微服务架构搭建及应用(一)
1、Spring Cloud介绍Spring Cloud家族有许多成员:Spring Cloud Config - 配置管理工具包,集中化管理集群配置,目前支持本地存储、Git 以及 Subversion;Spring Cloud Bus - 事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与 Spring Cloud Config 联合实现热部署;Spring Cloud Sleuth - 日志收集工具包,封装了 Dapper 和 log-based 追踪以及 Zipkin
2020-06-19 22:47:46
1056
原创 阿波罗使用注意事项
1.引入客户端依赖<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.5.1</version></depend...
2020-03-13 14:24:28
2182
原创 Elasticsearch索引的基本操作(9)-索引的强制合并
强制合并的功能为强制合并一个或多个索引,目的是通过索引合并达到减少段的数量,通过POST方法执行_forcemerge API。强制合并请求在没有执行完成之前,请求会一直被阻塞,直到执行完成才会返回,如果期间该HTTP请求由于网络或者其它原因被断开,合并请求将继续在后台执行,直到完成或发生异常结束。如果已经有强制合并正在执行,后续发起的强制合并请求将被会阻塞,直到当前正在执行的合并请求执行完后...
2019-12-25 06:38:15
3374
原创 Async-profiler介绍
1、介绍Async-profiler是一个对系统性能影响很少的Java采样分析器,它的实现是基于HotSpot特有的API,通过这些特有的API收集堆栈跟踪和跟踪内存分配,因而其可以和OpenJDK、Oracle JDK和其他基于HotSpot JVM的Java应用在运行时协同工作。Github项目链接地址:https://github.com/jvm-profiling-tools/as...
2019-12-15 16:34:59
12580
1
原创 DynamicDatabaseSource,在应用端支持数据库的主从
说明通过AOP的方式,根据当前操作的读写类型,自动切换数据源为主库还是从库,配置和使用都很简单,减少支持读写分离中间的引入,避免性能损失。项目地址:https://gitee.com/laofeng/DynamicDatabaseSource一、介绍生产环境下,单个MySQL在小业务量下,支持读写是没有问题的,但是随着业务量的增加,至少此时需要做的就是将数据库的读写进行分离,以便于...
2019-12-05 11:03:20
839
原创 Redis中的Multi事务
一、概述Redis中的Multi和Pipleline都可以一次性执行多个命令,但是Pipeline只是把多个redis指令一起发出去,redis并没有保证这些指令执行的顺序,且减少了多次网络传递的开销,因而其执行效率很高;Multi相当于一个redis的transaction,保证整个操作的有序性,通过watch这些key,可以避免这些key在事务的执行过程中被其它的命令修改,从而导致得的到结...
2019-12-02 22:51:49
3943
1
原创 Linux中Python应用CPU占用高问题排查
公司购买了一套由外部供应商提供的呼叫中心系统,在使用的过程中发现其LOAD和CPU占用偏高,由于没有源代码也不太清楚其内部的实现逻辑,只能够通过观察系统资源的消耗来排除其问题,以下记录的是问题排查的过程。1、通过top命令查看其CPU占用可以看到其load占用为“20.14, 16.42, 19.16”,三个数字分别表示cpu在1分钟、5分钟及15分钟的load,cpu的使用率也偏高,...
2019-11-20 16:21:03
22068
4
原创 Elasticsearch索引的基本操作(8)-索引缓存、refresh、flush等操作
1、缓存清理通过缓存清理的API _cache/clear,需要使用POST方法执行,可以清理指定索引或整个集群的缓存。清除单个索引的缓存,操作如下: POST /new_index/_cache/clear {} 清除多个索引的缓存,操作如下: POST /new_index,new_index_2/_cache/clear {} ...
2019-06-22 09:53:00
7707
原创 Elasticsearch索引的基本操作(7)-索引模板
1、说明创建索引模板使用PUT方法,索引模板用于定义在创建新的索引时自动应用的模板,可以创建普通索引模板,也可以创建别名索引模板等,索引模板中的信息主要包括以下部份:可套用该索引模板的索引名称格式,名称支持通配符,也可以配置多个名称格式匹配格式; 索引的基本设置(settings); 索引的字段映射(mapping)信息; 别名(alias); ...模板创建语句语法如下所示:...
2019-06-21 08:15:09
4375
原创 Elasticsearch索引的基本操作(6)-索引设置
1、索引设置的查看查看索引的设置通过_settings API,使用GET方法操作。1.1、查看单个索引的设置查看索引new_index的设置,操作如下: GET /new_index/_settings 响应如下: { "new_index" : { "settings" : { "index" : {...
2019-06-20 15:32:32
6450
原创 Elasticsearch索引的基本操作(5)-别名设置
1、别名Elasticsearch中的别名,可以分为索引别名、过滤器别名、路由别名等,不同的别名适用于不同的应用场景:索引别名就是给一个或几个索引重新定义一个名字,操作索引别名时会转化为对真实索引的操作,定义索引别名时不可以与真实的索引同名; 过滤器别名提供了一种创建同一索引的不同“视图”的简便方法,可以使用Query DSL定义过滤器,并使用此别名将其应用于所有“搜索”,“计数”,“按...
2019-06-19 20:22:40
8932
原创 Spring中使用atomikos+druid实现经典分布式事务
经典分布式事务,是相对互联网中的柔性分布式事务而言,其特性为ACID原则,包括原子性(Atomictiy)、一致性(Consistency)、隔离性(Isolation)、持久性(Durabilit):原子性:事务是一个包含一系列操作的原子操作。事务的原子性确保这些操作全部完成或者全部失败。 一致性:一旦事务的所有操作结束,事务就被提交。然后你的数据和资源将处于遵循业务规则的一直状态。 隔...
2019-06-18 21:13:08
3236
原创 分布式事务中使用RocketMQ的事务消息机制优化事务的处理逻辑
1、事务消费介绍我们经常支付宝转账余额宝,这是日常生活的一件普通小事,但是我们思考支付宝扣除转账的钱之后,如果系统挂掉怎么办,这时余额宝账户并没有增加相应的金额,数据就会出现不一致状况了。上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告后,除了在点击事...
2019-06-16 22:29:26
8345
6
原创 Docker中RocketMQ的安装与使用
搜索RocketMQ的镜像,可以通过docker的hub.docker.com上进行搜索,也可以在Linux下通过docker的search命令进行搜索,不过最近防火墙升级后,导致国外的网站打开都很慢,通过命令搜索反而会更加方便,操作Docker命令一定要是root用户或者具有root权限的用户。查询操作如下:docker search rocketmq可以得到如下的结果:镜像倒是蛮...
2019-06-16 11:34:32
53527
29
原创 Elasticsearch索引的基本操作(4)-Mapping设置
1、Mapping设置Mapping设置API _mapping ,允许增加新的字段到指定索引中,或在满足一定的条件下修改已经存在的字段,需要使用PUT方法。1.1增加新的字段到索引中增加一个new_name到已经存在的索引new_index中,操作如下: PUT /new_index/_mapping { "properties":{ ...
2019-06-16 09:53:10
6579
原创 Ubuntu Linux下修改docker镜像源
在国内访问国外的Docker镜像源通常都是非常慢的,特别是最近GFW升级后,就变得更加慢了,因为要使用Docker中的镜像,这个时候最好就是将镜像指向国内的资源。国内亲测可用的几个镜像源:Docker 官方中国区:https://registry.docker-cn.com网易:http://hub-mirror.c.163.com中国科技大学:https://docker.mirr...
2019-06-15 15:51:29
30965
3
原创 Elasticsearch索引的基本操作(3)-索引的滚动操作
1、说明笔者的工作场景中,每天需要使用Elasticsearch处理数亿的日志记录,这些数据之间不会有直接的关系,只是用于记录以及用作后续的分析处理以及报表输出。如果都将这些数据所有的数据都放到相同的索引中,那随着时间的堆积,这无疑将会是非常庞大的数据,并且随着索引数量的增加,后续数据的插入和查询,都将会变得越来越慢。Elasticsearch中提供了对滚动索引(rollover inde...
2019-06-15 10:49:04
5947
6
原创 Java中的SPI(Service Provider Interface)介绍及示例
一个服务(service)通常指的是已知的接口或者抽象类,服务提供方就是对这个接口或者抽象类的实现,然后按spi标准存放到资源路径META-INF/services目录下,文件的命名为该服务接口的全限定名。如有一个服务接口com.test.Service,其服务实现类为com.test.ChildService,那此时需要在META-INF/services中放置文件com.test.Se...
2019-06-15 00:27:48
48441
3
Hadoop环境搭建、配置及通过执行计算来验证的示例
2013-12-26
流程图绘制软件 Dia for Windows 0.97.2
2013-08-24
简单的JAVA HTML服务器
2009-10-19
将SQL的查询结果以表格形式返回,并生成翻页等
2007-08-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人