Ribbon 负载均衡策略与自定义规则

负载均衡是微服务远程调用里绕不开的问题。注册中心告诉你"有哪些服务实例",但真正每次调用哪个实例,需要负载均衡组件来决定。

一句话概括:Ribbon 是客户端负载均衡组件,Feign 发起远程调用时,底层可以通过 Ribbon 从注册中心拉到的实例列表中选择一个服务实例。


#mermaid-svg-EeExnBgBycbFvZM4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-EeExnBgBycbFvZM4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-EeExnBgBycbFvZM4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-EeExnBgBycbFvZM4 .error-icon{fill:#552222;}#mermaid-svg-EeExnBgBycbFvZM4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-EeExnBgBycbFvZM4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-EeExnBgBycbFvZM4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-EeExnBgBycbFvZM4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-EeExnBgBycbFvZM4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-EeExnBgBycbFvZM4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-EeExnBgBycbFvZM4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-EeExnBgBycbFvZM4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-EeExnBgBycbFvZM4 .marker.cross{stroke:#333333;}#mermaid-svg-EeExnBgBycbFvZM4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-EeExnBgBycbFvZM4 p{margin:0;}#mermaid-svg-EeExnBgBycbFvZM4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-EeExnBgBycbFvZM4 .cluster-label text{fill:#333;}#mermaid-svg-EeExnBgBycbFvZM4 .cluster-label span{color:#333;}#mermaid-svg-EeExnBgBycbFvZM4 .cluster-label span p{background-color:transparent;}#mermaid-svg-EeExnBgBycbFvZM4 .label text,#mermaid-svg-EeExnBgBycbFvZM4 span{fill:#333;color:#333;}#mermaid-svg-EeExnBgBycbFvZM4 .node rect,#mermaid-svg-EeExnBgBycbFvZM4 .node circle,#mermaid-svg-EeExnBgBycbFvZM4 .node ellipse,#mermaid-svg-EeExnBgBycbFvZM4 .node polygon,#mermaid-svg-EeExnBgBycbFvZM4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-EeExnBgBycbFvZM4 .rough-node .label text,#mermaid-svg-EeExnBgBycbFvZM4 .node .label text,#mermaid-svg-EeExnBgBycbFvZM4 .image-shape .label,#mermaid-svg-EeExnBgBycbFvZM4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-EeExnBgBycbFvZM4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-EeExnBgBycbFvZM4 .rough-node .label,#mermaid-svg-EeExnBgBycbFvZM4 .node .label,#mermaid-svg-EeExnBgBycbFvZM4 .image-shape .label,#mermaid-svg-EeExnBgBycbFvZM4 .icon-shape .label{text-align:center;}#mermaid-svg-EeExnBgBycbFvZM4 .node.clickable{cursor:pointer;}#mermaid-svg-EeExnBgBycbFvZM4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-EeExnBgBycbFvZM4 .arrowheadPath{fill:#333333;}#mermaid-svg-EeExnBgBycbFvZM4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-EeExnBgBycbFvZM4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-EeExnBgBycbFvZM4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EeExnBgBycbFvZM4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-EeExnBgBycbFvZM4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EeExnBgBycbFvZM4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-EeExnBgBycbFvZM4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-EeExnBgBycbFvZM4 .cluster text{fill:#333;}#mermaid-svg-EeExnBgBycbFvZM4 .cluster span{color:#333;}#mermaid-svg-EeExnBgBycbFvZM4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-EeExnBgBycbFvZM4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-EeExnBgBycbFvZM4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-EeExnBgBycbFvZM4 .icon-shape,#mermaid-svg-EeExnBgBycbFvZM4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EeExnBgBycbFvZM4 .icon-shape p,#mermaid-svg-EeExnBgBycbFvZM4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-EeExnBgBycbFvZM4 .icon-shape .label rect,#mermaid-svg-EeExnBgBycbFvZM4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EeExnBgBycbFvZM4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-EeExnBgBycbFvZM4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-EeExnBgBycbFvZM4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} order-service

