自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wds的博客

笔记的整理,知识的记录,若有错误,欢迎指正

原创 OpenFeign学习(七):Spring Cloud OpenFeign的使用

说明 通过之前的几篇博文,我简单介绍了OpenFeign的使用及其工作原理。OpenFeign的易用性和扩展性让人印象深刻。接下来,我将继续学习Spring是如何对OpenFeign进行集成支持,使其在Spring Cloud 微服务体系中发挥着重要的作用。在本篇博文中,我将结合官方文档介绍Spr...

2020-05-31 23:45:53 16 0

原创 OpenFeign学习(六):OpenFign进行表单提交参数或传输文件

说明 在之前的博文《OkHttp的高级封装Feign学习(一): Feign注解的使用》中,我简单介绍了OpenFeign的使用方式。其中在请求传递参数时,可以使用@Param和@QueryMap注解。本篇博文我将介绍学习如何使用OpenFeign进行表单参数提交或者传输文件。 正文 我们先看下之...

2020-05-16 18:34:38 62 0

原创 OpenFeign学习(五):OpenFeign请求结果处理及重试控制

#说明 在上篇博文《OpenFeign学习(四):OpenFeign的方法同步请求执行》一文中,我对OpenFeign的同步请求的执行的原理进行了介绍和学习。本篇博文我将继续通过源码对请求之后结果的封装解码及失败重试进行介绍和学习。 正文 在上篇博文中提到,OpenFeign通过Synchrono...

2020-04-25 15:32:26 125 0

原创 OpenFeign学习(四):OpenFeign的方法同步请求执行

说明 在上篇博文《OpenFeign学习(三):OpenFeign配置生成代理对象》中,我对OpenFeign的整体工作流程做了简单的介绍,并且通过源码,介绍学习了OpenFeign配置创建代理对象的原理。在本篇博文中,我将继续通过源码对OpenFeign的方法请求工作流程的原理进行介绍学习。 正...

2020-04-19 16:32:58 105 0

原创 OpenFeign学习(三):OpenFeign配置生成代理对象

说明 在之前的两篇博文《OkHttp的高级封装Feign学习(一): Feign注解的使用》和《OpenFeign学习(二):高级用法自定义配置组件HttpClient / SLF4J / RequestInterceptor等》中,我简单介绍了OpenFeign的使用方法。在本篇博文中,我将通过...

2020-04-06 16:39:34 124 0

原创 RabbitMQ学习(二十一):使用消息有效期TTL和死信路由DLX实现消息延迟重试消费的限制

说明 在之前的一篇博文《springboot学习(十三):RabbitMQ的使用 实现消息延迟消费》中,我简单介绍了使用Rabbitmq的消息有效期和死信路由的特性实现消息的延迟消费。在后续的使用中,希望通过这两种特性实现针对消息自定义过期时间实现延迟消费,但是发现Rabbitmq并不支持。本篇博...

2020-03-29 15:08:56 60 0

原创 OpenFeign学习(二):高级用法自定义配置组件HttpClient / SLF4J / RequestInterceptor等

说明 在项目开发中,避免不了通过HTTP请求进行对第三方服务的调用,在上篇博文OkHttp的高级封装Feign学习(一): Feign注解的使用中,我对Feign注解基本使用进行了学习总结。本篇博文我将继续对feign的其他特性及高级用法进行学习总结。 正文 feign具有很强的扩展性,允许用户根...

2020-02-26 22:56:18 138 0

原创 OkHttp的高级封装Feign学习(一): Feign注解的使用

说明 在项目开发中,避免不了通过HTTP请求进行对第三方服务的调用,在之前的两遍博文《OkHttp使用踩坑记录总结(一):OkHttpClient单例和长连接Connection Keep-Alive 》和《OkHttp使用踩坑记录总结(二):OkHttp同步异步请求和连接池线程池》中,我对OkH...

2020-02-23 22:54:57 294 0

原创 OkHttp使用踩坑记录总结(二):OkHttp同步异步请求和连接池线程池

说明 在项目中对第三方服务的调用,使用了OkHttp进行http请求,这当中踩了许多坑。本篇博文将对OkHttp使用过程遇到的问题进行总结记录。 正文 同步请求SyncRequest 异步请求AsyncRequest 通过简单示例了解OkHttp如何进行http请求: SyncRequest: ...

2020-01-20 17:57:36 1276 0

原创 OkHttp使用踩坑记录总结(一):OkHttpClient单例和长连接Connection Keep-Alive

