判断网站到期,网络端游游戏排行榜,wordpress如何接入h5,网站常用的一种js幻灯片微服务的注册中心
注册中心可以说是微服务架构中的通讯录#xff0c;它记录了服务和服务地址的映射关系 。在分布式架构中#xff0c; 服务会注册到这里#xff0c;当服务需要调⽤其它服务时#xff0c;就从这里找到服务的地址#xff0c;进行调用。 注册中心…微服务的注册中心
注册中心可以说是微服务架构中的通讯录它记录了服务和服务地址的映射关系 。在分布式架构中 服务会注册到这里当服务需要调⽤其它服务时就从这里找到服务的地址进行调用。 注册中心的主要作用
服务注册中心下称注册中心是微服务架构⾮常重要的⼀个组件在微服务架构⾥主要起到了协调者 的⼀个作⽤。注册中心⼀般包含如下⼏个功能
服务发现 服务注册/反注册保存服务提供者和服务调⽤者的信息 服务订阅/取消订阅服务调⽤者订阅服务提供者的信息最好有实时推送的功能 服务路由可选具有筛选整合服务提供者的能⼒。服务配置 配置订阅服务提供者和服务调⽤者订阅微服务相关的配置 配置下发主动将配置推送给服务提供者和服务调⽤者服务健康检测
检测服务提供者的健康情况
常见的注册中心
**Zookeeper **
zookeeper它是⼀个分布式服务框架是Apache Hadoop 的⼀个⼦项目它主要是⽤来解决分布式应用中经常遇到的⼀些数据管理问题如统⼀命名服务、状态同步服务、集群管理、分布式应⽤配置项 的管理等。简单来说zookeeper⽂件系统监听通知机制。
**Eureka **
Eureka是在Java语⾔上基于Restful Api开发的服务注册与发现组件Springcloud Netflix中的重要组件 **Consul **
Consul是由HashiCorp基于Go语⾔开发的⽀持多数据中心分布式⾼可⽤的服务发布和注册服务软件 采用Raft算法保证服务的⼀致性且⽀持健康检查。
**Nacos **
Nacos是⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是注册中⼼心 配置中心的组合提供简单易⽤的特性集帮助我们解决微服务开发必会涉及到的服务注册与发现服务配置服务管理等问题。 Nacos 还是 Spring Cloud Alibaba 组件之⼀负责服务注册与发现。 Home · Netflix/eureka Wiki · GitHub
在Euraka的GitHub上宣布Eureka 2.x闭源。
这意味着如果开发者继续使⽤作为 2.x 分⽀上现
有⼯作 repo ⼀部分发布的代码库和⼯件则将自负风险。
Nacos替换方案
Nacos简介
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了⼀组简单易用的特性集帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 nacos的作⽤就是⼀个注册中心用来管理注册上来的各个微服务。
Nacos实战入门
我们就在现有的环境中加入nacos并将我们的两个微服务注册上去。
搭建nacos环境
①安装nacos
下载地址: https://github.com/alibaba/nac os/releases
下载zip格式的安装包然后进⾏解压缩操作
nacos.rar
②启动nacos
#切换⽬录 cd nacos/bin
#命令启动 startup.cmd -m standalone 或者直接双击startup.cmd运行 ③访问nacos
打开浏览器输入http://localhost:8848/nacos即可访问服务
默认密码是nacos/nacos 将订单微服务注册到nacos
**开始修改 shop-product 模块的代码 将其注册到nacos服务上 **
①在pom.xml中添加nacos的依赖
!-- nacos服务注册,服务发现--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency②在主类上添加EnableDiscoveryClient注解
package com.stringzhua.shop_order;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;SpringBootApplication
EnableDiscoveryClient//开启nacos服务注册
public class ShopOrderApplication {public static void main(String[] args) {SpringApplication.run(ShopOrderApplication.class, args);}Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}③在application.yml中添加nacos服务的地址
server:port: 8091
spring:application:name: service-orderdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql:///shop?serverTimezoneAsia/ShanghaiuseUnicodetruecharacterEncodingutf-8useSSLtrueusername: rootpassword: 12345678cloud:nacos:discovery:server-addr: 127.0.0.1:8848④启动服务 观察nacos的控制⾯板中是否有注册上来的订单微服务 将商品微服务注册到nacos
开始修改 shop-product 模块的代码 将其注册到nacos服务上
①在pom.xml中添加nacos的依赖
!-- nacos服务注册,服务发现--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency②在主类上添加EnableDiscoveryClient注解
package com.stringzhua.shop_product;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;SpringBootApplication
EnableDiscoveryClient//开启nacos服务注册
public class ShopProductApplication {public static void main(String[] args) {SpringApplication.run(ShopProductApplication.class, args);}}③在application.yml中添加nacos服务的地址
server:port: 8081
spring:application:name: service-productdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql:///shop?serverTimezoneAsia/ShanghaiuseUnicodetruecharacterEncodingutf-8useSSLtrueusername: rootpassword: 12345678cloud:nacos:discovery:server-addr: 127.0.0.1:8848④启动服务 观察nacos的控制⾯板中是否有注册上来的商品微服务 实现下单 项目完整源码
springcloud_alibaba_nacos.rar
Nacos配置管理
Nacos除了可以做注册中心同样可以做配置管理来使用
统一配置管理
当微服务部署的实例越来越多达到数十、数百时逐个修改微服务配置就会让⼈抓狂而且很容易出错。我们需要⼀种统⼀配置管理⽅案可以集中管理所有实例的配置。
Nacos⼀⽅面可以将配置集中管理另⼀方可以在配置变更时及时通知微服务实现配置的热更新。
在业界常见的服务配置中心有下⾯这些
Apollo是由携程开源的分布式配置中心。特点有很多比如配置更新之后可以实时生效支持灰度发布功能并且能对所有的配置进⾏版本管理、操作审计等功能提供开放平台API。 并且资料也写的很详细。Disconf是由百度开源的分布式配置中心。它是基于Zookeeper来实现配置变更后实时通知和生效的。SpringCloud Config这是Spring Cloud中带的配置中心组件。它和Spring是⽆缝集成使用起来非常方便并且它的配置存储⽀持Git。不过它没有可视化的操作界⾯配置的生效也不是实时的需要重启或去刷新。Nacos这是SpingCloud alibaba技术栈中的⼀个组件前⾯我们已经使⽤它做过服务注册中心。其实它也集成了服务配置的功能我们可以直接使⽤它作为服务配置中心。
在nacos中添加配置文件 注意项目的核⼼配置需要热更新的配置才有放到nacos管理的必要。基本不会变更的⼀些配置还是保 存在微服务本地比较好。
从微服务拉取配置
微服务要拉取nacos中管理的配置并且与本地的application.yml配置合并才能完成项⽬启动。 但如果尚未读取application.yml⼜如何得知nacos地址呢
因此spring引⼊了⼀种新的配置⽂件 bootstrap.yaml⽂件会在application.yml之前被读取流程如下 配置的实现步骤
引入nacos-config依赖
!-- nacos服务注册,服务发现--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency在商品和订单服务都添加坐标 添加bootstrap.yaml
不能使用原来的application.yml作为配置⽂件而是新建⼀个bootstrap.yml作为配置⽂件
配置文件优先级(由高到低):
bootstrap.properties - bootstrap.yml - application.properties - application.yml
spring:application:name: service-productcloud:nacos:config:server-addr: 127.0.0.1:8848 #nacos中⼼地址file-extension: yaml #配置⽂件格式profiles:active: dev # 环境标识开发环境在nacos中添加配置 测试 配置热更新
我们最终的目的是修改nacos中的配置后微服务中⽆需重启即可让配置⽣效也就是配置热更新。要实现配置热更新可以使用两种⽅式
配置中心添加配置
config:appName: 猫猫头env: dev方式一
在Value注⼊的变量所在类上添加注解RefreshScope RestController
RefreshScope//只需要在需要动态读取配置的类上添加此注解就可以
public class NacosConfigController01 {Value(${config.appName})private String appName;GetMapping(/config1)public String Config01() {return appName;}
}如果修改的话不需要重启服务直接在nacos配置中心修改即可 方式二
硬编码方式
RestController
public class NacosConfigController02 {Autowiredprivate ConfigurableApplicationContext applicationContext;GetMapping(config2)public String Config02() {return applicationContext.getEnvironment().getProperty(config.appName);}
}测试 配置共享 当配置越来越多的时候我们就发现有很多配置是重复的这时候就考虑可不可以将公共配置文件提取出来 同服务内配置共享
实现步骤:
新建⼀个以 spring.application.name 命名的配置⽂件然后将其所有环境的公共配置放在里面 新建⼀个名为service-product-test.yaml配置存放测试环境的配置 新建⼀个名为service-product-dev.yaml配置存放开发环境的配置 在两个环境⽂件中配置独有信息 添加测试⽅法
Value(${config.env})
private String env;//同一微服务的不同环境下共享配置
GetMapping(/env)
public String nacosConfingTest2() {return env;
}测试dev 测试test 不同微服务共享配置
不同服务之间实现配置共享的原理类似于⽂件引入就是定义⼀个公共配置然后在当前配置中引入
在nacos中定义⼀个DataID为datasource.yaml的配置用于所有微服务共享 spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql:///shop?serverTimezoneAsia/ShanghaiuseUnicodetruecharacterEncodingutf-8useSSLtrueusername: rootpassword: 12345678修改bootstrap.yaml
spring:application:name: service-productcloud:nacos:config:server-addr: 127.0.0.1:8848 #nacos中心地址file-extension: yaml # 配置文件格式shared-dataids: datasource.yaml # 配置要引⼊的配置refreshable-dataids: datasource.yaml # 配置要实现动态配置刷新的配置profiles:active: dev # 环境标识开发环境启动商品微服务进⾏测试 配置共享的优先级
bootstrap.properties - bootstrap.yml - application.properties - application.yml 服务名-proflie.yaml - 服务名称.yaml - 本地配置.yaml