自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不积跬步无以至千里; 不积小流无以成江海

博客里相关的代码存储在github上,地址为 https://github.com/hryou0922

  • 博客(108)
  • 收藏
  • 关注

原创 Spring cloud系列20 实现服务优雅上下线

在使用Spring Cloud微服务的过程中,必然会碰到微服务因为版本升级而重启。如果只是使用kill命令结束服务进程,则依赖此服务的客户端服务不会立即知道目标服务已经下线,仍然会调用目标服务借口,会因为访问失败会抛出异常,为了避免这个情况,我们希望实现服务升级对用户是无感知的如何解决问题首先我们搜索网络,发现这篇文章实用技巧:Spring Cloud中,如何优雅下线微服务?,但是这篇文章的方...

2019-08-22 20:02:40 2519 1

原创 Spring cloud系列20 OAuth2.0的实现客户端模式(client_credentials)支持refesh code

默认情况下OAuth2.0 客户端模式(client_credentials)不支持refresh code。现在由于业务的关系,需要支持refresh code。 在Spring OAuth2.0中 client_credentials模式对应的类是ClientCredentialsTokenGranter 在此类中有个变量可以控制是否返回refreshcode,此成员变量是allowRefresh,默认值为false。在此类的在grant()方法中,如果allowRefresh=false,则会将

2019-07-17 23:27:46 7509 1

原创 问题备忘:Spring Cloud OAuth2.0 开发过程中碰到的问题

Spring Cloud OAuth2.0 开发过程中碰到的问题:1.Spring Security – There is no PasswordEncoder mapped for the id “null”2. 调用接口/com-oauth/oauth/check_token失败3.问题3: 在使用密码模式时,抛出异常:o.s.s.o.provider.endpoint.TokenEndpoint : Handling error: UnsupportedGrantTypeException,

2019-07-17 23:11:55 6613

原创 Spring cloud系列十九 Spring Cloud G版本集成oAuth2.0

由于项目的关系,系统需要集成oAuth2.0功能实现自定义功能:1. OAuth2.0中定义四种授权模式对应的类及其他一些重要的类2. 实现自定义客户端账户(不是用户的账户)3. 实现自定义用户账号4. 将accesstoken存储到redis中

2019-07-16 23:50:48 2878

原创 Spring cloud系列十八 Spring Cloud 从Dalston.SR5到Greenwich.SR1 的升级记录

项目之前一直使用Spring Cloud Dalston.SR5,但是此版本2018年12月软件生命周期要结束,为了后续安全和维护的需要,需要将对版本进行升级。先从官网上分析D版本的后续版本的变更,发现大部分组件基本是兼容的,这里只列出对升级有重大影响的部分变化: - Edgware:依赖的spring boot版本升级仍然是1.5, 许多组件的名称变化 - Finchley:依赖的spring boot版本升级到2.0,真正的大版本升级,重大变化 - Greenwich:依赖的spring

2019-04-16 19:37:36 5131

原创 Spring Boot系列22 Spring Websocket实现websocket集群方案的Demo

Spring Boot系列20 Spring Websocket实现向指定的用户发送消息## 概述 上一篇文章Spring Boot系列21 Spring Websocket实现websocket集群方案讨论里详细介绍了WebSocket集群的有三种方案,并得出结论第三个方案是最好的,本文我们实现第三个方案工程工程名称: 本文在Spring Boot系列20 Spring Websoc...

2018-07-30 20:20:23 14386 15

原创 Spring Boot系列21 Spring Websocket实现websocket集群方案讨论

概述本文对websocket集群的方案进行讨论:实现websocket集群。通过webscoket实现前端实时接收服务推送的信息的功能; 将指定的消息推送到指定的用户webscoket集群方案集群方案分析在上个博文Spring Boot系列20 Spring Websocket实现向指定的用户发送消息中实现向指定用户发送消息的功能,但是我们将提供websock...

2018-07-26 20:11:19 25698 13