说明 在项目中对第三方服务的调用,使用了OkHttp进行http请求,这当中踩了许多坑。本篇博文将对OkHttp使用过程遇到的问题进行总结记录。 正文 OkHttpClient 单例 在刚开始使用时,没有将OkHttpClient单例化,造成的后果就是服务器OOM异常,can’t create n...

2020-01-20 17:02:52 2631 3

原创 EasyExcel使用总结(一):写Excel

说明 最近有很多数据要处理,需要导出Excel表格。在使用POI时发现非常耗内存,在GitHub上发现阿里开源的Easy Excel项目,基于java的读写Excel,十分省内存。本篇博文主要是总结记录了使用EasyExcel进行写Excel的方法。 正文 引入依赖 在pom.xml文件引入eas...

2020-01-11 21:46:02 1407 2

原创 写在2019年末

19年的最后两天,北京真的好冷。 又到了年底总结的时候。脑袋里把19年的事情,像电影一样回放了一遍,发现并没有像18年那样,有很多记忆深刻的东西。从18年毕业转正到现在,算上实习,工作了已经有20个月又10天。工作后,最大的感触就是时间太快了,人生太艰难了。 先把19年的流水账记下吧。首先,工作上...

2019-12-31 21:31:39 506 2

原创 Array.asList()踩坑记录之java.lang.UnsupportedOperationException

说明 本篇博文主要记录了在使用Arrays.asList()方法时遇到的问题,并通过源码了解其背后的原理。 正文 问题描述:在将Arrays.asList()方法生成的list集合,作为参数传递到方法中,但在运行中出现了一下bug。 java.lang.UnsupportedOperationEx...

2019-12-27 23:39:09 451 0

原创 Apollo学习(六):自定义Meta Server地址定位逻辑

说明 在之前的一篇博文《Apollo学习(二): Java客户端使用》中,我简单地总结了Apollo配置中心的java客户端使用方法,其中有几个重要步骤,如确定项目的AppId,设置Meta Server的地址,设置本地缓存路径的地址等。 在之前的博文中,对Meta Server地址的设定是通过项...

2019-11-30 21:02:33 697 0

原创 Apollo学习(五):docker容器化分布式部署

说明 在之前的文章《Apollo学习(三): 分布式部署》中,我简单介绍了在Windows环境下,实现Apollo配置中心的分布式部署。本篇博文我将对如何实现Apollo的docker容器化分布式部署的步骤进行记录总结。 正文 目的 根据源码定制安装包,修改默认端口,日志输出地址、等级,jvm等...

2019-11-24 21:03:54 637 0

翻译 RabbitMQ学习(二十):消费者优先级和优先级队列

说明 在之前的博文中我对RabbitMQ的一些扩展特性进行了翻译学习,本篇博文我将继续翻译学习RabbitMQ的消费者优先级(Consumer Priorities)和优先级队列(Priority Queues)相关内容。 正文 消费者优先级(Consumer Priorities) 消费者的优先...

2019-10-27 21:40:09 557 0

原创 Kafka学习(一):消费者实现对分区的并发消费

说明 在上篇博文《springboot学习(十七):了解spring - kafka配置工作原理》中,我们简单了解了spring-kafka的配置工作原理。通过源码可以看到spring在实现并发消费时,采用的是线程封闭的策略,也就是一个groupid中,根据配置的concurrency来创建多个消...

2019-10-20 15:00:11 1244 0

原创 springboot学习(十七):了解spring - kafka配置工作原理

说明 在上篇博文《springboot学习(十六):了解springboot自动装配kafka原理》中,我对springboot自动装配kafka的原理进行了简单介绍,在文末说到springboot通过初始化配置类org.springframework.boot.autoconfigure.kaf...

2019-10-03 14:39:18 1191 0

原创 springboot学习(十六):了解springboot自动装配kafka原理

说明 在上篇《springboot学习(十五):Kafka的使用》博文中,通过简单的示例介绍了如何在springboot项目中使用kafka。代码十分简单,通过配置文件和注解就可以操作kakfa集群。本篇博文将通过springboot的源码来了解springboot如何自动装配kafka。 创建S...

2019-09-23 17:27:33 2299 0

原创 springboot学习(十五):Kafka的使用

说明 本篇博文主要介绍在springboot中使用kafka,以及如何配置kafka。 正文 简单配置 spring kafka提供了spring对kafka的支持,通过简单的配置我们可以快速使用KafkaTemplate进行消息的发送,使用@KafkaListener注解来进行消息消费。以下内容...

2019-09-07 19:20:51 546 0

翻译 RabbitMQ学习(十九):消费者的未确定消息数限制(Consumer Prefetch)

