自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 Apache HttpClient两种重试机制实现HttpRequestRetryHandler和ServiceUnavailableRetryStrategy

从上面可见,核心是实现一个。是一个接口用于确定在执行过程中发生异常后是否应该重试,此接口的实现必须是线程安全的,操作共享数据时必须保证同步,因为多个线程发起HTTP请求时使用同一个的实现并且存在操作共享数据的情况的话会引发线程安全问题。对于接口Apache提供了一个实现类,它默认是重试的,但是这个类对于我们研究或者理解重试处理很重要,理解了它的逻辑我们就可以仿写或根据自身的需要来实现重试处理。先来看一下super();1、不传任何参数时:默认重试三次,不开启自动重试在本文编码实现章节。

2024-03-21 11:13:04 486

原创 Spring Cloud微服务注册中心Consul入门使用(下)

Spring Cloud Consul是一个分布式系统的服务治理框架,它基于Hashicorp提供的Consul实现了服务的注册和发现、配置管理、负载均衡和健康检查等功能。

2024-02-27 15:29:59 869

原创 Spring Cloud微服务注册中心Consul入门使用(上)

Consul是Go语言编写的一个分布式高可用的服务网格解决方案,提供包括服务发现、配置和分段功能在内的全功能控制平面。它的每个功能都可以单独使用,也可以用它来构建完整的服务网格。

2024-02-27 15:27:08 1033

原创 Spring Cloud微服务网关Zuul过滤链实现的源码解读

Spring Cloud微服务网关Zuul动态路由配置Spring Cloud微服务网关Zuul动态路由配置优化和手动触发路由刷新。可以关注我的微信公众号,有更多的技术干货文章。

2024-02-26 14:42:37 986

原创 Spring Cloud微服务网关Zuul的注解@EnableZuulProxy或@EnableZuulServer做了什么事情

Spring Cloud微服务网关Zuul的注解@EnableZuulProxy或@EnableZuulServer做了什么事情

2024-02-26 14:41:05 1063

原创 Spring Cloud微服务网关Zuul灰度发布入门实战

可以关注我的微信公众号,有更多的技术干货文章。

2024-02-20 15:02:57 838

原创 Spring Cloud微服务网关Zuul动态路由配置优化和手动触发路由刷新

通过两篇文章讲述了Zuul网关的动态路由配置的原理和实战,接口的类图并不复杂,很多Zuul的组件在和里面注入到了Spring容器,可以看一下里面都有什么组件,并分析一下其功能,能够很快地理解Zuul的一些功能原理。可以关注我的微信公众号,有更多的技术干货文章。

2024-02-20 15:01:38 889

原创 Spring Cloud微服务网关Zuul动态路由配置

动态路由配置是很多网关在实际项目中需要用到的功能。但是像Zuul、Spring Cloud Gateway这些是没有提供完善的功能,使得需要开发者自己去实现。不像Apache Shenyu网关提供了很多开箱即用的功能,如果开发量较大,可以结合实际项目调研一下Apache Shenyu。本文提到了手动刷新路由配置并且还有可以优化的地方,但是写到这里本文的篇幅已经不短了,这一部分将在下一篇中把坑给填了。# 总结动态路由配置是很多网关在实际项目中需要用到的功能。

2024-02-19 11:40:04 1076

原创 Spring Cloud微服务网关Zuul过滤链和整合OAuth2+JWT入门实战

OAuth2是OAuth协议的第二个版本,是对授权认证比较成熟地面向资源的授权协议,在业界中广泛应用。出了定义了常用的用户名密码登录之后,还可以使用第三方一个用登录。例如在某些网站上可以使用QQ、微信、Github等进行登录。其主要流程如下:至于JWT则是一种使用JSON格式来规约Token和Session的协议。因为传统的认证方式中会产生一个凭证,比如Session会话是保存在服务端,然后依赖于Cookie返回给客户端,Session是有状态的。

2024-02-19 11:37:16 818

原创 Spring Cloud微服务网关Zuul基础入门使用

Zuul是从设备和网络到后端应用程序所有请求的后门,为内部服务提供可配置的对外URL到服务的映射关系,基于JVM的后端路由器。具有一下的功能:

2024-02-13 12:14:38 981

原创 Spring Cloud Neflix Hystrix应用实战详解

通常在复杂的分布式系统都存在不同服务之间的调用,OpenFeign作为Spring Cloud的远程调用工具默认是已经集成了Hystrix。在一些老的版本中,默认是打开了Hysrix,但是在新的版本中,Hystrix是关闭的,需要手动打开。

2024-02-13 12:11:25 1082

原创 Spring Cloud Neflix Hystrix入门使用

Hystrix是Netflix开源的一个针对分布式系统容错处理的组件,Netflix公司的项目里大量用到了Hystrix,Hystrix单词意为:“豪猪”,浑身有刺来保护自己。Hystrix是一个延迟和容错库,旨在隔离远程系统、服务和第三方库,阻止级联故障,在复杂的分布式系统中实现恢复能力。

2024-02-06 14:04:26 858

原创 K8S的容器执行kill命令怎么让重启容器

从 kill 掉 pod 的1号进程原地重启开始,到解析 kill 1 和 kill -9 1,再到 Linux 信号处理,可以说是十分清晰了,大家可以去跟别人吹牛了。

2024-02-06 12:39:49 1378

原创 Spring Cloud OpenFeign进阶实战

Feign默认是使用JDK原生的URLConnection发送HTTP请求,没有连接池,但是对每个地址会保持一个长连接,就是利用HTTP的persistence connection.。这样可以使用其他优秀的Client去替换。这样可以设置连接池,超时时间等对服务之间的调用调优。下面介绍使用Http Client和Okhttp替换Feign默认的Client。步骤也很简单。

2024-02-05 14:19:02 1062

原创 Spring Cloud OpenFeign基础入门

Feign是一个声明式的Web Service客户端,是一种声明式、模板化的HTTP客户端。而OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

2024-02-05 14:17:47 828

原创 Spring Cloud Neflix Ribbon入门到实战

使用Ribbon时配置全局的负载均衡策略,需要加一个配置类。改配置类需要被扫描到才能全局生效。@Bean上面配置了随机的策略,多次访问http://localhost:7776/ribbon/test。就可看到Server的选择就变成了随机了。同样了可以选择其他的Ribbon已经实现的策略,也可以自定义负载均衡策略。

2024-02-05 14:13:47 924

原创 Spring Cloud Netflix Eureka应用实战

Spring Cloud Netflix Eureka应用实战

2024-02-04 15:07:22 877

原创 Spring Cloud Netflix Eureka的参数调优

下面主要分为Client端和Server端两大类进行简述,Eureka的几个核心参数。

2024-02-04 15:05:30 1847

原创 Kubernetes中主要的资源对象

Kubernetes 遵循 RESTful 风格管理其 API 资源对象,支持通过标准的 HTTP 方法,POST、PUT、PATCH、DELETE、GET对资源进行增删改查等操作。Kubernetes 的 API 对象总的来说可以分为以下几类:工作负载、服务发现、负载均衡、配置和存储、集群、元数据。他们都是围绕 pod 而设计的,能够让使用者更好地运行和使用 pod 资源,从而实现容器化应用提供更灵活和更完善的操作和管理组件。工作负载型资源是确保 pod 资源更好的运行容器化应用。

2024-01-22 17:56:24 346

原创 Kubernetes命令式编排入门

掘金:https://juejin.cn/post/7325132140663423027。

2024-01-18 10:24:09 856

原创 Mac上常用的支持Arm架构的镜像(持续更新)

最开始的Mac用的是intel的cpu,后来使用了基于Arm架构自研的苹果芯片,在使用虚拟化时需要使用支持Arm架构的镜像。在日常使用中经常会使用Docker来构建一些环境,便发现有时候需要自己去构建镜像或者官方提供的镜像并没有支持Arm架构的,所以需要参考官方Github仓库上的Dockerfile来构建适合Arm架构的镜像。以下记录了在使用MacBook过程中用到的一些比较基础的镜像。个人环境:M2 + OrbStack。

2023-12-18 17:51:55 1294

原创 RocketMQ消息发送的设计

本文带你了解RocketMQ的消息都有什么组成和消息发送的设计