原创 Spring Boot系列20 Spring Websocket实现向指定的用户发送消息

概述不同上文Spring Boot系列十七 Spring Boot 集成 websocket,使用RabbitMQ做为消息代理,本文我们介绍通过Spring websocket实现向特定的用户发送消息。 本文的内容如下: 1. 首先实现简单的登录功能,这里向特定用户发送消息的必要条件 2. 用户登录系统后,才可以登录websocket,并重写MyPrincipal...

2018-07-19 22:22:55 11245 4

原创 Spring Boot系列十七 Spring Boot 集成 websocket,使用RabbitMQ做为消息代理

1. 概述在上篇文章Spring Boot系列十六 WebSocket简介和spring boot集成简单消息代理中我们使用的消息代理是spring内置的简单消息代理,简单消息代理非常适合入门,但是只支持STOMP命令的子集(如不支持acks, receipts),依赖于消息发送循环,并且不支持集群。我们可以使用外部的消息代理(如RabbitMQ, ActiveMQ),来实现全功能消息代理。本文以集

2018-04-07 00:37:21 17413 12

原创 Spring Boot系列十六 WebSocket简介和spring boot集成简单消息代理

1. 概述本文介绍webSocket相关的内容,主要有如下内容:WebSocket的诞生的背景、运行机制和抓包分析WebSocket 的应用场景、服务端和浏览器的版本要求Spring 内嵌的简单消息代理 和 消息流程图在Spring boot中集成websocket,并介绍stomp、sockjs的用法介绍拦截器HandshakeInterceptor和ChannelInterceptor

2018-04-05 23:06:22 29170 5

原创 系统设计 - Zero-Copy总结和性能测试

zero-copy应用场景:将本地一个文件通过网络传输给另一个程序。zero-copy技术的使用场景有很多,比如Kafka, 又或者是Netty等,可以大大提升程序的性能。下面我们通过对比传统方式和zero-copy的方式传输数据,来理解zero-copy。Zero-copy上下文切换的次数从4次降低到2次,数据复制次数从4次降低到2次。Zero-copy 中数据的copy都由DMA执行,CPU不参与复制,从而节省CPU的消耗。 Zero-copy中的zero不是指不需要copy,而是指user mo

2019-07-08 23:09:14 846

原创 问题备忘:Ftp上传文件线程一直阻塞在SocketInputStream.socketRead处

commons-net里使用ftp执行文件上传时,导致线程阻塞在java.net.SocketInputStream.socketRead0,导致线程池耗费光

2019-06-27 20:02:17 2818

原创 微信小程序学习和实践总结

微信小程序学习和实践总结: 技术方案选型;原生小程序的UI库推荐;小程序和公众号账号的如何统一; 消息推送机制;小程序推广三类方式; 小程序的如何发布; 如何获取公共号微信用户openid

2019-06-18 19:34:57 9505 1

原创 系统选型 - Java Bean Copy组件的性能对比

公司系统中之前一直有使用组件进行Bean copy的操作,只是知道此操作对性能有影响,但是到底有多少影响心里一直没有数。现在对Bean copy进行测试获取量化的结果目前Bean Copy的主流组件: - Apache BeanUtils - Spring BeanUtils - Cglib BeanCopier 众所周知Apache BeanUtils性能太差,一般不推荐使用。这里不对其进行测试,只测试后面两个组件

2019-04-28 23:17:31 1133 2

原创 系统设计 - 两个平台数据的同步系统设计和实现

2019-04-02 19:44:40 4267 1

原创 问题备忘: 将工程打包成jar包运行,就报java.io.FileNotFoundException: class path resource错误