说明 在之前的博文《RabbitMQ学习(十七):消息确认之消费者确认模式 II》中,我对有关消费者确认模式进行了翻译学习,其中提到了对通道Prefetch Count设置及该值对吞吐量的影响。本篇博文将继续翻译学习如何设置通道的Prefetch Count,及方法参数不同值的不同含义。 正文 概...

2019-08-24 16:54:41 740 0

翻译 RabbitMQ学习(十八):消息确认之发送者确认模式

说明 通过之前的两篇博文《RabbitMQ学习(十六):消息确认之消费者确认模式 I》和《RabbitMQ学习(十七):消息确认之消费者确认模式 II》,对消费者确认模式进行了翻译学习,本篇博文将继续翻译学习文档的最后一部分,有关发送者确认模式的内容。内容包含了服务器如何对生产者发送的消息进行确认...

2019-08-11 17:56:23 500 0

翻译 RabbitMQ学习(十七):消息确认之消费者确认模式 II

说明 在上篇博文《RabbitMQ学习(十六):消息确认之消费者确认模式 I》中对消息确认的必要性和确认相关的传输标签,消费者确认方法等内容进行了翻译学习,本篇博文我将继续翻译学习消息者确认模式的剩余内容,主要包含了积极消极确认的方式,批量确认消息,通道Prefetch值的设置以及它和确认模式对吞...

2019-08-04 15:58:36 619 0

翻译 RabbitMQ学习(十六):消息确认之消费者确认模式 I

说明 通过上篇博文《RabbitMQ学习(十五):消极确认》我们初步了解了消费者对消息确认的相关内容,通过消极确认,消费者可以拒绝一个消息。本篇博文,我将继续翻译学习官方文档中关于消息确认的相关内容。由于原文档太长,本篇博文只翻译消费者确认的部分内容。通过本篇博文,我们将了解到消息确认机制的意义,...

2019-07-27 17:37:52 553 0

原创 线上异常处理(一): 线程堆积导致OOM, RabbitMQ的Connection中自动创建线程池

说明 本篇博文主要记录之前线上项目由于线程数过多导致内存泄露后,事故原因的分析排查过程。项目背景是其中使用了公司封装的管理类来操作RabbitMQ。 正文 初步猜想 项目出现oom后发现是线程数过多导致内存泄露,快速进行了重启。重启后,仍发现线程数在不断地增长。 查看代码发现,在从mq获取到消息后...

2019-07-21 16:18:16 636 0

翻译 RabbitMQ学习(十五):消极确认(Negative Acknowledgements)

说明 在之前的一篇博文《RabbitMQ学习(十三):死信交换机 (Dead Letter Exchanges)》中我们了解到,消息变为死信有三个原因,其中就有因为消费者的消极确认(negative acknowledgements),并且将requeue标记设置为false导致消息变为死信。本篇...

2019-07-07 16:49:33 526 0

翻译 RabbitMQ学习(十四):队列长度限制(Queue Length Limit)

说明 在上篇博文《RabbitMQ学习(十三):死信交换机》中,我对官方文档有关死信交换机的内容进行了翻译和学习,文中提到消息成为死信的原因有三种,队列长度的限制就是其中之一。本篇博文我将继续翻译学习官方文档中有关队列长度限制的相关的内容,通过本文记录学习总结有关队列长度限制如何设置,超出限制队列...

2019-06-25 00:01:46 1917 0

翻译 RabbitMQ学习(十三):死信交换机 (Dead Letter Exchanges)

说明 在上篇博文《RabbitMQ学习(十二): 队列和消息的有效期》中,我对官方文档有关队列和消息的TTL进行了翻译学习,消息的TTL是实现延迟重试队列的关键因素,但仅仅有消息的有效期还无法实现过期消息的消费,本篇博文将继续翻译学习官方文档中有关死信交换机(DLX)的内容, 通过此交换机,可以实...

2019-06-22 21:52:23 2609 0

翻译 RabbitMQ学习(十二): 队列和消息的有效期 (Queue and Message TTL)

说明 在之前的一篇博文《springboot学习(十三):RabbitMQ的使用 实现消息延迟消费 》中,我使用RabbitMQ来达到失败消息的延迟重试的目的。其中就使用了消息的TTL和 死信交换机( Dead Letter Exchanges)。本篇博文我将继续翻译学习官方文档中对消息和队列的T...

2019-06-09 12:06:27 1062 0

原创 Redis学习(三):redis集群之cluster模式下的跨节点的批量操作 II

说明 在上篇博文《Redis学习(二):redis集群之cluster模式下的跨节点的批量操作 I》中,对Jedis客户端的JedisCluster类源码进行了学习,了解了Jedis对cluster操作原理,其中有两个关键类JedisClusterConnectionHandler和JedisCl...

