百度指数官方网站济南做网站哪好

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

百度指数官方网站,济南做网站哪好,一般纳税人企业所得税,wordpress dux5.2主题前言 本文为个人SpringCloud学习笔记#xff0c;主要记录Nacos的注册中心实操、SpringBoot多模块编程实操等 注册中心 注册中心介绍 注册中心是微服务的一个重要组件#xff0c;用于实现服务的注册与发现#xff0c;主要作用包括以下#xff1a; 服务注册#xff1a;…前言 本文为个人SpringCloud学习笔记主要记录Nacos的注册中心实操、SpringBoot多模块编程实操等 注册中心 注册中心介绍 注册中心是微服务的一个重要组件用于实现服务的注册与发现主要作用包括以下 服务注册 服务实例启动时将自身信息注册到注册中心包括服务名称、地址、端口等。服务发现消费者向注册中心查询服务并获取服务实例信息来访问服务。服务健康检测注册中心定期检测服务实例健康状况过滤不健康实例。服务路由提供服务的路由与负载均衡功能。服务监控统计服务调佣次数时长等用于监控服务状态。服务更新当服务实例信息变更时向注册中心发送更新信息通知。通过注册中心服务提供者和消费者只需与注册中心交互即可从而实现服务的注册与发现减低服务间的耦合度。 注册中心交互流程 这张图非常重要 注册中心通常有两个角色 服务提供者(也叫生产者)对外提供服务的微服务应用。它会把自身的服务地址注册到注册中心以供消费者发现和调用。服务调用者(也叫消费者) 调用其他微服务的应用程序。它会向注册中心订阅自己需要的服务并基于服务提供者注册的信息发起远程调用。这个具体服务调用的受到负载均衡控制 生产者实现 使用多模块编程的方式实现生产者 1.构建父模块 2.父模块添加依赖 3.删除无用文件 4.父依赖修正 4.构建子模块生产者prodiver 5.子类依赖 6.删除重复依赖 因为父模块中已经有配置那么子模块下面图示代码删除即可 7.添加所属父类说明 8.父类添加拥有子类说明 9. 子类配置application.yml spring:application:# 服务注册站点name: nacos-provider #命名不能使用‘’早期SpringCloud不支持cloud:nacos:# Nacos认证信息discovery:username: nacospassword: nacos# Nacos 服务发现与注册配置其中子属性server-addr指定Nacos服务器主机和端口server-addr: localhost:8848namespace: public # 注册到nacos的指定namespace默认public server:port: 0 #动态端口补充这里使用动态端口是因为微服务中消费者在调用生产者服务的时候是通过Nacos作为中间人的具体调用到哪个一个实际上并不关心所以实际生产者端口号分配工作不妨丢给操作系统去分配这样也不怕端口被占有的问题。同时也是因为微服务的随机调用生产者服务不需要写死服务调用端口号所以机器处理可靠下为什么不让机器来考虑这种问题呢而且微服务体量大如果人为去分配也可以导致两个服务分配到相同的端口号所以这种工作不妨让机器去苦恼。 10.子模块启动 项目启动 在项目启动后会自动注册到Nacos中作为一个服务站点中的一员 访问成功 11.最终说明 到此多模块的创建便结束了以下是父模块pom.xml与子模块provider的pom.xml 父模块pom.xml ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.example/groupIdartifactIdSpringCloudDiscoveryDemo/artifactIdversion0.0.1-SNAPSHOT/versionnameSpringCloudDiscoveryDemo/namedescriptionSpringCloudDiscoveryDemo/description!– 标识当前为父模块 –packagingpom/packagingpropertiesjava.version17/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingspring-boot.version3.0.2/spring-boot.versionspring-cloud-alibaba.version2022.0.0.0/spring-cloud-alibaba.versionspring-cloud.version2022.0.0/spring-cloud.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesmodulesmoduleprovider/module/modulesdependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion\({spring-boot.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion\){spring-cloud-alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.8.1/versionconfigurationsource17/sourcetarget17/targetencodingUTF-8/encoding/configuration/pluginplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion${spring-boot.version}/versionexecutionsexecutionidrepackage/idgoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins/build/project provider—–pom.xml ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.example/groupIdartifactIdprovider/artifactIdversion0.0.1-SNAPSHOT/versionnameprovider/namedescriptionprovider/descriptionparentgroupIdcom.example/groupIdartifactIdSpringCloudDiscoveryDemo/artifactIdversion0.0.1-SNAPSHOT/version/parentbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.8.1/versionconfigurationsource17/sourcetarget17/targetencodingUTF-8/encoding/configuration/pluginplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationmainClasscom.example.provider.ProviderApplication/mainClassskiptrue/skip/configurationexecutionsexecutionidrepackage/idgoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins/build /project消费者 注册中心的消费者的实现比生产者更为复杂一些首先因为消费者要通过调用生产者提供API来完成服务这其中就需要HTTP接口作为中间人那么就需要引入Spring Cloud OpenFeign其次为了实现负载均衡我们还需要添加客户端负载均衡器Spring Cloud LoadBalancer。 Spring Cloud OpenFeign: Spring Cloud OpenFeign 是 SpringCloud 生态系统中的一个组件它是基于 Netflix 的 Feign 库开发的用于简化和优化微服务架构中的服务间通信。Spring Cloud LoadBalancer: Spring Cloud 团队提供的一种客户端负载均衡器负载均衡(Load Balancer) :一种在多个服务实例之间分配负载和流量的技术目的是提高服务的整体性能和可靠性。 消费者创建步骤如下 1.子模块消费者Consumer 还是一样的配方 2.添加依赖 父模块添加OpenFegin与LoadBalance依赖 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId /dependency dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId /dependency父模块添加子模块说明 modulesmoduleprovider/modulemoduleconsumer/module /modules子模块添加父模块说明 parentgroupIdcom.example/groupIdartifactIdSpringCloudDiscoveryDemo/artifactIdversion0.0.1-SNAPSHOT/version /parent3.启动配置 spring:application:# 服务注册站点name: nacos-consumer#命名不能使用‘’早期SpringCloud不支持cloud:nacos:# Nacos认证信息discovery:username: nacospassword: nacos# Nacos 服务发现与注册配置其中子属性server-addr指定Nacos服务器主机和端口server-addr: localhost:8848namespace: public # 注册到nacos的指定namespace默认publicregister-enabled: false server:port: 8080 这里需要注意的是对于消费者而已我们需要把它的注册功能关闭因为消费者本身是调用服务而不提供服务所以没必要注册服务所以这里使用“register-enabled: false”将其关闭而且消费者生产者的服务注册站点名字配置上也不同方便管理 除此之外还有一点对于客户端来说他不再想服务端那样端口动态化因为客户端主要还是面向人的如果人要使用端口动态那么我要如何才能准确访问到呢所以客户端端口需要明确指定 4.开启OpenFegin 在消费者的启动类上加上注解EnableFeignClients SpringBootApplication EnableFeignClients public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}}创建消费者调用服务接口 Service FeignClient(name nacos-provider) public interface UserService {RequestMapping(/user/getInfo)public String getInfo(RequestParam(name) String name); }这里我们需要注意到的是FeignClient(name “nacos-provider”)就是告诉这个接口服务站点在这个位置 RequestMapping(“/user/getInfo”)而这一句注解则是告诉这个服务接口具体路由所以消费者的接口就可以通过路由访问调用到生产者的API了 6.调用服务API import com.example.consumer.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;RestController public class OrderController {Autowiredprivate UserService userService;RequestMapping(/order)public String getInfo(){return userService.getInfo( Spring Cloud);} }7.实际效果 注册中心参数介绍 注册中心详情页 重要参数说明 分组注册服务所在组名默认是DEFAULT_GROUP保护阈值健康节点要求的最小百分比。用于在服务出现不健康实例时阻止流量过度向少量健康实例集中保护服务的整体可用性。保护闻值应设置为一个0到1之间的浮点数默认值为0。当集群中的健康实例占比小于设置的保护闻值时就会触发闻值保护功能。触发保护闻值后Nacos会将全部实例(健康实例非健康实例)返回给调用者虽然可能会损失一部分流量但能保证集群中剩余的健康实例能正常工作。服务路由类型: 用于实现不同的路由需求常见的路由类型有以下两种: none默认路由基于权重的轮询负载均衡路由策略0label标签路由相同标签的实例会被聚合为一个集群不同标0签则实现流量隔离。 实例 临时实例: Nacos 中的实例分为临时实例和永久实例(也叫持久实例)临时实例的生命周期和服务的运行周期相同服务停止运行Nacos 中就会将临时实例删除;永久示例即时程序终止也会保留在Nacos 中。在配置文件中通过:spring.cloud.nacos.discovery.ephemeraltrue 设置 权重用于实现负载均衡取值范围0到10000数值越大权重越大负载均衡被分配的概率也就越高。设置为0的时候表示下线 label 标签实现就近访问官方实现: https://nacos.io/zh-cn/blog/cmdb.html 民间实现: https://blog.csdn.net/lr309283175/article/details/116030428 健康检测机制 Nacos中的健康检测机制是用来检查服务健康状态的只有健康的节点才会被服务消费端调用这样才能保证程序稳定、正常的运行。Nacos中提供了两种健康检测的机制: 客户端主动上报(健康状态的) 机制服务器端反向探测(健康状态的) 机制 举个简单的例子 面对灾害对于被困人ta需要主动求助“救救我救救我”而对于搜救员是“你在哪你在哪”的反向询问确认 所以就是说客户端每隔一段时间跟服务端上报状态而服务端则通过反向探测来确定客户端是否健康 所以这两种机制时间上是对应两个服务实例 临时实例对应客户端主动上报状态 永久实例反向探测客户端状态 END 希望对你有帮助