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

做外贸电商网站济南网站优化公司排名

做外贸电商网站,济南网站优化公司排名,wordpress下载资源站主题,网站建设方案书将一个大项目拆解成多个微服务时,就会导致: ①微服务重复配置过多 ②业务配置经常变动,每次修改都要重启服务 ③网关配置写死,如果变更需要重启网关 Nacos不仅有"注册中心"的功能,针对以上问题,Nacos还提供了"配置管理"功能 1 添加配置到Nacos…

 将一个大项目拆解成多个微服务时,就会导致:
    ①微服务重复配置过多
    ②业务配置经常变动,每次修改都要重启服务
    ③网关配置写死,如果变更需要重启网关

Nacos不仅有"注册中心"的功能,针对以上问题,Nacos还提供了"配置管理"功能

1 添加配置到Nacos

        添加一些共享配置到Nacos中,比如JDBC,MybatisPlus,日志(logback.xml)等

2 拉取配置

2.1 基于NacosConfig拉取配置

        基于NacosConfig拉取共享配置代替本地微服务的配置,把原本基于SpringBoot加载配置文件的方式改为SpringCloud加载配置文件的方式

2.2 引入依赖

        注意alibaba-nacos-config依赖,如果版本太高可能就不适合本篇文章

<!--nacos配置管理,nacosConfig-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2023.0.1.2</version>
</dependency><!--读取bootstrap文件-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
<dependency>

2.3 创建bootstrap.yaml文件

        共享配置管理:优先级低,在bootstrap.yaml文件中通过data-id指定生效

spring:application:name: engineering-----devprofiles:active: devcloud:nacos:server-addr: 123.123.123.123:8848config:file-extension: yaml #文件后缀名/配置格式shared-configs: #共享配置- data-id: share-datasource.yaml- data-id: share-administrators-phonenumber.yaml

        专属配置管理:优先级高,根据Nacos中的Data Id自动与"微服务名-环境"进行匹配生效

                例如在Nacos中创建配置的Data Id为engineering-----dev-dev.yaml,那么此配置就会对名为engineering-----dev的微服务的dev环境生效

3 配置热更新

        修改nacos中的配置时,微服务无需重启即可实时获取最新配置

3.1 热更新条件

        ① Nacos中添加一个与"微服务名"命名的专属配置管理(共享配置管理不行)

        ② spring.application.name必须写在bootstrap.yaml中(不能写在application.yaml中)

3.2 微服务接收热更新数据

3.2.1 方式一

        Prop类+@ConfigurationProperties(prefix = "aaa.bbb")注解

@Component
@ConfigurationProperties(prefix = "aaa.bbb")
public class TestProp {private String ccc;public String getCcc() {return ccc;}public void setCcc(String ccc) {this.ccc = ccc;}
}

        在对应的xxxServiceImpl类中用@Autowired注入成员变量,该成员变量就能接收热更新数据

@Autowired
private TestProp testProp;

3.2.2 方式二

        @RefreshScope注解+@Value("${aaa.bbb.ccc}")注解

        在对应的xxxServiceImpl类用@RefreshScope注解,同时用@Value("${aaa.bbb.ccc}")注入成员变量,该成员变量就能接收热更新数据

@Service
@Transactional
@RefreshScope
public class GuardNetServiceImpl extends ServiceImpl<GuardNetDao, GuardNet> implements GuardNetService {@Value("${aaa.bbb.ccc}")private String ccc;

4 动态路由

        网关启动时,会加载配置文件中的路由信息,然后保存在路由表(缓存)中,之后在处理请求的路由转发时,就无须再去读取配置文件,而是直接读取缓存即可

        但这样就会存在一个问题,即使将gateway模块的配置文件的路由信息写在nacos中,而且能实现"配置热更新",也无法做到路由表的实时更新(因为路由表只在网关启动时读取配置文件,后续对配置文件的热更新不会再被重新读取)

4.1 动态路由实现原理

        ① 路由配置保存到nacos,通过"配置热更新"原理,能实时将最新的路由信息更新到网关gateway模块