2023-12-11 09:35:02 857

原创 分布式唯一ID的技术选型

在分布式系统里面我们经常需要生成整个系统的唯一ID或者叫流水号,一般生成这个唯一ID的我们俗称发号器。例如订单号、交易号等。分布式发号器是分布式系统不可或缺的基础设施之一,在保证系统的正确运行和高可用上发挥着不可取代的作用,在不同的公司有不同的实现方式。

2023-11-30 09:55:01 825

原创 一步步带你了解Tomcat中的连接器是如何设计的

Tomcat 的整体架构包含了两个核心组件连接器和容器。连接器负责对外交流,容器负责内部处理。连接器用 ProtocolHandler 接口来封装通信协议和 I/O 模型的差异,ProtocolHandler 内部又分为 EndPoint 和 Processor 模块,EndPoint 负责底层 Socket 通信,Proccesor 负责应用层协议解析。连接器通过适配器 Adapter 调用容器。

2023-11-30 09:42:46 890

原创 Tomcat的NioEndpoint组件是怎么实现I/O多路复用

网络I/O模型就是为了解决内存和外部设备速度差异的问题。阻塞或非阻塞是指应用程序在发起 I/O 操作时,是立即返回还是等待。而同步和异步,是指应用程序在与内核通信时,数据从内核空间到应用空间的拷贝,是由内核主动发起还是由应用程序来触发。Tomcat 的 EndPoint 组件的主要工作就是处理 I/O,而 NioEndpoint 利用 Java NIO API 实现了多路复用 I/O 模型。其中关键的一点是,读写数据的线程自己不会阻塞在 I/O 等待上,而是把这个工作交给 Selector。

2023-11-29 16:15:50 1012

原创 二进制方式安装高可用Kubernetes

Kube-APIServer:集群的控制中枢,各个模块之间信息交互都需要经过Kube-APIServer,同时它也是集群管理、资源配置、整个集群安全机制的入口。Controller-Manager:集群的状态管理器,保证Pod或其他资源达到期望值,也是需要和APIServer进行通信,在需要的时候创建、更新或删除它所管理的资源。Scheduler:集群的调度中心,它会根据指定的一系列条件,选择一个或一批最佳的节点,然后部署我们的Pod。

2023-07-25 15:11:47 151

原创 RocketMQ的NameServer的架构设计及其启动流程源码分析

Broker启动的时候会向所有的NameServer注册,生产者在发送消息时会先从NameServer中获取Broker消息服务器的地址列表,根据负载均衡算法选取一台Broker消息服务器发送消息。但是路由的变化不会马上通知消息生产者,这是为了降低NameServe的复杂性,所以在RocketMQ中需要消息的发送端提供容错机制来保证消息发送的高可用性,这在后续关于RocketMQ消息发送的章节会介绍。关于注册JVM关闭钩子,这是很常见的用法,确保在关闭JVM的时候,先将线程池关闭,释放资源。

2023-07-25 15:07:53 112

原创 RocketMQ的主要组件及其功能

RocketMQ是啥就不多说了,一个基于主题的订阅发布机制的消息中间。下面就是我们部署时的架构,NameServer和Broker需要部署在服务器上,对于消费者和生产者则是我们在自己的程序里启动,去push/pull消息。

2023-07-25 14:58:13 109

原创 Docker容器内部署的SpringBoot应用发不出邮件的解决

Dockerfile通过简单的Dockerfile构建了一个镜像(consumer-service-rabbitmq/v1.0)FROM openjdk:8-alpineMAINTAINER maishurenEXPOSE 8001ADD target/consumer-rabbit-1.0-SNAPSHOT.jar /ENTRYPOINT ["java","-jar","/consumer-rabbit-1.0-SNAPSHOT.jar"]运行容器docker run -d --name

2023-07-25 14:49:58 257

原创 实现容器化的基础:Namespace和Cgroups

Linux的两大技术Namespace和Cgroups是用于试下容器的特性,Namespace帮助容器实现各类计算资源的隔离,Cgroups主要对容器的能访问宿主机资源的多少。所以可以说,容器就是NamespaceCgroups。

2023-07-25 14:46:54 40

空空如也

空空如也

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

TA关注的人

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