spring java 灰度发布_SpringCloud灰度发布实践(附源码)

本文介绍了SpringCloud灰度发布的实现过程,通过自定义Ribbon负载均衡规则,结合Eureka元数据,实现根据用户请求头版本信息选择灰度服务。文章详细阐述了调用链分析、预备知识、实现流程和设计思路,并提供了配置文件示例和测试案例。
摘要由CSDN通过智能技术生成

前言

​ 在平时的业务开发过程中,后端服务与服务之间的调用往往通过fegin或者resttemplate两种方式。但是我们在调用服务的时候往往只需要写服务名就可以做到路由到具体的服务,这其中的原理相比大家都知道是SpringCloud的ribbon组件帮我们做了负载均衡的功能。

灰度的核心就是路由,如果我们能够重写ribbon默认的负载均衡算法是不是就意味着我们能够控制服务的转发呢?是的!

调用链分析

外部调用

请求==>zuul==>服务

zuul在转发请求的时候,也会根据Ribbon从服务实例列表中选择一个对应的服务,然后选择转发.

内部调用

请求==>zuul==>服务Resttemplate调用==>服务

请求==>zuul==>服务Fegin调用==>服务

无论是通过Resttemplate还是Fegin的方式进行服务间的调用,他们都会从Ribbon选择一个服务实例返回.

上面几种调用方式应该涵盖了我们平时调用中的场景,无论是通过哪种方式调用(排除直接ip:port调用),最后都会通过Ribbon,然后返回服务实例.

预备知识

eureka元数据

Eureka的元数据有两种,分别为标准元数据和自定义元数据。

标准元数据:主机名、IP地址、端口号、状态页和健康检查等信息,这些信息都会被发布在服务注册表中,用于服务之间的调用。

自定义元数据:自定义元数据可以使用eureka.instance.metadata-map配置,这些元数据可以在远程客户端中访问,但是一般不会改变客户端的行为,除非客户端知道该元数据的含义

eureka RestFul接口

请求名称

请求方式

HTTP地址

请求描述

注册新服务

POST

/eureka/apps/{appID}

传递JSON或者XML格式参数内容,HTTP code为204时表示成功

取消注册服务

DELETE

/eureka/apps/{appID}/{instanceID}

HTTP code为200时表示成功

发送服务心跳

PUT

/eureka/apps/{appID}/{instanceID}

HTTP code为200时表示成功

查询所有服务

GET

/eureka/apps

HTTP code为200时表示成功,返回XML/JSON数据内容

查询指定appID的服务列表

GET

/eureka/apps/{appID}

HTTP code为200时表示成功,返回XML/JSON数据内容

查询指定appID&instanceID

GET

/eureka/apps/{appID}/{instanceID}

获取指定appID以及InstanceId的服务信息,HTTP code为200时表示成功,返回XML/JSON数据内容

查询指定instanceID服务列表

GET

/eureka/apps/instances/{instanceID}

获取指定instanceID的服务列表,HTTP code为200时表示成功,返回XML/JSON数据内容

变更服务状态

PUT

/eureka/apps/{appID}/{instanceID}/status?value=DOWN

服务上线、服务下线等状态变动,HTTP code为200时表示成功

变更元数据

PUT

/eureka/app

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值