        ② 在gateway模块中监听nacos的配置变更,将变更的路由信息更新到路由表

4.2 gateway模块引入依赖

<!--nacos配置管理,nacosConfig-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2023.0.1.2</version>
</dependency><!--读取bootstrap文件-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

4.3 新建"动态路由加载器类",做路由配置变更监听

package xyz.aboluo.gateway.routers;import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.nacos.api.config.listener.Listener;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.event.RefreshRoutesEvent;
import org.springframework.cloud.gateway.route.RouteDefinition;
import org.springframework.cloud.gateway.route.RouteDefinitionWriter;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.Executor;import com.alibaba.fastjson2.JSON;
import reactor.core.publisher.Mono;@Component
public class DynamicRouteLoader {@Autowiredprivate NacosConfigManager nacosConfigManager;@Autowiredprivate RouteDefinitionWriter routeDefinitionWriter;@Autowiredprivate ApplicationEventPublisher applicationEventPublisher;private final String dataId = "gateway-route-dev.json";private final String group = "DEFAULT_GROUP";private Set<String> routeIds = new HashSet<>();@PostConstruct  // 在类被初始化进SpringIOC容器时,就调用此方法public void initRouteConfigListener() throws Exception {// 拉取NacosConfig配置并添加监听器String configInfo = nacosConfigManager.getConfigService().getConfigAndSignListener(dataId, group, 5000, new Listener() {@Overridepublic Executor getExecutor() {return null;}@Overridepublic void receiveConfigInfo(String s) {// 监听到配置变更,更新到路由表updateConfigInfo(s);}});// 首次启动时,将拉取的配置信息更新到配置表updateConfigInfo(configInfo);}public void updateConfigInfo(String configInfo) {// 删除旧的路由表for (String routeId : routeIds) {routeDefinitionWriter.delete(Mono.just(routeId)).subscribe();}routeIds.clear();// 更新路由表for (RouteDefinition routeDefinition : JSON.parseArray(configInfo, RouteDefinition.class)) {// 更新路由表routeDefinitionWriter.save(Mono.just(routeDefinition)).subscribe();// 记录路由id,便于下次更新时删除旧的路由表routeIds.add(routeDefinition.getId());}// 发布路由applicationEventPublisher.publishEvent(new RefreshRoutesEvent(routeDefinitionWriter));}
}

4.4 在nacos配置管理中新建路由规则的json格式配置

        路由规则的json格式与yaml格式对照关系:

http://www.dtcms.com/wzjs/60935.html

相关文章:

  • 微商城客服培训机构优化
  • 静态网站开发用到的技术成品网站1688入口网页版
  • 网站是用sql2012做的_在发布时可以改变为2008吗网络营销的概念和含义
  • 设计师应该看的网站营销方案怎么写
  • 苏州建设公司网站淘宝推广方法有哪些
  • 免费的求职简历模板网站seo网站内部优化方案
  • 厘米售卡站怎么做网站云巅seo
  • 怎么样购买网站空间友情链接
  • 昆明网站设计能实现什么功能自动app优化
  • html5网站开发工具网页制作接单平台
  • 网站开发公司哪里济南兴田德润实惠吗电商平台怎么运营的
  • 百度网站关键词和网址seo怎样才能优化网站
  • python做网站 框架2023年8月份新冠
  • 便宜手机网站建设个人博客网站怎么做
  • 青岛需要做网站的公司搜索引擎优化效果
  • 洛阳住房和城乡建设厅网站免费做网站
  • 直播网站提供搜索引擎优化公司
  • 网站设计遇到难题产品软文范例100字
  • 做酒店网站设计seo快速优化报价
  • 重庆建设工程质量协会网站谷歌seo搜索引擎优化
  • 和网站建设相关的行业seo的重要性
  • 那个大学业做网站seo搜索引擎优化步骤
  • 中港海通网站是谁做的西安百度搜索排名
  • 天津设计网站建设产品推广计划
  • 韩韩良品只做性价比网站下载商丘seo
  • 专业企业网站建设公司徐州网页关键词优化
  • 做网站的地方福州seo管理
  • 门户网站建设对策及建议中国疾控卫生应急服装
  • 做网站页面过大好影视后期哪个培训靠谱
  • 东莞网站建设纸品包装seo关键词优化外包