Zuul + Ribbon 脱离Eureka完成负载均衡+重试机制
Zuul + Ribbon 脱离Eureka完成负载均衡+重试机制
因为没有注册中心,所以需要网关对下游服务做负载均衡,然后果断集成Ribbon。中间遇到很多坑,最后终于解决了。
其实Ribbon里面默认开启了重试机制的。
Zuul配合Ribbon的代码展示:
如果希望最后的映射路由有前缀/test ,那么需要加上strip-prefix=false,因为默认是true。
1 2 3 4 | zuul.routes.test.path=/test/** zuul.routes.test.strip-prefix=false zuul.routes.test.serviceId=test test.ribbon.listOfServers=http://192.168.10.161:9001,http://192.168.10.162:9001 |
关于重试的其他配置:
1 2 3 4 | ribbon.MaxAutoRetries=1 # 对当前实例的重试次数 ribbon.MaxAutoRetriesNextServer=10 # 切换实例的重试次数 ribbon.ConnecTimeOut=3000 # 请求的连接时间 ribbon.OkToRetryOnAllOperations=true # 对所有操作都进行重试 |
备注: 上述是对所有进行配置,如果需要对某个服务,则可以在前面加上服务名称。例如上述的test服务,则是test.ribbon.MaxAutoRetries=xxx
RestTemplate配合Ribbon
第一步:
在RestTemplate的Bean上加注解@LoadBalance 就结束了。
@Configuration public class RestConfiguration { @Autowired RestTemplateBuilder builder; @LoadBalanced @Bean public RestTemplate restTemplate() { return builder.build(); } }
利用RestTemplate发送请求,达到负载均衡和重试效果。
public HttpResult verifyToken(String token, String ip) { JSONObject result = restTemplate.getForObject("http://test/" + "token/verify/{token}/{ip}", JSONObject.class, token, ip); HttpResult httpResult = JSON.parseObject(result.toJSONString(), HttpResult.class); return httpResult; }
url中间的host+port被替换成了额服务名称,(可以是注册中心注册的服务名,也可以是自定义的,比如咱们这个脱离Eureka的就是自定义的,开头有配置。),它会根据test这个服务名,找配置中的listServers根据负载均衡策略和配置好的重试配置,来进行负载均衡和失败重试。
关于负载均衡策略
1. 首先配置某个服务实例的负载均衡策略(注意,这个类不能被Componscan扫描到,否则会被所有的配置共享,比如我就是加了个自定义注解@IngoreComponentScan,然后配置了不扫描这个注解所在的类)
@Configuration @IgnoreComponentScan public class TestRibbonConfiguration { @Bean public IRule ribbonRule() { return new RoundRobinRule(); } }
2.然后配置一个Ribbon客户端,服务名写你想配置的服务名,配置类自然就是刚刚配置的配置类。
@Configuration @RibbonClient(name = "test", configuration = TestRibbonConfiguration.class) public class RibbonConfiguration { }
这样Ribbon的负载均衡策略就OK了(仅仅是针对test服务的,如果想配置所有的默认配置,那么单独配置就好了, 看看官网或者别的博客...我就不记笔记了。。。)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~