和光同尘
文章平均质量分 60
向大海走去
这个作者很懒,什么都没留下…
展开
-
Naocs源码-客户端长轮询实现
前言上文说到 NacosConfigService 会初始化 ServerHttpAgent ,本文接着来讲ServerHttpAgent初始化调用有参构造初始化public ServerHttpAgent(Properties properties) throws NacosException { //初始化ServerListManager this.serverListMgr = new ServerListManager(properties);原创 2020-12-03 15:06:48 · 389 阅读 · 0 评论 -
Nacos源码-ConfigService Demo案例引发的源码跟踪
前言近期在学习Spring Cloud Alibaba系统,便记录Nacos配置中心的源码学习从nacos-github 下载源码,IDEA打开,启动过程这里不再叙述了。ConfigServiceexample工程有个ConfigExample类,该类展示了如何从naocs控制台获取配置信息,我们一起来看一下public class ConfigExample { public static void main(String[] args) throws NacosException,原创 2020-12-03 10:49:53 · 395 阅读 · 0 评论 -
Apollo源码-打通Spring体系配置热更新
前言在更新Spring Cloud Alibaba Nacos时,想到之前阅读过Apollo的源码,便在这插入记录了过来,后续更新Nacos Config源码Apollo简介fork 源码地址 apollo源码参考apollo架构中心设计主要分为 Config Service、Admin Service、Portal、Client 四部分上文介绍到客户端如何更新属性值的,本文介绍apollo的自动装配也与上文有关联自动装配apollo自动装配 ,我们在使用apollo时,会扣上 Enable原创 2020-12-03 09:43:37 · 628 阅读 · 0 评论 -
Apollo源码-打通Spring体系
接下来我们看 fireRepositoryChange 方法protected void fireRepositoryChange(String namespace, Properties newProperties) {//遍历配置仓储监听器for (RepositoryChangeListener listener : m_listeners) {try { //回调方法通知配置变更 listener.onRepositoryChange(namespace, newProperties);原创 2020-12-02 19:04:52 · 431 阅读 · 0 评论 -
Apollo源码-长轮询客户端实现
前言在更新Spring Cloud Alibaba Nacos时,想到之前阅读过Apollo的源码,便在这插入记录了过来,后续更新Nacos Config源码Apollo简介fork 源码地址 apollo源码参考apollo架构中心设计主要分为 Config Service、Admin Service、Portal、Client 四部分上文介绍到长轮询服务端实现,本文介绍客户端的长轮询实现长轮询感知配置发布-客户端实现从上文中我们知道,服务端暴露了一个将请求挂起60s的接口 /notifi原创 2020-12-02 19:03:26 · 933 阅读 · 1 评论 -
Apollo源码-长轮询服务端实现
前言在更新Spring Cloud Alibaba Nacos时,想到之前阅读过Apollo的源码,便在这插入记录了过来,后续更新Nacos Config源码Apollo简介fork 源码地址 apollo源码参考apollo架构中心设计主要分为 Config Service、Admin Service、Portal、Client 四部分上文介绍到拉取消息监听器处理,本文介绍服务端如何处理客户端请求的长轮询感知配置发布-服务端实现让我们来看看客户端是怎么拿到消息通知的,服务端又是怎么进行长轮原创 2020-12-02 18:38:23 · 786 阅读 · 0 评论 -
Apollo源码-Adminservice发布ReleaseMessage消息
前言在更新Spring Cloud Alibaba Nacos时,想到之前阅读过Apollo的源码,便在这插入记录了过来,后续更新Nacos Config源码Apollo简介fork 源码地址 apollo源码参考apollo架构中心设计主要分为 Config Service、Admin Service、Portal、Client 四部分上文介绍到ReleaseController#publish 新增了Release发布对象,本文来跟踪它做的第二件事发送ReleaseMessage消息me原创 2020-12-02 17:59:28 · 215 阅读 · 0 评论 -
Apollo源码-Portal发布配置
前言在更新Spring Cloud Alibaba Nacos时,想到之前阅读过Apollo的源码,便在这插入记录了过来,后续更新Nacos Config源码Apollo简介fork 源码地址 apollo源码参考apollo架构中心设计主要分为 Config Service、Admin Service、Portal、Client 四部分本文介绍的Portal 主要是提供用户管理界面,接口来自Admin Service提供port页面触发配置新增页面路由/apps/{appId}/envs/原创 2020-12-02 17:42:02 · 316 阅读 · 0 评论 -
Spring Cloud Alibaba搭建
Spring Cloud Alibaba 也是微服务开发一站式解决方案,为什么说也是呢?cloud alibaba出来之前,有Spring Cloud生态,其实Cloud Alibaba也是基于Spring Cloud的抽象的分布式系统开发工具包。它包含开发分布式微服务应’用的必须组件。主要包含 :Nacos : 服务发现、注册中心与配置中心角色。Sentinel : 流量控制、熔断降级、系统负载保护RocketMQ : 消息服务Dubbo : RPC服务调用Seata : 分布式事务解决方案原创 2020-12-02 14:01:33 · 200 阅读 · 0 评论 -
Jenkins多分支发布环境搭建与排坑
项目背景项目分支越来越多,想避免传统的打包方式,在测试环境采用快速部署,方便测试,于是集成Jenkis环境搭建网上环境搭建的文章很多,参考Docker搭建Jenkins不过,该文章在实际使用过程中,并不会太顺利,主要是docker运行jenkins时没有挂在JDK和maven。我采用的是tomcat直接启动部署,在官网下载最新的Jenkis.war包丢到tomcat的webapp目录下,cd到bin目录执行start.sh即可。随后输入ip:端口/jenkins即可访问jenkins页面,初始化原创 2020-11-23 15:07:03 · 417 阅读 · 0 评论 -
Nacos客户端续约
客户端续约在阅读nacos实例注册时,我们看到,客户端会每隔5s执行一次 BeatTask 任务,请求naming服务端的 /nacos/v1/ns/instance/beat 接口,那么服务端是如何处理HTTP心跳请求的呢?服务端续约服务端处理客户端HTTP心跳请求由 com.alibaba.nacos.naming.controllers.InstanceController#beat 第386行的service.processClientBeat(clientBeat); 进入到该方法/**原创 2020-11-07 17:40:37 · 688 阅读 · 0 评论 -
Nacos服务注册应用实例
前言Spring cloud Alibaba 版本依赖管理应用服务启动时,控制台打印 o.s.c.a.n.registry.NacosServiceRegistry : nacos registry, chu-cloud-alibaba-product 10.0.8.109:8000 register finished跟踪 NacosServiceRegistry 类NacosServiceRegistry类该类继承了 ServiceRegistry<Registration>,Ser原创 2020-11-03 19:49:58 · 2679 阅读 · 0 评论 -
EMQ规则引擎
场景IOT设备上报数据中,需要帮助我们去刷选出符合我们业务需求的数据,例如电量小于30%、多设备通讯需要知道设备的上下线状态等。规则引擎概述EMQ提供了开源的规则引擎,使用WebHook资料类型,将数据发送到Web服务。企业版支持更多方式。下图是EMQ规则引擎架构 :基于SQL、动态配置EMQX消息流与设备事件的处理、响应规则,进行消息存储、事件处理。当设备发送消息时,消息路由正常流转,发布到消息订阅者应用上,与此同时EMQ还会将消息流转到规则引擎,规则引擎进行刷选、匹配、处理,最后将符合条件原创 2020-08-28 16:15:32 · 1810 阅读 · 0 评论 -
百万量级下单优化
需求背景下单接口承接公司内部业务和开放API业务需求,在与PDD对接过程中,PDD给我们的订单量级是每日百万,峰值可达40W单以上,PDD要求我方TPS能达550笔/s。瓶颈专业测试人员在UAT环境进行下单压力测试,经过反复压测及配合阿里云监控,下单接口性能只能维持200-300笔/s,且压测到一半,后续的压测会经常出现请求超时的情况。分析首先,对于下单接口的性能问题,会有很多原因的,可能是RPC线程池设置不合理,下游依赖超时时间不合理等,需要对业务进行全链路分析。下单链路简至如下:由此初步判原创 2020-07-13 17:24:15 · 517 阅读 · 0 评论 -
【转载】git回退错误的提交
https://www.cnblogs.com/shuimuzhushui/p/10893551.html转载 2020-01-16 10:26:10 · 150 阅读 · 0 评论 -
【转载】多线程并发执行任务,取结果归集。终极总结:Future、FutureTask、CompletionService、CompletableFuture
https://www.cnblogs.com/dennyzhangdd/p/7010972.html转载 2020-01-15 09:59:49 · 199 阅读 · 0 评论 -
SpringBoot三大特性之组件自动装配
本文转载自https://www.jianshu.com/p/9dc7a385d19e和https://www.cnblogs.com/niechen/p/9027804.html?utm_source=tuicool&utm_medium=referral两篇作者文章整理而来结合SpringBoot的源码,首先从启动类注解@SpringBootApplication开始,附赠Spri...转载 2018-09-12 23:23:40 · 4697 阅读 · 0 评论 -
SpringCloud Config配置中心原理以及环境切换
springCloud config项目,用来为分布式的微服务系统中提供集成式外部配置支持,分为客户端和服务端spring官方如下介绍: Spring Cloud Config provides server and client-side support for externalized configuration in a distributed system. With the...原创 2018-09-19 14:42:52 · 9397 阅读 · 1 评论 -
SpringBoot 应用程序启动过程探秘
概述说到接触 SpringBoot 伊始,给我第一映像最深的是有两个关键元素:对照上面的典型代码,这个两个元素分别是:@SpringBootApplication SpringApplication 以及 run() 方法关于 @SpringBootApplication 注解的剖析已经在上文:《SpringBoot 中 @SpringBootApplication注解背后的三...转载 2018-09-19 17:58:33 · 174 阅读 · 0 评论 -
数据库设计技巧:一个字符串细节处理解决递归查询问题
转载自https://www.imooc.com/article/21103问题提出许多人在做开发时都会遇到这样的case,比如:需要维护一个部门层级结构,每个部门都要存储一个上级部门的id,记做parent_id, 当查询一个部门的所有子部门时,需要根据parent_id递归的查询到底层,层级深的部门需要查询次数特别多,那么问题来了,是否可以通过一个简单的设计满足一次查询某个部门的所有子...转载 2018-10-12 17:43:01 · 230 阅读 · 0 评论 -
分布式事务Hmily TCC源码跟读记录
这里就不罗列TCC事务的优点了,奉上该项目的地址https://github.com/yu199195/hmily一、什么是分布式事务分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点上,本质上来说,分布式事务是为了保证不同数据库的数据一致性TCC事务主要是基于AOP切面拦截实现的三阶段提交事务,下面我们来跟读源码二、CAP...原创 2018-09-30 16:00:20 · 2218 阅读 · 0 评论 -
@Autowired、@Inject和@Resource的异同点
转载自https://blog.csdn.net/alex_xfboy/article/details/789513531.为何要讲这篇呢?其实这个非常基础,但我发现有些地方很多人不熟悉,比如:@Autowired,@Resource的区别无非就是后者是jsr规约,前者是按类型装配,后者是按名称装配仅此而已。2.基本用法1.@Autowired引自:org.springfram...转载 2018-09-30 17:39:59 · 170 阅读 · 0 评论 -
优秀架构师需掌握的架构设计技巧
转载自https://blog.csdn.net/alex_xfboy/article/details/77583010只将我收益的部分摘抄了过来1. API与SPI分离框架或组件通常有两类客户,一个是使用者,一个是扩展者,在设计时,尽量把它们隔离开,而不要混在一起,也就是说,使用者是看不到扩展者写的实现的。比如:一个Web框架,它有一个API接口叫Action,里面有个exec...转载 2018-09-30 18:01:40 · 228 阅读 · 0 评论 -
Docker-compose部署Eureka高可用
在项目中,分布式环境下微服务的治理要充分考虑发生故障的情况,单台Eureka实例是不足以增强系统的可用性的,Eureka是支持高可用集群部署的,Eureka所有的节点即是服务提供方,也是服务消费方,通过如下两个参数配置,默认是trueeureka.client.register-with-eureka=trueeureka.client.fetch-registry=trueEurek...原创 2018-08-20 22:15:50 · 2781 阅读 · 1 评论 -
使用RabbitMQ实现延迟队列
场景:在项目中1.用户确认一个订单,若30分钟之类没有支付,则需要取消订单,若用定时任务去扫描订单表,第一,定时任务时间如何定义,有存在漏扫的风险,第二,订单表数据庞大,扫描表非常消耗性能,这时候该功能可以引入RabbitMQ延迟队列来做2.某条活动通知在指定的一天推送给用户,可以用延迟队列 定义:延迟队列即发送一条消息给目标队列,并非让目标队列立即接受到消息,而是让消息等...原创 2018-08-20 16:07:30 · 478 阅读 · 0 评论 -
记一次项目中使用的lambda表达式
场景: 店铺销量排行榜统计,报表微服务返回List<DTO>如下public class ShopSaleDto implements Serializable{ private Integer shopId; private Integer totalSaleNum;需求:需要返回店铺详情信息及销量步骤1:取出List<DTO>中的shopId集合调用店...原创 2018-06-12 17:57:06 · 753 阅读 · 1 评论 -
解决FeignException返回基础服务抛出的状态码
接上篇文章这样,虽然能够很好的处理@Valid出现的异常,但是如果是主动抛出的自定义异常和Assert断言异常,则会进入FeignException.errorStatus处理,查看源码它将message封装了feign抛出的status500以及body的content(即你主动抛出的message信息)意味着,断言异常我们可以通过ErrorDecoder的方式再通过全局异常拦截获取messag...原创 2018-04-24 15:50:20 · 29788 阅读 · 12 评论 -
Feign调用微服务异常配合Hystrix的正确处理方式
这是本人在项目中总结出来的基础服务异常的处理方式,同时也借鉴了其他博客大神的内容整理出来的前提项目中全局禁用了feign的hystirxfeign: hystrix: enabled: false 意味着,当基础服务出现异常无法通过feign的fallback配置类降级,这里研究服务熔断的方式在方法场景所期望的:1.基础服务能主动抛出自定义异常,同时不触发熔断,把异常信息返给调用者2....原创 2018-04-23 21:25:55 · 19159 阅读 · 2 评论 -
微服务消费端通过feign调用微服异常问题
在项目开发中,我们的调用方通过Feign调用微服时,如果微服出现业务异常(例如空指针,或抛出自定义的异常)和非业务异常(参数不合法4xx异常)都会进入到调用方的全局异常拦截器,抛出的code全部转换成了500,这样不友好实际上只有业务异常feign才会转换成500错误且转成FeignException,空指针不会暴露给调用者记录一次坑,feign的没有触发fallback原因{"status":...原创 2018-01-24 17:49:25 · 17087 阅读 · 0 评论 -
Eureka控制台快速查看swagger文档
在服务比较多的情况下,突然想看某个服务的API 文档虽然外面使用了Swagger来进行API的管理,但是还是得找到对应的服务,然后访问Swagger的管理页面才行。为了方便查询文档,把这个功能集成到Eureka中,这样就很方便了默认的Instances也是有链接跳转的,外面需要把这个跳转改成Swagger的管理页面这样直接点击open-microservice:192.168.1.107:8121...转载 2018-04-06 20:16:22 · 1591 阅读 · 0 评论 -
docker安装gitlab
查看docker端口占用fuser -v -n tcp 22 杀死端口kill -s 9 pid ---上面可能会用到下载gitlabsudo docker pull gitlab/gitlab-ce:latest 启动gitlabsudo docker run -d \--restart=always \-p 7080:80 \-p 2222:22 \-p 8443:443 \--na...原创 2018-04-03 21:47:43 · 674 阅读 · 0 评论 -
阿里云Centos7.4安装docker
1.移除旧版本软件包sudo yum -y remove docker2.安装yum-utils,这样就能使用yum-config-manager工具设置yum源sudo yum install -y yum-utils3.执行以下命令,添加Docker的yum源sudo yum-config-manager \> --add-repo \> https://docs.docker...转载 2018-04-03 20:03:00 · 284 阅读 · 0 评论 -
Docker安装rabbitMQ
1.获取镜像docker pull rabbitmq:3.6-management2.docker images查看镜像3.运行镜像,生成容器#启动rabbitmq服务,默认用户名为:xxx,密码:xxx 限制内存大小为1024MBdocker run -d --restart=always --name rabbitmq -e RABBITMQ_DEFAULT_USER...原创 2018-04-03 15:50:43 · 842 阅读 · 0 评论 -
Docker部署eureka-server
环境安装1.JDKyum -y install java-1.8.0-openjdk*配置环境变量打开 vim /etc/profile添加一下内容export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64 export PATH=$PATH:$JAVA_HOME/bin修改完后使之生效source ...原创 2018-04-10 15:55:02 · 6163 阅读 · 0 评论 -
微服务通过Feign调用进行密码安全认证
在项目中,微服务之间的通信也是通过Feign代理的HTTP客户端通信,为了保护我们的业务微服务不被其他非法未经允许的服务调用, 我们要进行访问授权配置!Feign是客户端配置,@FeignClient注解有个configuation属性,可以配置我们自定义的配置类,在此类中注入微服务认证拦截器 /** * 访问微服务需要密码 * @return */ @Be...原创 2018-04-08 20:39:14 · 13693 阅读 · 0 评论 -
Docker官方文档翻译1
转载请标明出处: https://blog.csdn.net/forezp/article/details/80098675 本文出自方志朋的博客本系列教程翻译于docker文档,文档地址:https://docs.docker.com/ ,由于某些原因,docker官方文档通常都是打不开,如果打不开,安装完docker之后,可以拉取docker文档的镜像在本地跑。安装docker完成后,输入一下...转载 2018-06-13 11:34:52 · 195 阅读 · 0 评论 -
Docker官方文档翻译2
转载请标明出处: https://blog.csdn.net/forezp/article/details/80158062 本文出自方志朋的博客容器准备工作安装Docker,版本为1.13或者1.13之上。阅读第一篇文章的内容给你的Docker环境一个快速的测试,确保所有的工作准备就绪:docker run hello-world介绍是时候以Docker的方式开始构建一个应用程序了。我们从这个层...转载 2018-06-22 14:17:26 · 199 阅读 · 0 评论 -
Docker官方文档翻译3
转载请标明出处: https://blog.csdn.net/forezp/article/details/80171723 本文出自方志朋的博客第三部分: 服务准备工作安装Docker 1.13及以上版本。安装Docker Compose阅读第一部分和第二部分的内容。确保你已经发布friendlyhello镜像到docker公共仓库。确保你的镜像能够作为一个可以部署的容器。 运行这个命令,在你的...转载 2018-06-23 11:29:52 · 567 阅读 · 0 评论 -
记项目中的一次Excel导入优化
业务场景: 商家后台发货支持Excel批量发货设置,当excel数据过万时,会导致上传excel失败,主要的性能瓶颈是微服务架构下的请求超时,到聚合微服务解析完Excel数据传输到订单微服务时,由于数据过于庞大,订单微服务处理时间较长,导致请求超时失败 解决方案:提高feign的超时配置 ribbon: ReadTimeout: 30000 ConnectTimeout: ...原创 2018-08-13 17:19:05 · 997 阅读 · 0 评论 -
HashMap & concurrentHashMap 底层实现
前言Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。 HashMap众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8...转载 2018-08-15 11:51:30 · 163 阅读 · 0 评论