最近在在使用@Value注入文件碰到如下问题:工程在在IntelliJ IDEA开发环境里正常运行,但是一旦将工程打包成jar包运行,就报java.io.FileNotFoundException: class path resource错代码如下:通过@Value将resource目录下test/billingconfig-file.xml目录注入到Resource上@Value("cla...

2018-11-19 21:20:42 9005

原创 组件使用总结:使用 JAXB 实现 XML文件和java对象互转

JAXBJAXB:实现xml和java对象互转JAXB是一个业界的标准,实现XML文件和Java对象的互转。JAXB是JDK 的组成部分。我们不需要下载第三方jar包 即可做到轻松转换。重要类和接口: ○ JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。 ○ Marshaller接口,将Java对象序列化为XML数据。 ○ Unmarshaller接口,将...

2018-11-04 13:40:24 747

原创 Spring cloud系列十七 Ribbon六大组件的详细说明和实现类,配置属性的详细说明

本文详细介绍Ribbon的六大组件:ServerList:定义获取服务器列表;ServerListFilter:对ServerList服务器列表进行二次过滤;ServerListUpdater: 定义服务更新策略;IPing: 检查服务列表是否存活;IRule:根据算法中从服务列表中选取一个要访问的服务;ILoadBalancer:软件负载平衡器入口,整合以上所有的组件实现负载功能。Ribbon详细的配置属性

2018-09-13 22:52:33 3609

原创 Spring cloud系列十六 Eureka各个组件详解和相关配置详细说明

Eureka概述经过一年的学习,对Spring Cloud了解加深,所以这里重新书写一下对Eureka的理解和大家分享Spring Cloud针对服务注册与发现,进行了一层抽象,并提供了三种实现: Eureka(支持得最好)、Consul、Zookeeper。本文详细讲解Eureka的用法。Eureka角色Eureka 是 Netflix 开源的服务注册发现组件,服务端...

2018-09-10 22:51:18 11495 3

原创 问题备忘:Cannot generate variable name for non-typed Collection parameter type

在spring mvc中,定义如下RequestMapping方法@RequestMapping(value="queryList",method = RequestMethod.POST)@ResponseBodypublic String queryList(HttpSession httpSession,@RequestBody(required = false) List<S...

2018-08-21 20:10:08 9004

原创 问题备忘: 服务器重启后,导致freeswitch的internal的profile无法启动

服务器断电重启后,导致freeswitch的internal的profile无法启动在fs_cli执行sofia loglevel all 9sofia profile internal start打印如下信息:2018-05-25 15:55:51.272130 [ERR] switch_core_db.c:108 SQL ERR [unsupported file for...

2018-08-11 11:13:06 4498 1

原创 freeswitch系列六 freeswitch在拨号计划中通过lua实现对redis操作

3种freeswitch访问redis数据方案的分析由于项目的原因,需要在freeswitch的拨号计划根据redis中特定key的值,判断后续的操作是转发请求或者播放录音。这里需要freeswitch中实现对redis的操作,目前实现的方案有三:创建一个java工程服务,通过esl和freeswitch交互,在java工程实现从redis获取数据。此方案优点是灵活性强,功能强大。缺点是...

2018-08-11 11:04:20 3985 2

原创 问题备忘: class path resource [xx] cannot be resolved to absolute file path because it does not reside

问题描述测试服务的版本是Spring Cloud Dalston.SR5 在Spring Boot中配置https时,代码如下: @Bean @ConditionalOnExpression("#{ ${self.https.enable:false}}") public EmbeddedServletContainerFactory servletContaine...

2018-07-31 19:57:15 23317 5

原创 Spring Boot系列十九 Spring boot集成 swagger

Swagger简述Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步Spring Boot集成Swagger本文涉及的工...

2018-06-07 20:18:44 4541

原创 Spring Boot系列十八 Spring AOP + 注解实现统一注解

概述在系统操作,当我们做了一些重要的操作时,如登陆系统,添加用户,删除用户等操作时,我们需要将这些行为持久化。本文我们通过Spring AOP和Java的自定义注解来日志的插入。此方案对原有业务入侵较低,实现较灵活日志的相关类定义我们将日志抽象为以下两个类:功能模块和操作类型: 使用枚举类定义功能模块类型ModuleType,如学生、用户模块public enum Mod...

2018-05-08 20:14:22 5922 3

原创 工作总结 - 大数据表分页查询优化

在我们进行数据查询时,不可避免要碰到分页的问题。我们通常会在返回数据表格页面下方显示如下信息用于对分页的信息的操作:总数: 200 [首页] [上一页] 2,[3],4,5 [下一页] [尾页] 对于小表我们可以直接操作数据获取如下信息使用sql语句计算出符合条件的记录总数 select count(1) from table where xxx in (1,2,3)...

2018-05-06 11:17:02 2947

原创 工作总结 - 服务迁移备忘和总结

最近刚刚完成一次服务迁移的工作,本人刚刚从离职同事的手中接手两个新的工程,立即要执行这么大的变动,对我也是巨大的挑战,现对迁移过程和碰到到问题进行记录。 因为业务的需要,需要将2台服务器上的服务迁移到新的2台服务上,主要需求如下:服务器A1,A2是要迁移的源服务器。服务器B1,B2是要迁移的目标服务器。服务器A1,A2上部署两个服务:lss和confService。这两个服务是j...

2018-04-24 20:16:54 2645

原创 Spring cloud系列十五 使用线程池优化feign的http请求组件

概述在默认情况下 spring cloud feign在进行服务之间的访问时,使用的是jdk默认的HttpURLConnection,没有使用线程池。本文先从源码分析feign产生的过程,然后通过为feign配置http线程池优化调用效率源码分析我们分析源码spring cloud feign使用http连接的方法。在spring-cloud-netflix-core/META-INF/spring

2018-04-11 23:29:10 17837 3

原创 博客文章汇总

概述本文对本博客所有的文章进行汇总Spring Boot 用法的博客总结Spring SpEL系列一 基础用法 Spring SpEL系列二 @Value,xml, Java代码使用SpEL Spring Boot系列一 spring boot 集成 slf4j 和 logback Spring Boot系列二 Spring @Async异步线程池用法总结 Spring Boot系列三 Sp

2018-04-07 23:15:50 1503

原创 Spring Boot系列十五 spring boot集成RabbitMQ 源码分析

1. 概述在这篇文章Spring Boot系列十三 Spring Boot集成RabbitMQ中,我们介绍了在Spring Boot如何使用RabbitMQ,本篇文章中,从源码中分析Spring Boot如何集成RabbitMQ。2. 入口在spring-boot-autoconfigure.jar中的spring.factories中有如下定义,表示spring启动时,会执行RabbitAutoC

2018-03-18 11:32:47 9468 4

原创 Spring Boot系列十四 Spring boot使用spring validation实现对Restful请求的数据进行校验

1. 概述本文介绍在Spring Boot中实现对请求的数据进行校验。数据校验常用到概念:JSR303/JSR-3491. 演示spring boot validation + 异常捕获机制实现数据自动校验功能2. 自定义校验注解,并演示这个用法

2018-03-15 19:57:19 13846 5

原创 Spring Boot系列十三 Spring Boot集成RabbitMQ

1. 概述之前我有一系列关于RabbitMQ文章介绍了RabbitMQ的用法,本篇我们介绍如何在Spring Boot中集成RabbitMQ。本篇主要内容如下:在Spring boot中消息的发送和接收的两种方式的demo配置使用MessageConverter对消息序列化2. Demo工程公共部分介绍工程名称:rabbitmq需要在我们的工程中的pom.xml引入新jar <!-- spri

2018-03-13 20:17:54 11640

原创 中间件系列十一 RabbitMQ之发送者端的消息确认机制

本篇的主要内容如下:1. 通过AMQP事务和publisher Confirm机制保证发送端的消息不丢失2. 演示RabbitMQ中的事务用法,并通过抓包分析协议,最后说明事务的事务的优点和缺点3. 演示RabbitMQ中Publisher Confirm模式的用法,并对以下3种方式通过抓包分析协议并说明其缺点和优点 - 同步方式的发送端的单个Publisher Confirm模式 - 同步方

2018-03-12 20:53:01 5573

原创 中间件系列十 RabbitMQ之消费者端的消息确认机制

概述在RabbitMQ中,即使将queue,exchange, message等都设置了持久化之后,还是不能保证100%保证数据不丢失了。为了实现消息不丢失,我们需要从Consumer端和Productor端同时进行处理。本篇文章先介绍Consumer端,在AMPQ-0-9-1中有定义从消费者到RabbitMQ的消息确认机制,通过此机制可以保证消息能够从RabbitMQ正确到达消费者端。本文介绍在R

2018-03-01 20:04:17 6627

原创 工作总结 - 重构2 重构服务平滑替换旧服务的流程

本文是之前文章重构总结的后续文章,本文介绍代码重构完成后,重构服务平滑替换旧服务的流程。 代码开发完毕,此时线网上旧的代码依然在正常运行,此时我们不能一下子将新服务替换旧的服务。我们通常要经过以下几个流程:改造旧服务,使其兼容新服务模型在重构后的服务中,我们可能会对已有的数据库、交互接口、中间件等进行变更。为了保证后续新老服务的平滑升级,在确认新服务的模型后,还需要对旧服务进行开发,...

2018-03-01 19:20:13 1315

原创 中间件系列九 RabbmtiMQ 通过wireshark抓包学习AMQP协议

概述本文先在普通场景下生产者发送一条消息,消费者接受此条消息,然后通过wireshark进行抓包,对抓的包进行详细的分析。背景本文测试的环境RabbitMQ的IP地址是10.240.89.147 生产者和消费者的IP地址都是10.240.80.99测试的代码本文的代码和之前博客的代码相似,这里略 相关的代码内容如下: 生产者代码: 消费者代码: 测试代码: 发送端先发送1

2018-02-06 20:06:08 4014 2

原创 Spring Boot系列十二 通过redis实现Tomcat集群的Session同步及从源码分析其原理

概述在tomcat等web容器中,session是保存在本机内存中。如果我们对tomcat做集群,不可避免要涉及到session同步的问题,必须保证同一个集群中的tomcat的session是共享的。本文通过Spring boot实现分布式系统Session同步,主要包括如下内容:详细介绍demo实现从源码的角度分析其实现原理多个tocmat的Session的管理。在tomcat等web容器中

2018-02-01 19:52:04 2506

原创 中间件系列八 RabbitMQ之实现RPC模式

概述本文使用RabbitMQ实现RPC的调用方式,主要包括如下内容:回调队列(Callback queue)RPC调用相关的消息参数:replyTo和correlationIdRPC调用的客户端和服务端的demo代码本文实现功能说明本文使用RabbitMQ实现RPC的调用方式,我们需要使用新的队列:回调队列(Callback queue)RPC需要涉及消息的两个重要属性:replyTo:

2018-01-29 20:14:31 4372 2

原创 中间件系列七 RabbitMQ之header exchange(头交换机)用法

概述header exchange(头交换机)和主题交换机有点相似,但是不同于主题交换机的路由是基于路由键,头交换机的路由值基于消息的header数据。 主题交换机路由键只有是字符串,而头交换机可以是整型和哈希值 header Exchange类型用的比较少,但还是知道一点好本文实现功能说明:用到的队列说明:队列A:绑定交换机参数是:format=pdf,type=report,x-match=

2018-01-28 22:15:03 9503 4

原创 中间件系列六 RabbitMQ之Topic exchange 用法

概述上篇文章中间件系列五 RabbitMQ之Direct exchange(直连交换机)和路由,我们通过direct exchange(直连交换机)可以根据路由键进行路由,但是还是不够灵活,它只能进行完全匹配。这节我们引入Topic exchange(主题交换机),支持对路由键的模糊匹配实现生产者发送一个消息,这个消息同时被传送给所有队列。但是有时我们不希望所有的消息都被所有队列接收,我们希望可以指

2018-01-27 23:11:03 6688

空空如也

空空如也

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

TA关注的人

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