2019-05-25 20:55:24 1631 0

原创 Redis学习(二):redis集群之cluster模式下的跨节点的批量操作 I

说明 通过之前的博文《Redis学习(一):redis集群之哨兵模式下的负载均衡》,对redis哨兵模式下的读负载进行学习研究。在本篇博文中,将对redis cluster模式下的跨节点集合操作进行研究学习。通过本篇博文,我们将了解redis cluster模式的基本原理及在Jedis客户端中如何...

2019-05-19 14:04:09 3251 0

翻译 RabbitMQ学习(十一):AMQP 0-9-1协议之Connections and Channels

说明 通过前面几篇博文,翻译学习了有关AMQP协议的相关内容,对AMQP的几个实体概念有了初步认识,本篇博文将继续翻译RabbitMQ有关AMQP协议介绍的最后一部分内容,这部分内容介绍了AMQP服务器和客户端连接的基本知识。通过本篇博文,将会了解到AMQP的操作连接是基于共享TCP连接上创建的轻...

2019-05-02 14:45:43 561 0

翻译 RabbitMQ学习(十): AMQP 0-9-1协议之Consumer and Message

说明 通过上篇博文翻译了AMQP协议中有关队列Queues的相关内容,本篇博文将继续翻译官方关于AMQP协议介绍的有关Consumer和Message部分的内容。通过翻译,学习记录在RabbitMQ中AMQP协议的Consumer和Message的作用。 正文 Consumers 队列中存储的消息...

2019-04-21 15:51:55 543 0

翻译 RabbitMQ学习(九):AMQP 0-9-1 协议之Queues

说明 通过上篇博文翻译了AMQP协议中有关交换机Exchange的相关介绍,本篇博文将继续翻译AMQP协议中有关队列的内容,通过翻译学习记录AMQP模型中的另一实体Queue。 正文 Queues AMQP 0-9-1模型中的队列与其他消息任务队列系统中的队列十分相似:它们都存储要被应用程序处理的...

2019-04-14 11:21:32 532 0

原创 Redis学习(一):redis集群之哨兵模式下的负载均衡

说明 在学习研究Redis集群部署的过程中,发现以哨兵模式部署集群时,使用Jedis作为客户端只可以连接到主机,从机只作为备份保证高可用。这样读写都在主机,在读比较高的情况下对主机带来很大压力。通过阅读Jedis的JedisSentinelPool源码,在该类的基础上实现JedisSentinel...

2019-04-06 18:30:22 1478 0

原创 springboot项目构建docker镜像异常: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded

异常信息 在centos上构建springboot项目的docker镜像时出现以下异常: Failed to execute goal com.spotify:docker-maven-plugin:1.0.0:build (default-cli) on project dockerDemo: ...

2019-04-03 19:55:06 5060 2

翻译 RabbitMQ学习(八):AMQP 0-9-1 协议之Exchange

说明 通过上篇博文翻译了RabbitMQ官方文档关于AMQP协议介绍的一小部分,本篇博文将继续翻译有关AMQP协议的相关内容,主要记录AMQP协议中Exchange实体相关知识,学习在RabbitMQ中Exchange的类型及其作用。 正文 Exchanges and Exchange Type ...

2019-03-30 16:25:03 560 0

翻译 RabbitMQ学习(七):AMQP 0-9-1 协议之简单概述

说明 通过之前翻译的六篇官方教程,我们已经学会了如何使用RabbitMQ。我们都知道RabbitMQ是一个支持多种协议的消息队列,本篇博文将翻译官方对于AMQP 0-9-1协议的介绍:AMQP 0-9-1 Model Explained。 通过翻译记录该协议的内容,加深对RabbitMQ消息队列的...

2019-03-11 22:07:34 523 0

翻译 RabbitMQ学习(六):Remote procedure call

说明 通过前面五篇教程,我们已经学习了RabbitMQ的基本使用方法,了解了RabbitMQ的消息派发方式,消息的持久化,消息确认机制… 通过简单的程序,对RabbitMQ的消息传递模型有了初步了解,学习了Fanout,Direct,Topic三种类型交换机的使用,明白了消息路由的实现机制。本篇教...

2019-03-04 23:18:06 538 0

翻译 RabbitMQ学习(五):Topics

说明 在之前的教程中,我们已经对Exchange有了更深的了解,学习了Fanout和Direct类型的交换机,学习了交换机根据规则对消息灵活路由的强大功能特性。通过简单的程序练习,对RabbitMQ的消息传递模型有了深入的认识。本篇博文将继续翻译官方第五篇教程Topics,通过本篇教程我们将继续学...

2019-03-02 20:45:00 497 0

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