- 博客(40)
- 收藏
- 关注
原创 Gateway 核心
0. 前言SpringBoot版本:2.1.9.RELEASESpringCloud版本:Greenwich.SR41. 核心简述客户端向网关发起的请求时,利用断言规则获取路由信息,然后根据路由信息执行过滤器链(负载均衡、发送请求、处理结果),最后将结果响应给客户端2. 请求处理流程学习参考:掘金小册《SpringCloudNetflix 源码解读与原理分析》...
2021-06-14 23:28:59 223
原创 Zuul 核心
0. 前言SpringBoot版本:2.1.9.RELEASESpringCloud版本:Greenwich.SR41. 核心简述客户端向网关发起的请求,通过 ZuulServlet 利用过滤器 ZuulFilter 在不同阶段(前置、路由、后置)进行处理后返回结果2. 请求处理流程3. ZuulFilter 过滤器执行流程前置、路由、后置方法按顺序执行,每个方法中的过滤器按顺序执行preRoute:ServletDetectionFilter:判断请求是否来自 Dispat
2021-06-14 00:05:52 169
原创 Hystrix-断路器核心原理
0. 前言SpringBoot版本:2.1.9.RELEASESpringCloud版本:Greenwich.SR41. HystrixCircuitBreakerpublic interface HystrixCircuitBreaker { // 是否允许请求 public boolean allowRequest(); // 断路器是否开启 public boolean isOpen(); // 关闭断路器 void markSucce
2021-06-13 10:35:05 270 2
原创 Ribbon 核心
0. 前言SpringBoot版本:2.1.9.RELEASESpringCloud版本:Greenwich.SR41. 核心简述实现负载均衡核心是依赖 LoadBalancerInterceptor 拦截请求做相应处理实现负载均衡的核心逻辑是通过负载均衡算法,取出实际需要调用的服务实例,并替换原有请求的 uri2. 负载均衡策略RoundRobinRule:轮询RandomRule:随机RetryRule:一定时间内不断重试轮询获取服务实例BestAvailableRule
2021-06-12 12:46:51 196 1
原创 你真的会用 @ConditionalOnXXX 注解吗?
1. @ConditionalOnBeanIOC 容器存在某个 bean 时public @interface ConditionalOnBean { // bean 类的类型 Class<?>[] value() default {}; // bean 类的类型名称(类路径,例如:String 类是 "java.lang.String") String[] type() default {}; // bean 上拥有指定注解 Class
2021-06-09 16:31:41 524
原创 (十二)EurekaServer-扩展
1. 读写锁1.1 位置// AbstractInstanceRegistry.classpublic abstract class AbstractInstanceRegistry implements InstanceRegistry { // 最近变更队列 private ConcurrentLinkedQueue<RecentlyChangedItem> recentlyChangedQueue = new ConcurrentLinkedQueue<
2021-06-08 09:22:06 134
原创 (十一)EurekaServer-定期清理过期实例
0. 前言springboot版本:2.1.9.RELEASEspringcloud版本:Greenwich.SR41. 方法入口@Configuration// Step1:引入 EurekaServerInitializerConfiguration 配置类@Import(EurekaServerInitializerConfiguration.class)@ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class)
2021-06-08 09:21:55 319
原创 (十)EurekaServer-处理客户端拉取全量、增量注册表请求
0. 前言springboot版本:2.1.9.RELEASEspringcloud版本:Greenwich.SR41. 处理客户端拉取全量注册表服务端接收客户端拉取全量注册表的请求在 ApplicationsResource 类中的 getContainers() 方法// ApplicationsResource.classpublic Response getContainers(@PathParam("version") String version,
2021-06-08 09:21:42 502
原创 (九)EurekaServer-处理客户端变更状态、删除状态请求
0. 前言springboot版本:2.1.9.RELEASEspringcloud版本:Greenwich.SR41. 处理删除状态请求服务端处理客户端变更状态和删除状态请求的方法都在 InstanceResource 类// InstanceResource.classpublic Response deleteStatusUpdate( @HeaderParam(PeerEurekaNode.HEADER_REPLICATION) String isReplicatio
2021-06-08 09:21:29 261
原创 (八)EurekaServer-处理客户端下架请求
0. 前言springboot版本:2.1.9.RELEASEspringcloud版本:Greenwich.SR41. 处理客户端下架请求服务端处理处理客户端下架请求在 InstanceResource 类的 cancelLease() 方法// InstanceResource.classpublic Response cancelLease( @HeaderParam(PeerEurekaNode.HEADER_REPLICATION) String isReplica
2021-06-07 11:34:54 105
原创 (七)EurekaServer-处理客户端心跳续租请求
0. 前言springboot版本:2.1.9.RELEASEspringcloud版本:Greenwich.SR41. InstanceResource服务端处理客户端心跳续租请求,在 InstanceResource 类的 renewLease() 方法// InstanceResource.classpublic Response renewLease( @HeaderParam(PeerEurekaNode.HEADER_REPLICATION) String isR
2021-06-07 11:34:13 236 1
原创 (六)EurekaServer-处理客户端注册请求
0. 前言springboot版本:2.1.9.RELEASEspringcloud版本:Greenwich.SR41. 客户端发起注册请求场景客户端初始化时直接注册(需要在配置文件配置)客户端发起心跳续租请求时收到服务端返回404,会立即再发起注册当客户端检测到相应配置更新时,向服务端发起注册请求进行数据同步2. ApplicationResource服务端处理客户端的注册请求,在 ApplicationResource 类中的 addInstance() 方法ps:Eureka
2021-06-07 11:28:54 302 1
原创 (五)EurekaServer-同步注册表机制
0. 前言springboot版本:2.1.9.RELEASEspringcloud版本:Greenwich.SR41. 方法入口@Configuration// Step1:引入 EurekaServerInitializerConfiguration 配置类@Import(EurekaServerInitializerConfiguration.class)@ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class)
2021-06-07 11:28:16 459 3
原创 (四)EurekaClient-启动时初始化的定时任务
0. 前言springboot版本:2.1.9.RELEASEspringcloud版本:Greenwich.SR41. 初始化定时任务客户端启动时,会初始化定时任务,方法入口在《EurekaClient-拉取注册表》提到过// DiscoveryClient.classDiscoveryClient(ApplicationInfoManager applicationInfoManager, EurekaClientConfig config, AbstractDiscoveryClien
2021-06-07 11:27:31 422
原创 (三)EurekaClient-发起状态变更和删除状态
0. 前言springboot版本:2.1.9.RELEASEspringcloud版本:Greenwich.SR41. 服务实例变更状态Eureka 整合了 Actuator ,可以通过 Actuator 变更实例在服务端的状态@Endpoint(id = "service-registry")public class ServiceRegistryEndpoint { // ...... @WriteOperation public ResponseEntity&
2021-06-07 11:26:30 353
原创 (二)EurekaClient-拉取注册表
0. 前言springboot版本:2.1.9.RELEASEspringcloud版本:Greenwich.SR41. 方法入口public class EurekaClientAutoConfiguration { @Configuration @ConditionalOnRefreshScope protected static class RefreshableEurekaClientConfiguration { // ......
2021-06-07 11:25:05 265
原创 (一)EurekaClient-服务实例注册、下架
0. 前言springboot版本:2.1.9.RELEASEspringcloud版本:Greenwich.SR41. 服务实例注册客户端触发注册的时机:客户端启动时发起注册,当配置文件配置了 eureka.client.should-enforce-registration-at-init = true ,不配置默认为 false客户端定期心跳续租时,向服务端发起心跳续租,服务端返回404,客户端立即发起注册客户端定期检查自身数据状态,当相关信息(数据中心、实例信息、健康状态)变
2021-06-07 11:23:41 193
原创 (零)Eureka-前置了解
0. 前言springboot版本:2.1.9.RELEASEspringcloud版本:Greenwich.SR41. InstanceInfo-实例信息类// 客户端中,表示自身实例信息// 服务端中,表示实例存在服务端注册表中的信息public class InstanceInfo { // ...... // 客户端中,表示自己的真实工作状态 // 服务端中,表示服务发现时实例想要暴露给其他实例的工作状态,不一定是实例的真实工作状态 p
2021-06-07 11:22:25 140
原创 aop+反射实现电话号加密
0. 背景当线上项目涉及大量查询接口中,存在电话号明文展示不合规的问题。如果对每个接口返回结果中电话号相关字段修改相关代码逻辑,则工作量较大花费时间多。因此设计电话号加密注解,减少工作量。1. 引入依赖<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.18</v
2021-06-03 14:56:16 167
原创 DispatcherServlet的工作原理
1. 核心组件DispatcherServlet:核心中央处理器,负责接收请求、分发,并给予客户端响应。HandlerMapping:处理器映射器,根据 url ,匹配出能处理请求的 Handler ,并根据已配置的拦截器,封装出HandlerExecutionChain ,返回给 DispatcherServlet 。HandlerAdapter:处理器适配器,根据 HandlerMapping 整理出的 HandlerExecutionChain ,适配执行相应的 Handler 。ViewR
2021-05-26 18:01:24 555
原创 热插拔过滤器链
0. 描述新增过滤器时,继承基础过滤器抽象类,并实现父类抽象方法即可;删除过滤器时,删除相关过滤器类即可。实现热插拔过滤器链。基于spring相关项目。类图:1. 过滤器链-ShopFilterChain@Componentpublic class ShopFilterChain { /** * 过滤链 */ private List<BashShopFilter> filterList = new ArrayList<&
2021-05-26 17:36:36 87
原创 Spring 事务的传播行为
@Servicepublic class TestService { @Autowired private UserDao userDao; @Autowired private TestService testService; @Transactional public void methodA() { userDao.upAgeById(1); try { testService.metho.
2021-03-30 14:35:22 69
原创 Python爬虫学习4----爬取豆瓣《八佰》电影短评并生成词云
爬取豆瓣《八佰》电影短评并生成词云图片import requestsimport lxml.htmlimport jiebafrom wordcloud import WordClouddef getEssayStr(): s = requests.Session() headers = { 'Accept':'application/json', 'Accept-Encoding':'gzip, deflate, br', 'Accept-Languag
2020-08-27 15:53:57 927
原创 Python爬虫学习3----xpath爬取哔哩哔哩排行榜
爬取哔哩哔哩月排行榜,并输出csv格式文件。import requestsimport lxml.htmlimport csvsource = requests.get('https://www.bilibili.com/ranking/all/0/0/30').content.decode('utf-8')selector = lxml.html.fromstring(source)items = selector.xpath('//ul[@class="rank-list"]/li')
2020-08-11 14:25:11 2886
原创 Python爬虫学习2----小说网站爬虫开发
从https://www.kanunu8.com/book3/8486抓取《天使国度的恶龙王妃》所有章节的网址,再通过一个多线程爬虫将每章的内容抓去下来。在本地创建一个“《天使国度的恶龙王妃》”的文件夹,并将小说的每一章分别保存到这个文件夹中。import reimport requestsimport osfrom multiprocessing import Pooldef get_article_url_list(html): top_url = 'https://www.kanu
2020-08-10 14:30:40 520
原创 Python爬虫学习1----单线程和多线程访问网页比较
爬虫是I/O密集型操作,在请求网页源代码时,使用多线程可以大大提高爬虫的运行效率。例子import requestsimport timefrom multiprocessing.dummy import Pooldef query(url): requests.get(url)start = time.time()for i in range(100): query('https://www.baidu.com/')end = time.time()print(f'单
2020-08-07 15:17:36 393
原创 java生成二维码
导入相关依赖<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.0</version></dependency><dependency> <groupId>commons-io</groupId> &l
2020-06-03 11:38:24 142
原创 微信获取access_token后,获取小程序二维码
导入相关依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.59</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</
2020-05-29 17:41:07 435
原创 代理模式学习
程序员接口/** * 程序员接口 */public interface Programmer { void coding();}实现支付模块代码编写的程序员Zzq/** * Zzq程序员 */public class Zzq implements Programmer{ @Override public void coding() { System.out.println("Zzq编写支付模块的代码"); }}为Zzq点赞的程
2020-05-11 15:53:36 118
原创 CentOS 7安装部署logstash6.3.2
下载logstash-6.3.2的tar包和mysql-connector-java-5.1.31的jar包。 https://elasticsearch.cn/download/https://mvnrepository.com/artifact/mysql/mysql-connector-java切到/usr/local目录下,上传logstash-6.3.2的tar包,解压ta...
2020-03-03 17:00:31 302
原创 CentOS 7安装部署kibana6.3.2
下载kibana-6.3.2的tar包。 https://elasticsearch.cn/download/切到/usr/local目录下,解压tar包,更改解压后文件夹名称。cd /usr/local/tar -zxvf kibana-6.3.2-linux-x86_64.tar.gzmv kibana-6.3.2-linux-x86_64 kibana-6.3.2切到/us...
2020-01-16 10:58:54 329
原创 个人常用stream流处理数据
People实体类public class People { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id...
2019-07-03 17:13:03 1285
原创 SpringBoot与邮件
相关依赖导入<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.4</version></dependency><...
2019-04-18 17:52:00 266
原创 SpringBoot自带定时任务以及异步执行
启动类加启动定时任务和启动异步的注解@EnableAsync@EnableScheduling创建定时任务类@Componentpublic class SimpleScheduleConfig { @Scheduled(cron = "0 33 16 ? * THU") @Async//开启异步方法 public void configureTas...
2019-04-18 16:38:53 553
原创 SpringBoot slf4j配置
src/main/resources 下创建logback.xml,输入配置内容<?xml version="1.0" encoding="UTF-8"?><configuration> <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符--> ...
2019-04-18 16:03:19 316
原创 简单使用poi并输出Excel表格
maven导入依赖包<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> &
2019-03-15 18:10:55 97
原创 linux服务器定期备份mysql数据库
在root目录下创建存放备份文件和存放备份指令脚本文件的文件夹mkdir /root/backupcd /root/backup创建sql文件夹,存放备份数据文件mkdir sql创建脚本文件存放备份数据库的指令vim backup.sh将备份数据库指令写入脚本文件中,然后保存退出备份指令: mysqldump -uroot -pzzq845211164 o2o >...
2018-11-15 15:42:41 226
原创 Eclipse远程连接服务器调试代码(spring boot项目)
将项目打包好并上传到服务器,打开服务器命令行界面,cd到项目包目录下,debug模式运行项目java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar 项目包运行成功后,去到Eclipse点击小强,Debug Configurations–>Remote Java Applicati...
2018-11-14 00:32:16 1652
原创 SpringBoot项目部署到linux服务器后在后台运行
先cd到上传到服务器的项目包的目录下,然后创建start.sh文件vim startup.sh然后输入以下内容,nohup命令是能够不挂断地运行命令输入完后保存退出,在运行刚刚创建的文件,会出现nohup: appending output to ‘nohup.out’,直接回车就好sh startup.sh这个时候查看以下运行的java进程就可以知道项目是否在后台跑着ps -e...
2018-11-14 00:11:39 720 2
原创 打包maven项目
先跳转到项目目录下cd 路径查看maven和jdk运行是否正常java -versionmvn -version确认正常后,输入一下命令,意思是先先清除已打包的包然后确定跳过单元测试进行项目打包mvn clean package -Dmaven.test.skip=true最后出现BUILD SUCCESS就是成功打包的意思,可以在项目文件下的target文件下看到打包好...
2018-11-13 23:41:41 136
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人