响应式电影网站微信小程序如何运营推广

news/2025/10/9 4:59:18/文章来源:
响应式电影网站,微信小程序如何运营推广,营销型网站建设实训报告,温州网页设计美工问题 Spring Cloud Gateway版本是2.2.9.RELEASE#xff0c;原本项目中依赖服务自动发现来自动配置路由到微服务的#xff0c;但是发现将spring.cloud.gateway.discovery.locator.enabledfalse 启动之后Gateway依然会将所有微服务自动注册到路由中#xff0c;百思不得其解原本项目中依赖服务自动发现来自动配置路由到微服务的但是发现将spring.cloud.gateway.discovery.locator.enabledfalse 启动之后Gateway依然会将所有微服务自动注册到路由中百思不得其解遂调试代码观察期启动过曾记录此文以供参考官方文档 可以看到此处明确表示可以通过设置该值来讲微服务中服务自动添加到配置中。按照这个线索找到了 org.springframework.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator#getRouteDefinitions 这个类在之前的文章includeExpression中有提及过在构造函数中对成员变量 public class DiscoveryClientRouteDefinitionLocator implements RouteDefinitionLocator {private final DiscoveryLocatorProperties properties;...private FluxListServiceInstance serviceInstances;/*** Kept for backwards compatibility. You should use the reactive discovery client.* param discoveryClient the blocking discovery client* param properties the configuration properties* deprecated kept for backwards compatibility*/Deprecatedpublic DiscoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient,DiscoveryLocatorProperties properties) {this(discoveryClient.getClass().getSimpleName(), properties);serviceInstances Flux.defer(() - Flux.fromIterable(discoveryClient.getServices())).map(discoveryClient::getInstances).subscribeOn(Schedulers.boundedElastic());}public DiscoveryClientRouteDefinitionLocator(ReactiveDiscoveryClient discoveryClient,DiscoveryLocatorProperties properties) {this(discoveryClient.getClass().getSimpleName(), properties);serviceInstances discoveryClient.getServices().flatMap(service - discoveryClient.getInstances(service).collectList());}...这里会对serviceInstances进行初始化从注册中心获取所有已注册的微服务实例进行填充serviceInstance的获取结束了,在DiscoveryClientRouteDefinitionLocator还有一个重要的方法 #DiscoveryClientRouteDefinitionLocatorOverridepublic FluxRouteDefinition getRouteDefinitions() {SpelExpressionParser parser new SpelExpressionParser();Expression includeExpr parser.parseExpression(properties.getIncludeExpression());Expression urlExpr parser.parseExpression(properties.getUrlExpression());PredicateServiceInstance includePredicate;if (properties.getIncludeExpression() null|| true.equalsIgnoreCase(properties.getIncludeExpression())) {includePredicate instance - true;}else {includePredicate instance - {Boolean include includeExpr.getValue(evalCtxt, instance, Boolean.class);if (include null) {return false;}return include;};}return serviceInstances.filter(instances - !instances.isEmpty()).map(instances - instances.get(0)).filter(includePredicate).map(instance - {RouteDefinition routeDefinition buildRouteDefinition(urlExpr,instance);final ServiceInstance instanceForEval new DelegatingServiceInstance(instance, properties);for (PredicateDefinition original : this.properties.getPredicates()) {PredicateDefinition predicate new PredicateDefinition();predicate.setName(original.getName());for (Map.EntryString, String entry : original.getArgs().entrySet()) {String value getValueFromExpr(evalCtxt, parser,instanceForEval, entry);predicate.addArg(entry.getKey(), value);}routeDefinition.getPredicates().add(predicate);}for (FilterDefinition original : this.properties.getFilters()) {FilterDefinition filter new FilterDefinition();filter.setName(original.getName());for (Map.EntryString, String entry : original.getArgs().entrySet()) {String value getValueFromExpr(evalCtxt, parser,instanceForEval, entry);filter.addArg(entry.getKey(), value);}routeDefinition.getFilters().add(filter);}return routeDefinition;});} 根据includeExpr 配置的sl表达式判断当前的serviceInstance是否服务转发要求。填充好predicatefilter之后返回routeDefinitionurlExpr的默认值是lb://serverIdpredicate匹配的path就等于serverId有配置可以转换为小写spring.cloud.gateway.discovery.locator.lower-case-service-idtrue因为eureka默认会uppercase serverIdfilter中会StripPrefix1将路径中的serverId移除再转发给下游。路由定义的部分就这里了他的刷新逻辑依靠SpringRefreshContext 事件具体的定义逻辑在org.springframework.cloud.gateway.config.GatewayAutoConfiguration BeanConditionalOnClass(name org.springframework.cloud.client.discovery.event.HeartbeatMonitor)public RouteRefreshListener routeRefreshListener(ApplicationEventPublisher publisher) {return new RouteRefreshListener(publisher);} RouteRefreshListener 实现了ApplicationListenerApplicationEvent监控以下几个事件并按照条件进行逻辑执行 ContextRefreshEvent 启动容器或者beans重新加载RefreshScopeRefreshdEvent 是 Spring Cloud 中的一个事件当 RefreshScope 注解的 beans 被重新加载时发布。这个事件主要用于 Spring Cloud 的配置刷新机制当配置中心的配置信息发生变化时会触发该事件以刷新 beans。ParentHeartbeatEvent 是 Spring Cloud Bus 中的一个事件用于在父上下文通常是 Spring Cloud Config Server发生心跳时发布。这个事件用于通知子上下文如微服务关于父上下文的健康状态。HeartbeatEvent 是 Spring Cloud Bus 中的另一个事件用于在服务实例之间广播心跳消息以检测和维持各个服务的健康状态。 public void onApplicationEvent(ApplicationEvent event) {if (event instanceof ContextRefreshedEvent) {ContextRefreshedEvent refreshedEvent (ContextRefreshedEvent) event;if (!WebServerApplicationContext.hasServerNamespace(refreshedEvent.getApplicationContext(), management)) {reset();}}else if (event instanceof RefreshScopeRefreshedEvent|| event instanceof InstanceRegisteredEvent) {reset();}else if (event instanceof ParentHeartbeatEvent) {ParentHeartbeatEvent e (ParentHeartbeatEvent) event;resetIfNeeded(e.getValue());}else if (event instanceof HeartbeatEvent) {HeartbeatEvent e (HeartbeatEvent) event;resetIfNeeded(e.getValue());}}容器启动完成之后该监听器接收到ContextRefreshedEvent 会执行reset方法reset方法主要功能是发送一个RefreshRoutesEvent 事件定义如下 public class RefreshRoutesEvent extends ApplicationEvent {public RefreshRoutesEvent(Object source) {super(source);} }同样在AutoConfig中声明的CachingRouteLocator接收该参数 tip:另外还有个CachingRouteDefinitionLocator也生命监听 RefreshRoutesEvent事件但是默认配置下并不会产生任何逻辑 BeanPrimaryConditionalOnMissingBean(name cachedCompositeRouteLocator)// TODO: property to disable composite?public RouteLocator cachedCompositeRouteLocator(ListRouteLocator routeLocators) {return new CachingRouteLocator(new CompositeRouteLocator(Flux.fromIterable(routeLocators)));}event invoke方法如下 public void onApplicationEvent(RefreshRoutesEvent event) {try {fetch().collect(Collectors.toList()).subscribe(list - Flux.fromIterable(list).materialize().collect(Collectors.toList()).subscribe(signals - {applicationEventPublisher.publishEvent(new RefreshRoutesResultEvent(this));cache.put(CACHE_KEY, signals);}, throwable - handleRefreshError(throwable)));}catch (Throwable e) {handleRefreshError(e);}}CompositeRouteLocator的目的是混合 多个来源的Routers定义比如配置文件接口注册中心通过Bean形式定义的路由。可以理解成mixed route locator。 fetch方法就是获取所有RouteLocator的路由定义 private FluxRoute fetch() { return this.delegate.getRoutes().sort(AnnotationAwareOrderComparator.INSTANCE); } 这里其实就是指定之前org.springframework.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator#getRouteDefinitions的方法也就是获取具体的路由定义获取成功之后放入缓存Fire RefreshRoutesResultEvent事件就解决了开发人员可以通过 监听RefreshRoutesResultEvent 主动感知当前的路由变化。路由加载流程到此结束 后语 我的问题是通过设置spring.cloud.gateway.discovery.locator.enabled依然没有办法让微服务注册失效在整个流程中并没有看到使用该数值的地方难道这是一个bug转念一想DiscoveryClientRouteDefinitionLocator只需要阻止该Bean的注册即可取消掉从eureka获取服务实例的能力通过引用关系可知 org.springframework.cloud.gateway.discovery.GatewayDiscoveryClientAutoConfiguration.ReactiveDiscoveryClientRouteDefinitionLocatorConfigurationorg.springframework.cloud.gateway.discovery.GatewayDiscoveryClientAutoConfiguration.BlockingDiscoveryClientRouteDefinitionLocatorConfiguration 这里两处找到了其定义一个是为reactive非阻塞io准备的一个是为阻塞io准备的根据源代码可知,具体执行提供那个Locator取决于spring.cloud.discovery.reactive.enabled我的项目中是通过VM Options参数的形式传入的-Dspring.cloud.config.discovery.enabledtrue所以我在这两个方法处都打了断点。 Configuration(proxyBeanMethods false)ConditionalOnProperty(value spring.cloud.discovery.reactive.enabled,matchIfMissing true)public static class ReactiveDiscoveryClientRouteDefinitionLocatorConfiguration {BeanConditionalOnProperty(name spring.cloud.gateway.discovery.locator.enabled)public DiscoveryClientRouteDefinitionLocator discoveryClientRouteDefinitionLocator(ReactiveDiscoveryClient discoveryClient,DiscoveryLocatorProperties properties) {return new DiscoveryClientRouteDefinitionLocator(discoveryClient, properties);}}Configuration(proxyBeanMethods false)DeprecatedConditionalOnProperty(value spring.cloud.discovery.reactive.enabled,havingValue false)public static class BlockingDiscoveryClientRouteDefinitionLocatorConfiguration {BeanConditionalOnProperty(name spring.cloud.gateway.discovery.locator.enabled)public DiscoveryClientRouteDefinitionLocator discoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient, DiscoveryLocatorProperties properties) {return new DiscoveryClientRouteDefinitionLocator(discoveryClient, properties);}}当我准备要执行调试模式想看看具体是哪个Bean被初始化的时候恍然大悟看到了DiscoveryClientRouteDefinitionLocator的依赖我自己在GatewayApplication 中手动注册了Bean Beanpublic DiscoveryClientRouteDefinitionLocator discoveryClientRouteLocator(ReactiveDiscoveryClient discoveryClient,DiscoveryLocatorProperties discoveryLocatorProperties) {return new DiscoveryClientRouteDefinitionLocator(discoveryClient, discoveryLocatorProperties);}真的是笑死出这个问题的原因是因为最开始的代码使用的出c4o老师生成的一开始并不明确该代码的作用后面查看文档才知道用于微服务发现。已经不在关注这里了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/932195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计案例网站免费凡客建站官网