发起远程调用
Feign 生成代理请求
Ribbon 获取服务名
向注册中心拉取

userservice 实例列表
本地缓存实例列表
根据负载均衡规则

选择一个实例
拼接真实 IP 和端口
发起 HTTP 调用

Ribbon 是服务端负载均衡还是客户端负载均衡

Ribbon 是客户端负载均衡。

这句话的意思是:不是由一个独立的负载均衡服务器统一转发请求,而是调用方自己拿到服务列表,然后在本地选择一个实例。

类型 选择实例的位置 例子
服务端负载均衡 请求先到负载均衡器,由负载均衡器转发 Nginx、SLB
客户端负载均衡 调用方本地拿实例列表并选择实例 Ribbon

微服务内部调用通常更适合客户端负载均衡,因为消费者本身就能通过注册中心拿到服务列表。
#mermaid-svg-NXHa1fuD8YnKJbLb{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-NXHa1fuD8YnKJbLb .error-icon{fill:#552222;}#mermaid-svg-NXHa1fuD8YnKJbLb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NXHa1fuD8YnKJbLb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NXHa1fuD8YnKJbLb .marker.cross{stroke:#333333;}#mermaid-svg-NXHa1fuD8YnKJbLb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NXHa1fuD8YnKJbLb p{margin:0;}#mermaid-svg-NXHa1fuD8YnKJbLb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-NXHa1fuD8YnKJbLb .cluster-label text{fill:#333;}#mermaid-svg-NXHa1fuD8YnKJbLb .cluster-label span{color:#333;}#mermaid-svg-NXHa1fuD8YnKJbLb .cluster-label span p{background-color:transparent;}#mermaid-svg-NXHa1fuD8YnKJbLb .label text,#mermaid-svg-NXHa1fuD8YnKJbLb span{fill:#333;color:#333;}#mermaid-svg-NXHa1fuD8YnKJbLb .node rect,#mermaid-svg-NXHa1fuD8YnKJbLb .node circle,#mermaid-svg-NXHa1fuD8YnKJbLb .node ellipse,#mermaid-svg-NXHa1fuD8YnKJbLb .node polygon,#mermaid-svg-NXHa1fuD8YnKJbLb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NXHa1fuD8YnKJbLb .rough-node .label text,#mermaid-svg-NXHa1fuD8YnKJbLb .node .label text,#mermaid-svg-NXHa1fuD8YnKJbLb .image-shape .label,#mermaid-svg-NXHa1fuD8YnKJbLb .icon-shape .label{text-anchor:middle;}#mermaid-svg-NXHa1fuD8YnKJbLb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-NXHa1fuD8YnKJbLb .rough-node .label,#mermaid-svg-NXHa1fuD8YnKJbLb .node .label,#mermaid-svg-NXHa1fuD8YnKJbLb .image-shape .label,#mermaid-svg-NXHa1fuD8YnKJbLb .icon-shape .label{text-align:center;}#mermaid-svg-NXHa1fuD8YnKJbLb .node.clickable{cursor:pointer;}#mermaid-svg-NXHa1fuD8YnKJbLb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-NXHa1fuD8YnKJbLb .arrowheadPath{fill:#333333;}#mermaid-svg-NXHa1fuD8YnKJbLb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NXHa1fuD8YnKJbLb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NXHa1fuD8YnKJbLb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NXHa1fuD8YnKJbLb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-NXHa1fuD8YnKJbLb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NXHa1fuD8YnKJbLb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-NXHa1fuD8YnKJbLb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NXHa1fuD8YnKJbLb .cluster text{fill:#333;}#mermaid-svg-NXHa1fuD8YnKJbLb .cluster span{color:#333;}#mermaid-svg-NXHa1fuD8YnKJbLb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NXHa1fuD8YnKJbLb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-NXHa1fuD8YnKJbLb rect.text{fill:none;stroke-width:0;}#mermaid-svg-NXHa1fuD8YnKJbLb .icon-shape,#mermaid-svg-NXHa1fuD8YnKJbLb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NXHa1fuD8YnKJbLb .icon-shape p,#mermaid-svg-NXHa1fuD8YnKJbLb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-NXHa1fuD8YnKJbLb .icon-shape .label rect,#mermaid-svg-NXHa1fuD8YnKJbLb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NXHa1fuD8YnKJbLb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-NXHa1fuD8YnKJbLb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-NXHa1fuD8YnKJbLb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 服务端负载均衡
请求先到 Nginx / SLB
负载均衡器选择后端实例
转发请求
客户端负载均衡
消费者从注册中心拿实例列表
消费者本地选择实例
直接调用目标服务

