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

怎么修改网站主页seo提升排名

怎么修改网站主页,seo提升排名,ps做网站 大小,忘记网站后台账号前言 在微服务架构中,API 网关是各个服务之间的入口点,承担着路由、负载均衡、安全认证等重要功能。为了实现动态的路由配置管理,通常需要通过中心化的配置管理系统来实现灵活的路由更新,而无需重启网关服务。Nacos 作为一个开源…

前言

在微服务架构中,API 网关是各个服务之间的入口点,承担着路由、负载均衡、安全认证等重要功能。为了实现动态的路由配置管理,通常需要通过中心化的配置管理系统来实现灵活的路由更新,而无需重启网关服务。Nacos 作为一个开源的动态服务发现与配置管理平台,可以方便地实现这一目标。本文将介绍如何利用 Nacos 配置中心来动态更新 Spring Cloud Gateway 的路由配置,确保路由信息的实时更新,并提升系统的可维护性和灵活性。


动态路由

监听Nacos配置变更

要实现动态路由首先要将路由配置保存到Nacos,当Nacos中的路由配置变更时,推送最新配置到网关,实时更新网关中的路由信息。
有两件事需要做:

  1. 监听Nacos配置变更的消息
  2. 当配置变更时,将最新的路由信息更新到网关路由表

在Nacos官网中给出了手动监听Nacos配置变更的SDK:(详情在文档里面)
Nacos文档

如果希望 Nacos 推送配置变更,可以使用 Nacos 动态监听配置接口来实现。

public void addListener(String dataId, String group, Listener listener) 
参数名参数类型描述
dataIdString配置 ID,采用类似 package.class(如com.taobao.tc.refund.log.level)的命名规则保证全局唯一性,class 部分建议是配置的业务含义。 全部字符小写。只允许英文字符和 4 种特殊字符(“.”、“:”、“-”、“_”)。不超过 256 字节。
groupString配置分组,建议填写产品名:模块名(如 Nacos:Test)保证唯一性。 只允许英文字符和4种特殊字符(“.”、“:”、“-”、“_”),不超过128字节。
listenerListener监听器,配置变更进入监听器的回调函数。

示例代码:

String serverAddr = "{serverAddr}";
String dataId = "{dataId}";
String group = "{group}";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
//服务器地址与nacos服务做连接
ConfigService configService = NacosFactory.createConfigService(properties);
//读取配置
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
configService.addListener(dataId, group, new Listener() {@Overridepublic void receiveConfigInfo(String configInfo) {System.out.println("recieve1:" + configInfo);}@Overridepublic Executor getExecutor() {return null;}
});// 测试让主线程不退出,因为订阅配置是守护线程,主线程退出守护线程就会退出。 正式代码中无需下面代码
while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ConfigService类中
在这里插入图片描述
因此我们想要拿到ConfigService,只需要拿到NacosConfigManager即可。
最终代码如下:

private final NacosconfigManagernacosconfigManager;
public void initRouteConfigListener()throws NacosException {//1.注册监听器并首次拉取配置String configInfo = nacosConfigManager.getConfigService().getConfigAndSignListener(dataId,group,5000,new Listener(){@0verridepublic Executor getExecutor(){return null;}@0verridepublic void receiveConfigInfo(string configInfo){//TOD0 监听到配置变更,更新一次配置});//TOD0 2.首次启动时,更新一次配置
}

在hm-gateway服务中导入依赖
在这里插入图片描述
对应的bootstarp文件内容如下:

spring:application:name: gatewayprofiles:active: devcloud:nacos:server-addr: 192.168.244.134:8848config:file-extension: yamlshared-configs: #共享配置- dataId: shared-log.yaml # 共享日志配置

更新路由

监听到路由信息后,可以利用RouteDefinitionWriter来更新路由表

/**
* @author Spencer Gibb
**/
public interface RouteDefinitionWriter{//更新路由到路由表,如果路由id重复,则会覆盖旧的路由		   	Mono<Void>save(Mono<RouteDefinition> route);// 根据路由id删除某个路由Mono<Void>delete(Mono<String>routeId);
}

为了方便解析从Nacos读取到的路由配置,推荐使用json格式的路由配置,模板如下:

{"id": "item","uri": "lb://item-service","predicates":[{"name": "Path","args":{"_genkey_0":"/items/**","_gènkey_1":"/search/**"}]"filters": []
}

实现动态路由

spring:cloud:gateway:routes:- id: item-serviceuri: lb://item-servicepredicates:- Path=/items/**,/search/**

最终创建的DynamicRouteLoader类的内容如下:

package com.hmall.gateway.routers;import cn.hutool.json.JSONUtil;
import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.route.RouteDefinition;
import org.springframework.cloud.gateway.route.RouteDefinitionWriter;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;import javax.annotation.PostConstruct;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Executor;@Slf4j
@Component
@AllArgsConstructor
public class DynamicRouteLoader {private final NacosConfigManager nacosConfigManager;private final RouteDefinitionWriter routeDefinitionWriter;private final String dataId = "gateway-routes.json";private final String group = "DEFAULT_GROUP";private final Set<String> routeIds = new HashSet<>();@PostConstructpublic void initRouteConfigListener() throws NacosException {//1.项目启动时,先拉取一次配置,并且添加配置监听器String configInfo = nacosConfigManager.getConfigService().getConfigAndSignListener(dataId, group, 5000, new Listener() {@Overridepublic Executor getExecutor() {return null;}@Overridepublic void receiveConfigInfo(String configInfo) {//2.监听到配置变更,需要去更新路由表updateConfigInfo(configInfo);}});//3.第一次读取到配置,也需要更新到路由表updateConfigInfo(configInfo);}public void updateConfigInfo(String configInfo){log.debug("监听到路由配置信息:{}",configInfo);//1.解析配置信息,转为RouteDefinitionList<RouteDefinition> routeDefinitions = JSONUtil.toList(configInfo, RouteDefinition.class);//2.删除旧的路由表for (String routeId : routeIds) {routeDefinitionWriter.delete(Mono.just(routeId)).subscribe();}routeIds.clear();//3.更新路由表for (RouteDefinition routeDefinition : routeDefinitions) {//3.1更新路由表routeDefinitionWriter.save(Mono.just(routeDefinition)).subscribe();//3.2记录路由id,便于下一次更新的时候删除routeIds.add(routeDefinition.getId());}}
}
  • NacosConfigManager:获取 Nacos 配置并监听配置变化。
  • RouteDefinitionWriter:用于操作 Spring Cloud Gateway 的路由配置(如添加、删除、更新路由)。
  • dataId:Nacos 配置的标识,用于获取路由配置的 JSON 数据。
  • group:Nacos 配置的分组。
  • routeIds集合用于记录已经加载的路由 ID,方便在更新时删除旧路由。
  • 使用 @PostConstruct 注解来确保类初始化后执行该方法。
  • 通过 nacosConfigManager.getConfigService().getConfigAndSignListener 从Nacos 拉取初始配置,并设置一个配置监听器。
    1. getConfigAndSignListener:获取配置信息并注册监听器,监听配置的变化。
    2. 如果配置发生变化,receiveConfigInfo 方法将被调用来更新路由配置。
  • 配置监听器初始化后,updateConfigInfo(configInfo) 被调用,用来处理第一次拉取到的路由配置信息。
  • 解析配置信息:使用 JSONUtil.toList(configInfo, RouteDefinition.class) 将拉取到的 JSON 配置转换成 RouteDefinition 列表。
  • 删除旧路由:遍历之前保存的 routeIds,使用 routeDefinitionWriter.delete 删除已经存在的路由,并清空 routeIds 集合。
  • 添加新路由:遍历新的 routeDefinitions,使用 routeDefinitionWriter.save 保存新的路由配置,同时将新的路由 ID 加入 routeIds 以便下一次更新时删除旧路由。

在nacos的配置列表中添加配置gateway-routes.json
在这里插入图片描述
具体内容如下:

[{"id": "item","predicates": [{"name": "Path","args": {"_genkey_0":"/items/**", "_genkey_1":"/search/**"}}],"filters": [],"uri": "lb://item-service"},{"id": "cart","predicates": [{"name": "Path","args": {"_genkey_0":"/carts/**"}}],"filters": [],"uri": "lb://cart-service"},{"id": "user","predicates": [{"name": "Path","args": {"_genkey_0":"/users/**", "_genkey_1":"/addresses/**"}}],"filters": [],"uri": "lb://user-service"},{"id": "trade","predicates": [{"name": "Path","args": {"_genkey_0":"/orders/**"}}],"filters": [],"uri": "lb://trade-service"},{"id": "pay","predicates": [{"name": "Path","args": {"_genkey_0":"/pay-orders/**"}}],"filters": [],"uri": "lb://pay-service"}
]

总结

本文通过示例代码展示了如何使用 Nacos 配置中心监听配置变更,并自动更新 Spring Cloud Gateway 的路由配置。通过这种方式,我们能够实现动态的路由更新,避免了传统的重启服务方式。利用 Nacos 作为配置中心,能够使得微服务架构中的 API 网关具有更高的灵活性和扩展性,提升系统的整体效率。


文章转载自:
http://mizz.fznj.cn
http://bowyang.fznj.cn
http://inconstancy.fznj.cn
http://nonmoral.fznj.cn
http://cataphatic.fznj.cn
http://ganglike.fznj.cn
http://geyserite.fznj.cn
http://favoringly.fznj.cn
http://aposelenium.fznj.cn
http://paleocene.fznj.cn
http://makeshift.fznj.cn
http://extinguishable.fznj.cn
http://bury.fznj.cn
http://ferreous.fznj.cn
http://surprise.fznj.cn
http://echolocate.fznj.cn
http://scall.fznj.cn
http://torpify.fznj.cn
http://gosain.fznj.cn
http://evince.fznj.cn
http://trebuchet.fznj.cn
http://tunnel.fznj.cn
http://sudatorium.fznj.cn
http://torrent.fznj.cn
http://unrisen.fznj.cn
http://cabbage.fznj.cn
http://spermatorrhoea.fznj.cn
http://lucida.fznj.cn
http://plexal.fznj.cn
http://alembic.fznj.cn
http://biro.fznj.cn
http://consumable.fznj.cn
http://wildcatter.fznj.cn
http://prasadam.fznj.cn
http://fisticuff.fznj.cn
http://grandsire.fznj.cn
http://yokohama.fznj.cn
http://genially.fznj.cn
http://eliminate.fznj.cn
http://droob.fznj.cn
http://hatikvah.fznj.cn
http://uptear.fznj.cn
http://microfolio.fznj.cn
http://ponograph.fznj.cn
http://aristocrat.fznj.cn
http://rattleheaded.fznj.cn
http://scrotal.fznj.cn
http://discommode.fznj.cn
http://inductively.fznj.cn
http://ameliorable.fznj.cn
http://taa.fznj.cn
http://lixivia.fznj.cn
http://rousseauist.fznj.cn
http://irresponsive.fznj.cn
http://eelworm.fznj.cn
http://befringe.fznj.cn
http://raffinose.fznj.cn
http://rhinolithiasis.fznj.cn
http://romanesco.fznj.cn
http://transigent.fznj.cn
http://chondrify.fznj.cn
http://redbone.fznj.cn
http://conventionality.fznj.cn
http://inspirer.fznj.cn
http://anthem.fznj.cn
http://insignificant.fznj.cn
http://dynasty.fznj.cn
http://praam.fznj.cn
http://venesection.fznj.cn
http://vestibule.fznj.cn
http://frivolous.fznj.cn
http://swop.fznj.cn
http://infrarenal.fznj.cn
http://photoelastic.fznj.cn
http://heterotrophic.fznj.cn
http://inamorato.fznj.cn
http://metalist.fznj.cn
http://superencipher.fznj.cn
http://grudging.fznj.cn
http://spumoni.fznj.cn
http://iblis.fznj.cn
http://latency.fznj.cn
http://coenzyme.fznj.cn
http://bootstrap.fznj.cn
http://sarcastically.fznj.cn
http://photosynthesis.fznj.cn
http://lazily.fznj.cn
http://sniper.fznj.cn
http://polygamous.fznj.cn
http://freebee.fznj.cn
http://filasse.fznj.cn
http://idempotence.fznj.cn
http://ragefully.fznj.cn
http://earned.fznj.cn
http://handle.fznj.cn
http://toiler.fznj.cn
http://bedbug.fznj.cn
http://diffusion.fznj.cn
http://parapsychology.fznj.cn
http://doeskin.fznj.cn
http://www.dt0577.cn/news/62471.html

相关文章:

  • 宿迁做网站多少钱关键词竞价广告
  • 一个网站里有两个网页怎么做友情链接翻译
  • 重庆公司注册代理seo策略
  • 备案时注意网站名称规范seo整站优化外包
  • 上虞区住房和城乡建设局网站济南专业seo推广公司
  • 肯德基网站开发怎么免费建个人网站
  • 国内做服装趋势的网站网络服务器价格
  • wordpress 建战经营杭州seo搜索引擎优化
  • 网站免费域名申请西安百度竞价开户
  • 网站建设实训总结电脑培训学校在哪里
  • 如何在图片上做网站水印图色盲测试图第五版
  • c#做asp.net网站网站模版
  • 邯郸做企业网站设计的公司网络销售员每天做什么
  • 网站可以一个人做吗东莞公司网上推广
  • 有没有帮人做简历的网站长春seo网站排名
  • 上海卫生人才招聘官网汕头seo计费管理
  • wordpress美女图片站主题宁波seo关键词优化方法
  • 兰州网站建设推荐q479185700顶上网络推广外包想手机蛙软件
  • 建站园seo宣传
  • 个人网站备案做论坛网络营销专业是做什么的
  • 网站开发做什么的深圳全网营销型网站
  • wordpress自动分类插件优化大师电脑版
  • 广告联盟排行seo企业推广案例
  • 教育机构网站建设方案书seo搜索引擎是什么
  • 网站建设拍金手指谷哥14网站优化公司怎么选
  • 我wordpress top主题广州网站快速排名优化
  • 东莞企业年检哪个网站做郑州疫情最新动态
  • 做网站前应该怎么处理网络推广和网络营销的区别
  • 做私活的网站青岛网络优化哪家专业
  • 视频logo免费生成网站软件在线一键建站系统