Redis主从架构 单节点Redis的并发能力是有上限的,要进一步提高redis的并发能力,就需要搭建主从集群,实现读写分离。 修改每个文件夹内的配置文件,将端口分别修改为7001、7002、7003,将rdb文件保存位置都修改为自己所在…

海口网站内蒙网站建设赫伟创意星空科技

目录 1、标识符和关键字 1.1 标识符概念 1.2 标识符规则 2、命名规则 3、关键字 1、标识符和关键字 1.1 标识符概念 开发人员在程序中自定义的一些符号和名称。标示符是自己定义的,如变量名,函数名等。 1.2 标识符规则 2、命名规则 见名知意。起一个有意义的名字&#…

天骏手表网站湖北网站推广

1.使用语法 : 参数 > 函数语句; 分为以下几种形式 :  (1) ()=>语句 ( )=> statement 这是一种简写方法省略了花括号和return 相当于 ()=>&#xff5…

音乐网站建设需求分析qq在线登录手机版

目录 一、总述 二、商品分类问题 三、前端检验 四、后端检验 五、总结 一、总述 在完成完商品分类的时候,后来测试的时候还是发现了一些问题,现在将其进行解决,问题如下: 1. 取消显示的时候,如果取消了显示&…

公路水运建设质量安全监督网站网站建设应当注意

