当前位置: 首页 > news >正文

慈溪怎么做网站关键词查找的方法有以下几种

慈溪怎么做网站,关键词查找的方法有以下几种,常见的办公网网站开发,网站空间商是什么意思前言 故事背景 jenkins部署时总是会有几秒钟接口调用报错,观察日志是因为流量被下发到已下线的服务,重启脚本在停止应用之前先调用nacos注销实例api后再重启依然会短暂出现此问题。项目架构是springcloud alibaba,通过openfeign进行微服务之间调用&…

前言

  • 故事背景
    jenkins部署时总是会有几秒钟接口调用报错,观察日志是因为流量被下发到已下线的服务,重启脚本在停止应用之前先调用nacos注销实例api后再重启依然会短暂出现此问题。项目架构是springcloud alibaba,通过openfeign进行微服务之间调用,猜测是LoadBalancer缓存问题。
  • 依赖版本
<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.0.1.0</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.3</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.1</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><exclusions><exclusion><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>3.1.1</version></dependency>
</dependencies>
  • loadbalancer配置
spring:cloud:loadbalancer:#需要引入Spring Retry依赖retry:enabled: true

springcloud loadbalancer缓存原理

  1. 启用启动首先装配Caffeine一级缓存,缓存应用实例,降低注册中心负载,提升性能
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    从上图可以看出,可以通过设置spring.cloud.loadbalancer.cache来关闭一级缓存,其值默认是开启的。

  2. feign初次从loadbalance获取应用实例会触发装配ServiceInstanceListSupplier逻辑
    在这里插入图片描述
    在这里插入图片描述

从一级缓存中获取应用实例:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

解决方案

通过上面的源码分析,根本原因是应用从nacos下线后,loadbalancer的一级缓存未移除下线实例,有以下解决办法:

  1. 重启脚本下线nacos实例后,等待一级缓存失效后(默认35s)再重启应用
  2. 禁用一级缓存(不建议)
  3. 监听nacos下线事件,手动移除实例

方案实现

  • 采用方案
    监听nacos下线事件,手动移除实例
  • 代码实现
    • 思路
      nacos订阅需要删除缓存的服务名(serviceName),下线应用主动调用nacos实例注销api后由nacos server触发自定义的订阅回调逻辑
    • nacos订阅源码分析
      在这里插入图片描述在这里插入图片描述

从上图可以看出默认只会订阅当前服务名,这也是为什么以下代码在其他应用主动下线后没有触发回调的原因
在这里插入图片描述
- 编写指定服务nacos订阅与删除实例缓存逻辑

package com.xxx.xxx.feign.listener;import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.NacosServiceManager;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.listener.NamingEvent;
import lombok.SneakyThrows;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cache.Cache;
import org.springframework.cloud.loadbalancer.cache.LoadBalancerCacheManager;
import org.springframework.cloud.loadbalancer.cache.LoadBalancerCacheProperties;
import org.springframework.cloud.loadbalancer.core.CachingServiceInstanceListSupplier;
import org.springframework.context.annotation.Configuration;import javax.annotation.Resource;
import java.util.Arrays;/*** @description nacos应用监听* @date 2024/7/29*/
@Configuration
@ConditionalOnProperty(name = "spring.cloud.loadbalancer.cache.enabled", havingValue = "true")
@AutoConfigureAfter(LoadBalancerCacheProperties.class)
public class NacosInstanceListener implements InitializingBean {@Resourceprivate NacosServiceManager nacosServiceManager;@Resourceprivate NacosDiscoveryProperties properties;@Resourceprivate LoadBalancerCacheManager caffeineLoadBalancerCacheManager;@Override@SneakyThrowspublic void afterPropertiesSet() {NamingService namingService = nacosServiceManager.getNamingService(properties.getNacosProperties());namingService.subscribe("xxx-product-xxx", properties.getGroup(), Arrays.asList(properties.getClusterName()), event -> {if (event instanceof NamingEvent) {NamingEvent namingEvent = (NamingEvent) event;String svrName = namingEvent.getServiceName();Cache cache = caffeineLoadBalancerCacheManager.getCache(CachingServiceInstanceListSupplier.SERVICE_INSTANCE_CACHE_NAME);if (cache != null) {cache.evict(svrName);}System.out.println(event);}});}
}
  • 下线服务主动调用nacos注销实例接口,观察效果
    在这里插入图片描述

在这里插入图片描述

从上图可以看到,删除服务实例缓存回调成功触发,考虑到调用nacos api下线到上述代码被成功执行的耗时,应用重启脚本最好在调用nacos api成功后等待1秒左右再停止服务。

http://www.hengruixuexiao.com/news/54600.html

相关文章:

  • wordpress vps建站aso优化工具
  • 个人怎么做课程网站服务外包平台
  • html网页设计毕业设计作品北京网站优化推广方案
  • 省建设厅官网查询网站seo基本流程
  • 网站关键词设几个深圳网络推广解决方案
  • 本溪市城乡住房建设厅网站优化seo网站
  • 防水网站怎么做怎样打开网站
  • 微信安装德阳网站seo
  • 苏州建设网站找网络公司广告推广语
  • 广州海珠网站设计淘宝店铺怎么推广和引流
  • 烟台北京网站建设公司太原网站关键词推广
  • wordpress小工具样式西安seo盐城
  • 乡镇门户网站建设的现状及发展对策网站内容管理系统
  • 北京大兴区网站建设网络营销方式
  • 怎样做网站 app教程产品推广策略
  • 北京网站建设z亿玛酷1订制百度应用市场
  • 普集网站制作谷歌关键词排名查询
  • 网站建设自建服务器友链目录网
  • 北京网站建设付款方式seo咨询师
  • 上海临港自贸区注册公司关键词seo公司
  • 做网站和推广的公司哪家好seo优化服务是什么意思
  • 网站基础内容百度投流运营
  • 岳阳网站开发网站运营怎么做百度百家号怎么赚钱
  • 商丘网站设计东莞seo外包公司
  • 如何做网站运营宁波 seo排名公司
  • 发布活动的平台app成都seo的方法
  • 国外网站建设公司怎么推广销售
  • 烟台专业网站建设个人网站制作
  • 建网站手机数字营销网站
  • 3d打印加工平台深圳外包seo