- 博客(49)
- 收藏
- 关注
原创 Spring cloud gateway浅析
使用网关的目的:前端无需关注具体请求哪个微服务,由网关来控制。网关统一拦截,可以做灰度/权限/限流/负载均衡等校验,无需每个微服务都重复实现这个逻辑为什么不用nginx:nginx的功能:?反向代理/负载均衡/HTTP服务器(动静分离)/正向代理/容错?/拦截?/限流?而网关可以做到:?使用java开发我用网关实现哪几个功能,实现的原理:?权限 场景:限流 场...
2020-02-15 22:19:16
1004
原创 nginx功能梳理
我了解到的nginx的功能有这些:反向代理/正向代理/负载均衡/容错/动静分离/健康检查/限流。1. 反向代理用户不知道,也不关注具体请求哪个服务,用户只与nginx服务器交互,由nginx控制具体发往哪个服务。2. 正向代理与反向代理不一样的是,此时用户知道自己想与服务1/服务2/服务3沟通,但是由于某些原因无法直接沟通,于是通过代理服务器(nginx)来实现。server { ...
2020-02-01 15:23:25
314
原创 代码分支策略以及git rebase笔记
在代码耦合比较少的情况下,可以使用以下的分支策略。(1)在各自的feature分支进行开发测试(2)同一时间上线的需要合进同一个release分支进行回归测试,由于代码耦合较少,可能产生的冲突较少,手工解决。(3)release分支经过回归测试后,即可上线。如果在feature上线之前,master已经上线了大量变更,此时将feature合进release可能会产生大量冲突,此时需要对f...
2019-08-16 13:42:00
585
原创 RocketMQ有序性分析
RocketMQ可以保证queue的消息顺序。如果希望保证消息顺序,可以这怎么做:(1)Producer对于需要顺序的消息发送到同一个queue中(2)Consumer使用MessageListenerOrderly来对消息进行有序消费代码示例在之前写过:https://blog.youkuaiyun.com/lblblblblzdx/article/details/87939187接下来以push...
2019-04-09 11:44:27
2296
原创 HAProxy了解
在项目中,为实现高可用的MQ服务,需要搭建HAProxy+多台MQ,故对HAProxy进行了解。对HAProxy的理解(1)首先是高可用的,可以支持上万的连接。(2)支持第四层、第七层的代理(3)隐匿后台复杂的部署,提供单一的入口(4)为每个服务提供负载均衡、健康检查功能。(5)作为唯一入口,在此步做好所有安全控制(6)在ssl、http压缩方面做了优化,提高传输速度基本的代理配置...
2019-03-26 20:40:01
519
原创 Netty关于select/epoll
使用Netty构建服务器时,需要指定parent线程池和child线程池,parent线程负责监听端口,一旦有连接接入,则注册到child线程池中的一个线程上,该连接的IO操作/任务都由该线程完成。换句话说,一个线程会负责多个连接的IO操作,也就是多路复用。Netty底层是使用系统提供的select或者epoll来实现多路复用的。先来科普下select/poll/epoll。select/p...
2019-03-25 14:55:39
9079
原创 TLSv1.3学习
TLSv1.3于2018年8月正式发布最终版本。如果想要浏览基于TLSv1.3的网页,需要浏览器支持,chrome的话需要打开chrome://flags/搜索tls并选择启用。浏览网页时打开开发者调试工具查看Security页签可以观察到网站使用TLSv1.2还是1.3。现在大部分网站还是使用TLSv1.2的,也有少部分使用TLSv1.3的网站的,如https://boke112.com/bk...
2019-03-24 21:44:40
7156
原创 TLSv1.2协议了解
首先明确TLS的作用三个作用(1)身份认证通过证书认证来确认对方的身份,防止中间人攻击(2)数据私密性使用对称性密钥加密传输的数据,由于密钥只有客户端/服务端有,其他人无法窥探。(3)数据完整性使用摘要算法对报文进行计算,收到消息后校验该值防止数据被篡改或丢失。TLS传输过程下面是使用wireshark抓包的结果,其中1-4是握手阶段,5是指握手后双方使用商议好的秘钥进行通讯。...
2019-03-23 00:17:53
67024
1
原创 SSL证书生成与使用(基于Netty)
为了接入SSL,故了解证书的种类/结构/生成方式和使用方式。证书的结构证书包含签发方信息,拥有者信息,公钥,签名等。签名是使用签发方私钥对证书进行加密运算的来,通过使用签发方公钥解密可以验证证书真伪。证书格式参考:https://blog.youkuaiyun.com/jjxojm/article/details/81266601证书的种类先了解两种证书,一种是自签证书,另一种是由机构签发的证书。...
2019-03-19 10:47:10
5068
原创 RocketMQ-NameServer分析
Rocketmq中的NameServer主要负责两个工作,broker管理和路由管理。这篇文章主要是分析NameServer如何完成这两个工作的。一、broker管理broker会定时上报broker的基本信息以及主题信息给NameServer,NameServer会将这些信息存储到RouteInfoManager中1. broker上报信息我们看看broker启动时关于上报信息的代码/...
2019-03-13 21:38:01
907
原创 RocketMQ集群-主题创建及队列分布
先了解集群是怎么搭建的,再了解主题在集群上的创建过程以及队列分布状态。搭建集群这里讨论主备和多主,暂不讨论多主备1. 主备master主要配置brokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 0brokerRole = ASYNC_MASTERslave主要配置brokerClusterName...
2019-03-06 15:51:16
11444
3
原创 RocketMQ客户端源码分析-DefaultMQPushConsumer
与DefaultMQProducer类似,DefaultMQPushConsumer包含了defaultMQPushConsumerImpl,而defaultMQPushConsumerImpl又包含了MQClientInstance。start观察MQClientInstance的start方法,重点关注以下两句this.pullMessageService.start();此处是对于...
2019-03-04 16:11:34
916
原创 RocketMQ客户端源码分析-底层通讯
RocketMQ客户端所有与NameServer和Broker的通讯都是通过MQClientAPIImpl完成的。MQClientAPIImpl包含一个NettyRemotingClient,使用netty实现。在启动MQClientAPIImpl时,会启动NettyRemotintClient,设置通讯时的线程池以及pipeline。pipelineNettyEncoderNetty...
2019-03-01 17:02:21
582
原创 RocketMQ客户端源码分析-DefaultMQProducer
结构DefaultMQProducer包含了DefaultMQProducerImpl,而DefaultMQProducerImpl又包含了MQClientInstance。startstart的逻辑主要在MQClientInstance,做了这四个事情:this.mQClientAPIImpl.start();APIImpl主要负责对外的API请求,比如在需要获取broker状态时...
2019-03-01 15:15:08
1510
1
原创 RocketMQ入门-几种使用方式
参考官网http://rocketmq.apache.org/docs/无序消费在上一篇里写过,这里主要讲有序消费、广播消费、延时消费、批量消费有序消费RocketMQ可以保证先进先出,但是如果有多个消费者同时在消费同一个队列,则无法保证消息被处理的先后次序。假如队列只有一个消费者,则消费必定有序,但这又降低了消费速度。对于这个的解决方案是,对于需要顺序的消息,都通过hash分配到同一队列,...
2019-02-27 20:52:12
5867
原创 RocketMQ入门-搭建与demo
使用docker搭建RocketMQ首先确认机器的内网地址和外网地址,我以{内网IP},{外网IP}表示nameserverdocker run -d -p 9876:9876 --name rmqserver \-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \foxiswho/rocketmq:serverbroker在...
2019-02-26 16:58:47
7031
原创 Shiro之Session分析
本文中的时序图使用在线工具https://www.websequencediagrams.com/生成背景:使用Spring boot搭建web工程,使用shiro做认证授权工作疑惑:成功登录之后,再次请求时,服务器是如何知道已经登录,是哪个用户,是使用HttpSession还是shiro的SessionSecurityUtils.getSubject()在处理请求时,可以通过Securi...
2019-02-11 16:59:33
1822
原创 Elasticsearch常用查询
使用评分查询来进行全文搜索或者其它任何需要影响相关性得分的搜索。除此以外的情况都使用过滤查询。过滤查询不需要计算得分,且会缓存结果。1. constant_score 查询常用于只有filter,查询结果使用常量评分GET /_search{ "query": { "constant_score": { "filter" : { "term" : ...
2018-11-27 00:14:08
169
原创 常用HTTP请求字段及场景笔记
acceptaccept字段表明请求可以接收的返回数据类型。可以是多个值,用逗号隔开,如application/json, text/plain也可以增加权重,不设置权重则默认为1,如application/json;q=0.5, text/plain服务端会根据该字段,选择其支持的权重最高的内容形式返回。实例:服务器使用了spring的@ResponseBody注解,并且...
2018-10-21 13:01:58
607
原创 常见HTTP状态码及场景笔记
状态码描述场景100continue101Switching Protocols客户端申请websocket连接时,会先发出一个http请求,请求头部声明Connection:Upgrade Upgrade:websocket,然后服务器响应状态码为101,表示切换协议,接下来就可以以websocket协议通讯了。200ok最常见的状态码,表示成功响应...
2018-10-17 22:47:36
1092
原创 RestTemplate原理与使用
1. 缘由项目中经常需要请求别的服务的HTTP接口,经常用到OkHttp或者HttpClient等,经别人推荐,发现Spring提供的RestTemplate也是挺方便的,对HTTP请求技术框架(如OkHttp/HttpClient)又进行了再一层的封装。如果不了解RestTemplate的原理,用起来总是出问题,此文章会深入的分析RestTemplate的原理,以及探究如何使用。2. 优点(...
2018-10-03 20:30:07
11011
原创 spring data jpa 使用(mysql)
1. 包依赖compile('org.springframework.boot:spring-boot-starter-data-jpa')compile('mysql:mysql-connector-java:8.0.12')2. 使用@EnableJpaAuditing@SpringBootApplication@EnableJpaAuditingpublic class...
2018-09-04 22:28:33
954
原创 aop基本概念和声明方式
概念advice/通知: 什么时候干什么事情pointcut/切点: 什么地方可以干这个事情advice与pointcut组成切面/aspect,在什么地方什么时候干什么事情joinpoint:软件中的连接点,这些点可以织入切面。五种通知类型beforeafterafter-returningafter-throwingaroundxml配置方式&lt...
2018-09-03 20:39:28
499
原创 bean声明方式
1. xml声明方式:<bean id="" name="" class=""> <property name="" value="" /> <property name="" ref="" /> <constructor-arg name=&
2018-09-03 20:29:39
939
原创 MyBatis深入分析
1. MyBatis的好处(1)封装JDBC操作 (2)完成对象到关系,关系到对象的映射 (3)可以在xml文件中灵活的编写sql2. 初始化MyBatis过程 以下部分源码来自官方文档根据官方文档,如果需要使用mybatis(1)可以使用xml声明&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&am
2018-08-19 14:21:32
617
原创 Spring boot 应用实现动态刷新配置
前面写过一篇《Spring Cloud Bus 实现配置实时更新》,是使用配置中心管理配置,使用spring cloud bus来实现实时通知。对于简单的SpringBoot应用,其实不需要使用配置中心也可以实现动态刷新配置。 参考:https://www.cnblogs.com/flying607/p/8459397.html 文章使用springboot版本:2.0.4.RELEASE s...
2018-08-17 23:04:50
25794
10
原创 Hystrix使用与原理浅析
目的优雅地处理服务失效,防止雪崩功能:(1)隔离失效服务。服务使用单独的线程池,当服务太多失效后被熔断,不调用该服务,从而无法影响其余服务。 (2)服务降级。当服务失效后,提供降级的处理方法。 (3)快速失败。可以设置时延,设置熔断条件,以达到快速失效,不会一直耗着资源。 (4)监控面板什么时候会熔断达到熔断条件(timeout、窗口时间内最大失败个数、窗口时间内...
2018-08-14 11:34:29
491
原创 Netty read/write 过程
上一篇博文整理出来,当channel收到消息后的处理流程//类名或对象名::调用方法NioEventLoop::processSelectedKey //1. 开始处理消息unsafe::read //2. 读取消息pipeline::fireC...
2018-08-11 16:17:05
3165
2
原创 Netty-ServerBootstrap源码分析
带着疑问分析源码:ServerBootstrap bind的过程究竟做了什么,它是如何去接受请求处理请求的分析bind方法粗略的跟踪ServerBootstrap的bind方法,画出时序图,红色标注了重要的步骤 可以发现,bind过程主要做了四个事情:(1)创建ServerChannel,用于接收外部的连接请求:newChannel (2)初始化channel:init...
2018-08-11 10:56:54
370
原创 Docker打包Spring Boot工程
1. 使用docker-maven-plugin插件在pom.xml中声明使用docker-maven-plugin插件<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <versi...
2018-08-09 19:48:29
308
原创 Spring Cloud Bus 实现配置实时更新
背景使用Spring Cloud Config Server,启动Service时会从配置中心取配置文件,并注入到应用中,如果在Service运行过程中想更新配置,需要使用Spring Cloud Bus配合实现实时更新。实现原理需要借助RabbitMQ等消息中间件来实现服务间的通讯ConfigServer改造目标:使ConfigServer暴露bus-refresh接口,...
2018-08-08 22:21:21
1648
原创 Spring Cloud Eureka Demo
Spring Cloud Eureka Server1. 通过spring.io创建工程,需要选择Eureka Server依赖2. 确认有以下依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sta...
2018-08-07 21:16:15
236
原创 Spring Cloud Config Client Demo
1. 通过spring.io创建工程,需要选择Config Client依赖2. pom.xml确认有以下依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artif...
2018-08-05 15:10:59
227
原创 Spring Cloud Config Server Demo
1. 建立工程可以通过start.spring.io创建,dependencies要选择ConfigServer2. pom.xml,确认有以下依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-c...
2018-08-03 23:22:45
800
原创 paho mqtt - Too many publishes in progress (32202)
在使用paho的包批量发送mqtt消息(QOS为0)时,跑了一定的时间后就会报错Too many publishes in progress (32202)。所使用包&amp;lt;!-- https://mvnrepository.com/artifact/org.eclipse.paho/org.eclipse.paho.client.mqttv3 --&amp;gt;&amp;lt;dependenc...
2018-07-22 23:05:28
10699
8
原创 Paho Java Client日志调试(mqtt)
参考官网:https://wiki.eclipse.org/Paho/Log_and_Debug_in_the_Java_client使用paho的包并发发送MQTT消息时总是报错,于是想打开日志调试。 1. 首先在项目里新建一个日志配置文件jsr47min.propertiesorg.eclipse.paho.client.mqttv3.handlers=java.util.log...
2018-07-22 19:55:58
2914
原创 Tomcat应用 web.xml的加载过程
server.xml中默认设置为&amp;lt;Host appBase=&quot;webapps&quot; autoDeploy=&quot;true&quot; name=&quot;localhost&quot; unpackWARs=&quot;true&quot;&amp;gt;如此设置则会自动加载webapps下的文件夹或
2018-07-06 21:33:30
5874
原创 Tomcat server.xml的加载过程
跟踪Tomcat的启动过程,可以发现是在Catalina调用load方法时对server.xml进行加载的观察Catalina的load方法load() -&gt; createStartDigester() -&gt; configFile() -&gt; digester.push(this) -&gt; digester.parse(...
2018-07-06 21:11:41
572
原创 Tomcat的启动过程
文章中所有-&gt;代表调用1. 寻找启动入口(1)可以观察启动脚本 bin/startup.sh -&gt; bin/catalina.sh -&gt; org.apache.catalina.startup.Bootstrap start(2)或者观察进程启动命令ps -ef|grep tomcat -&gt; org.apache.catalina.start...
2018-07-06 21:07:34
240
原创 Tomcat的组成
Server:可配置关闭端口和关闭指令 Service:一个Server有多个service Connector:连接器,可配置一个连接端口,一个协议处理器 Container(Engine):处理器 Host:可配置多个Host,如localhost、www.xxx.com Context::对应一个web应用,每个应用有一个ServletContext Executor:线程池,可...
2018-07-06 20:55:13
304
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人