lowres的含义 lowres是AVCodecContext结构体中的一个成员变量,用于指定编解码器的降低分辨率级别。 在某些情况下,为了加快编解码的速度或减少计算资源的消耗,可以通过设置lowres参数来降低编解码器的分辨率级别。这将导致编解码器在处理视…

wordpress站点前台请求数过多公益网站 做公益赚钱

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 这次来聊一个大家可能也比较关心的问题,那就是就业城市选择的问题。而谈到这个问题&a…

博科SAN switch 所有端口的led闪橙色

问题描述异常断电重启后,所有端口的led闪橙色, switchshow 时所有端口disable状态。解决方法使用switchcfgpersistentenable将switch的persisten状态设置为enable,这样下次重启后,switch的状态是enable。 GLQ_FC…

中国城乡住房建设厅网站首页网站建设招标书模板

一、安装Python3 ###查看是否安装Python3 Centos 7 默认安装了python 2.7.5. 因为一些命令要用它比如yum 它使用的是python2.7.5 使用 python -V 命令查看一下是否安装Python 然后使用命令 which python 查看一下Python可执行文件的位置 Python指向的是Python2.7 安装依赖 y…

龙腾盛世网站建设网站开发使用的语言类

时间数据类型 1.mongo中存储时间大多为ISOData 2.获取当前时间   1. 使用new Date() 自动生成当前时间   2. 使用 ISODate() 生成当前时间   3. 获取计算机时间生成时间格式字符串 Date() 3.ISODate()   功能: 生成mongodb时间存储类型   参数&#xff1a…