两者的区别不在"有没有负载均衡",而在谁负责选择实例。服务端负载均衡由中间层选择;客户端负载均衡由调用方自己选择。

Ribbon 常见负载均衡策略

Ribbon 提供了不少规则,面试里不用每个都展开,但常见的要能说出差异。

策略 含义
RoundRobinRule 轮询选择服务实例
RandomRule 随机选择一个可用实例
WeightedResponseTimeRule 根据响应时间计算权重,响应越慢权重越低
BestAvailableRule 忽略短路实例,选择并发数较低的实例
RetryRule 在指定时间内重试选择可用实例
AvailabilityFilteringRule 过滤不健康实例,再选择连接数较小的实例
ZoneAvoidanceRule 默认策略,综合区域可用性和实例可用性选择

项目里最常提的是轮询、随机、响应时间权重、区域敏感策略。

自定义负载均衡怎么做

常见有两种方式:全局配置和局部配置。
#mermaid-svg-0750uDFS9mMYexD7{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-0750uDFS9mMYexD7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-0750uDFS9mMYexD7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-0750uDFS9mMYexD7 .error-icon{fill:#552222;}#mermaid-svg-0750uDFS9mMYexD7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-0750uDFS9mMYexD7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-0750uDFS9mMYexD7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-0750uDFS9mMYexD7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-0750uDFS9mMYexD7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-0750uDFS9mMYexD7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-0750uDFS9mMYexD7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-0750uDFS9mMYexD7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-0750uDFS9mMYexD7 .marker.cross{stroke:#333333;}#mermaid-svg-0750uDFS9mMYexD7 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-0750uDFS9mMYexD7 p{margin:0;}#mermaid-svg-0750uDFS9mMYexD7 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-0750uDFS9mMYexD7 .cluster-label text{fill:#333;}#mermaid-svg-0750uDFS9mMYexD7 .cluster-label span{color:#333;}#mermaid-svg-0750uDFS9mMYexD7 .cluster-label span p{background-color:transparent;}#mermaid-svg-0750uDFS9mMYexD7 .label text,#mermaid-svg-0750uDFS9mMYexD7 span{fill:#333;color:#333;}#mermaid-svg-0750uDFS9mMYexD7 .node rect,#mermaid-svg-0750uDFS9mMYexD7 .node circle,#mermaid-svg-0750uDFS9mMYexD7 .node ellipse,#mermaid-svg-0750uDFS9mMYexD7 .node polygon,#mermaid-svg-0750uDFS9mMYexD7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-0750uDFS9mMYexD7 .rough-node .label text,#mermaid-svg-0750uDFS9mMYexD7 .node .label text,#mermaid-svg-0750uDFS9mMYexD7 .image-shape .label,#mermaid-svg-0750uDFS9mMYexD7 .icon-shape .label{text-anchor:middle;}#mermaid-svg-0750uDFS9mMYexD7 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-0750uDFS9mMYexD7 .rough-node .label,#mermaid-svg-0750uDFS9mMYexD7 .node .label,#mermaid-svg-0750uDFS9mMYexD7 .image-shape .label,#mermaid-svg-0750uDFS9mMYexD7 .icon-shape .label{text-align:center;}#mermaid-svg-0750uDFS9mMYexD7 .node.clickable{cursor:pointer;}#mermaid-svg-0750uDFS9mMYexD7 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-0750uDFS9mMYexD7 .arrowheadPath{fill:#333333;}#mermaid-svg-0750uDFS9mMYexD7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-0750uDFS9mMYexD7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-0750uDFS9mMYexD7 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0750uDFS9mMYexD7 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-0750uDFS9mMYexD7 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0750uDFS9mMYexD7 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-0750uDFS9mMYexD7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-0750uDFS9mMYexD7 .cluster text{fill:#333;}#mermaid-svg-0750uDFS9mMYexD7 .cluster span{color:#333;}#mermaid-svg-0750uDFS9mMYexD7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-0750uDFS9mMYexD7 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-0750uDFS9mMYexD7 rect.text{fill:none;stroke-width:0;}#mermaid-svg-0750uDFS9mMYexD7 .icon-shape,#mermaid-svg-0750uDFS9mMYexD7 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0750uDFS9mMYexD7 .icon-shape p,#mermaid-svg-0750uDFS9mMYexD7 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-0750uDFS9mMYexD7 .icon-shape .label rect,#mermaid-svg-0750uDFS9mMYexD7 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0750uDFS9mMYexD7 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-0750uDFS9mMYexD7 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-0750uDFS9mMYexD7 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 自定义负载均衡策略
全局生效
局部生效
定义 IRule 类型 Bean
所有服务调用使用该规则
在配置文件中指定