做网站怎样套用模板荆州房地产网站建设

golang 学习的时候很多sample 讲的都是一个文件的go 文件怎么写,但是现实中不可能所有的实现都写到一个文件里面,按照功能的不同,要么拆分成不同的文件,要么拆分成不同的文件。下面有些个人的经验分享下,如果有问题请指…

荆州松滋网站建设搭建一个购物网站

官方文档说明:入口 WebSocket连接的链接只支持wss加密方式,且只能用域名的方式 该域名还要在微信公众平台的小程序中登记才能使用,开发->开发管理->服务器域名->修改 该域名要和https使用的一致 以域名地址:dtu.aab…

广州营销型网站建设公司哪家名气大廉洁甘孜权威发布

最近自己在尝试搭建react项目,其实react项目搭建没有想象中的那么复杂,我们只需要使用一个命令把React架子搭建好,其他的依赖可以根据具体的需求去安装,比如AntDesignMobile的UI框架,执行npm install antd-mobile --sa…

良品铺子网站规划和建设保定seo排名外包

问题 C: 21级期末机试-密码设置(20分) [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 128 MB 题目描述 小南有个密码本,详细记录着她在每个网站上的密码,但是有的密码设置可能存在安全问题,她想请聪明的你帮她…

网站里添加聊天框怎么做wordpress 首页添加链接

本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化,该数据集包含丰富的车辆目标图像样本…

嘉祥网站seo棋牌app软件开发

文章目录 1 生成kube-apiserver证书 (master节点操作)1.1 自签证书颁发机构(CA)1.2 使用自签CA签发kube-apiserver HTTPS证书 2 从Github下载二进制文件3 解压二进制包 (master节点操作)4 部署kube-apiserv…

vultr怎么做网站北京网站建设软件

date: 2016/11/3author: dlive0x01 漏洞原文翻译水平不高求轻喷感觉作者在写文章的时候有些地方描述的也不是特别清楚,不过结合poc可以清晰理解漏洞利用过程0x04漏洞利用过程总结给出了清晰的漏洞利用过程,结合poc食用效果更佳# http://legalhackers.com…

公司做营销型网站拼多多货源一件代发平台

1. 页面路由 router 页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。本文将从页面跳转、页面返回和页面返回前增加一个询问框几个方…

做虾苗网站有哪些流程深圳公司注册多少钱

在使用机器学习构建预测模型时,我们不只是想知道“预测值(点预测)”,而是想知道“预测值落在某个范围内的可能性有多大(区间预测)”。例如当需要进行需求预测时,如果只储备最可能的需求预测量,那么缺货的概率非常的大。但是如果库…

杭州网站建设源码外国人做免费视频网站

嵌_ModbusTcpIp数据转发/通_通/发送方.MCG嵌_ModbusTcpIp数据转发/通_通/接收方.MCG嵌_ModbusTcpIp数据转发/通_通/驱动路径说明.txt嵌_ModbusTcpIp数据转发/通_通/ModBusTcp数据转发设备/ModbusTCPIPSlave.chm嵌_ModbusTcpIp数据转发/通_通/ModBusTcp数据转发设备/ModBusTCPIP…

一个网站两个域名备案软件工程师报名

在当前全球化的时代背景下,海外市场的开拓对于企业的发展至关重要。而海外媒体宣传是一种有效的推广方式,可以帮助企业在全球范围内打开市场。本文将对8个海外媒体宣发套餐的推广要点进行解析,帮助企业了解如何在海外市场进行宣传推广。 1. 媒…