某个服务的规则类
只影响指定服务调用

方式一:定义 IRule Bean

java 复制代码
@Bean
public IRule randomRule() {
    return new RandomRule();
}

这种方式通常是全局生效,要小心影响范围。

方式二:配置某个服务的规则

yaml 复制代码
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

这种方式是局部生效,只影响调用 userservice 时的负载均衡策略。

面试回答模板

可以这样答:

我们项目里的服务调用使用 Feign,Feign 底层会结合 Ribbon 做客户端负载均衡。消费者先从注册中心拉取服务实例列表,比如 user-service 有多个实例,Ribbon 会根据负载均衡策略选择一个实例发起调用。常见策略有轮询、随机、按响应时间权重、区域敏感策略等。自定义策略可以实现 IRule 接口并配置成 Bean,也可以在配置文件里针对某一个服务单独指定规则。

小结

Ribbon 的重点不在"背策略名",而在理解调用链:

Feign 发起调用 -> Ribbon 获取服务列表 -> 负载均衡规则选实例 -> 拼真实地址 -> 发送请求。

把这条线讲清楚,策略名只是补充。

相关推荐
慧一居士2 天前
Feign的GET请求如何传递对象参数?
java·spring cloud
我登哥MVP2 天前
SpringCloud Alibaba 核心组件解析:服务链路追踪
java·spring boot·后端·spring·spring cloud·java-ee·maven
慧一居士2 天前
SpringCloud 微服务Feigin 用的完整调用端和被调用的示例
java·spring cloud
地瓜伯伯2 天前
从MESI缓存一致性协议讲透synchronized的底层
java·spring boot·spring·spring cloud·微服务·springcloud
Devin~Y2 天前
大厂 Java 面试实录:从音视频内容社区到 AI RAG 的全链路技术设计
java·spring boot·redis·spring cloud·微服务·kafka·音视频
worilb3 天前
Spring Cloud 学习与实践(9):Gateway + JWT 统一鉴权
学习·spring cloud·gateway
山东点狮信息科技有限公司3 天前
企业级 MES 制造执行系统架构设计与实践
spring cloud·性能优化·系统架构·策略模式·点狮
韩小兔修媛史3 天前
SpringCloud八股文面试
spring·spring cloud·面试
shushangyun_3 天前
批发商城系统源码多少钱?2026最新报价一览
java·开发语言·人工智能·spring·spring cloud
山东点狮信息科技有限公司3 天前
点狮OA-企业级 OA 办公自动化系统架构设计与实践
spring cloud·微服务·性能优化·架构·系统架构