唐山做网站哪家公司好,商标查询网,安徽 两学一做 网站,支付通道网站怎么做目录 1.微服务的注册中心
1.1 注册中⼼的主要作⽤
1.2 常⻅的注册中⼼
2.nacos简介
2.1 nacos实战⼊⻔
2.2.1 搭建nacos环境
2.2.2 将商品微服务注册到nacos
3.服务调⽤Ribbon⼊⻔
3.1 Ribbon概述
3.1.1 什么是Ribbon
3.1.2 Ribbon的主要作⽤
3.2.2 ⼯程改造
4.服务…目录 1.微服务的注册中心
1.1 注册中⼼的主要作⽤
1.2 常⻅的注册中⼼
2.nacos简介
2.1 nacos实战⼊⻔
2.2.1 搭建nacos环境
2.2.2 将商品微服务注册到nacos
3.服务调⽤Ribbon⼊⻔
3.1 Ribbon概述
3.1.1 什么是Ribbon
3.1.2 Ribbon的主要作⽤
3.2.2 ⼯程改造
4.服务调⽤Ribbon⾼级
4.1 负载均衡概述
4.1.1 什么是负载均衡
4.2 基于Ribbon实现负载均衡
5.Nacos配置管理
5.1 统⼀配置管理
5.1.1 在nacos中添加配置⽂件
5.1.2 从微服务拉取配置
5.2 配置热更新
5.2.1.⽅式
5.3 配置共享
5.3.1 同服务内配置共享
5.3.2 不同微服务共享配置 1.微服务的注册中心
注册中心可以说是微服务架构中的”通讯录“ 它记录了服务和服务地址的映射关系。在分布式架构中 服务会注册到这⾥当服务需要调⽤其它服务时就这⾥找到服务的地址进⾏调⽤。
1.1 注册中⼼的主要作⽤
服务注册中⼼下称注册中⼼是微服务架构⾮常重要的⼀个组件在微服务架构⾥主要起到了协调者 的⼀个作⽤。注册中⼼⼀般包含如下⼏个功能 服务发现 服务注册/反注册保存服务提供者和服务调⽤者的信息 服务订阅/取消订阅服务调⽤者订阅服务提供者的信息最好有实时推送的功能 服务路由可选具有筛选整合服务提供者的能⼒。 服务配置 配置订阅服务提供者和服务调⽤者订阅微服务相关的配置 配置下发主动将配置推送给服务提供者和服务调⽤者 服务健康检测 检测服务提供者的健康情况
1.2 常⻅的注册中⼼
Zookeeper
zookeeper它是⼀个分布式服务框架是Apache Hadoop 的⼀个⼦项⽬它主要是⽤来解决分布式应 ⽤中经常遇到的⼀些数据管理问题如统⼀命名服务、状态同步服务、集群管理、分布式应⽤配置项 的管理等。简单来说zookeeper⽂件系统监听通知机制。
Eureka
Eureka是在Java语⾔上基于Restful Api开发的服务注册与发现组件Springcloud Netflix中的重要组 件 Consul Consul是由HashiCorp基于Go语⾔开发的⽀持多数据中⼼分布式⾼可⽤的服务发布和注册服务软件 采 ⽤Raft算法保证服务的⼀致性且⽀持健康检查。
Nacos
Nacos是⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是 注册中⼼ 配置中⼼的组合提供简单易⽤的特性集帮助我们解决微服务开发必会涉及到的服务注册 与发现服务配置服务管理等问题。 Nacos 还是 Spring Cloud Alibaba 组件之⼀负责服务注册与 发现。 2.nacos简介
Nacos 致⼒于帮助您发现、配置和管理微服务。Nacos 提供了⼀组简单易⽤的特性集帮助您快 速实现动态服务发现、服务配置、服务元数据及流量管理。 nacos的作⽤就是⼀个注册中⼼⽤ 来管理注册上来的各个微服务
2.1 nacos实战⼊⻔
我们就在现有的环境中加⼊nacos并将我们的两个微服务注册上去。
2.2.1 搭建nacos环境
第1步: 安装nacos
第2步: 启动nacos
#切换⽬录
cd nacos/bin
#命令启动
startup.cmd -m standalone
或者直接双击
startup.cmd
运⾏
第3步: 访问nacos Plain Text 打开浏览器输⼊http://localhost:8848/nacos即可访问服务 默认密码是nacos/nacos
2.2.2 将商品微服务注册到nacos
开始修改 shop-product 模块的代码 将其注册到nacos服务上
1 在pom.xml中添加nacos的依赖 !--nacos客户端--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency
2 在主类上添加EnableDiscoveryClient注解 3 在application.yml中添加nacos服务的地址
server:port: 8081
spring:application:name: service-productdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/db_mybatis?serverTimezoneUTCusername: rootpassword: wwt15991178033#服务地址cloud:nacos:discovery:server-addr: 127.0.0.1:8848
4 启动服务 观察nacos的控制⾯板中是否有注册上来的商品微服务 5.修改订单微服务controller RequestMapping(/order/prod/{pid})public Order order(PathVariable(pid) Integer pid){//从nacos中获取服务地址ServiceInstance serviceInstance discoveryClient.getInstances(service-product).get(0);String url serviceInstance.getHost() : serviceInstance.getPort();//调用商品微服务查询商品信息Product product restTemplate.getForObject(http://url/product/pid,Product.class);//下单常见订单Order order new Order();order.setUid(1);order.setUsername(测试用户1);order.setPid(pid);order.setPname(product.getPname());order.setPprice(product.getPprice());order.setNumber(1);orderService.createOrder(order);return order;}
3.服务调⽤Ribbon⼊⻔
经过以上的学习已经实现了服务的注册和服务发现。当启动某个服务的时候可以通过HTTP的形式 将信息注册到注册中⼼并且可以通过SpringCloud提供的⼯具获取注册中⼼的服务列表。但是服务之间的调⽤还存在很多的问题如何更加⽅便的调⽤微服务多个微服务的提供者如何选择如何负载均衡等。
3.1 Ribbon概述
3.1.1 什么是Ribbon
是 Netflixfa 发布的⼀个负载均衡器有助于控制 HTTP 和 TCP客户端⾏为。在 SpringCloud 中 Nacos⼀般配合Ribbon进⾏使⽤Ribbon提供了客户端负载均衡的功能Ribbon利⽤从Nacos中读取到 的服务信息在调⽤服务节点提供的服务时会合理的进⾏负载。 在SpringCloud中可以将注册中⼼和Ribbon配合使⽤Ribbon⾃动的从注册中⼼中获取服务提供者的列 表信息并基于内置的负载均衡算法请求服务。
3.1.2 Ribbon的主要作⽤ 1服务调⽤ 基于Ribbon实现服务调⽤ 是通过拉取到的所有服务列表组成服务名-请求路径的映射关系。借助 RestTemplate 最终进⾏调⽤ 2负载均衡 当有多个服务提供者时Ribbon可以根据负载均衡的算法⾃动的选择需要调⽤的服务地址
3.2 基于Ribbon实现订单调⽤商品服务 3.2.1 坐标依赖 在springcloud提供的服务发现的jar中以及包含了Ribbon的依赖。所以这⾥不需要导⼊任何额外的坐标
3.2.2 ⼯程改造 1 服务提供者 控制台打印查询商品的信息 2 服务消费者 在创建RestTemplate⽅法 上添加 LoadBalanced 注解
EnableDiscoveryClient
SpringBootApplication
public class ShopOrderApplication {public static void main(String[] args) {SpringApplication.run(ShopOrderApplication.class, args);}BeanLoadBalanced//负载均衡public RestTemplate restTemplate(){return new RestTemplate();}
}通过服务名称消费使⽤
restTemplate .getForObject(http://商品服务名称/product/1 , Product.class);
RestController
public class OrderController {Autowiredprivate RestTemplate restTemplate;Autowiredprivate IOrderService orderService;RequestMapping(/order/prod/{pid})public Order order(PathVariable(pid) Integer pid){//通过restTemplate调用商品微服务String url service-product;Product product restTemplate.getForObject(http://url/product/ pid, Product.class);//下单常见订单Order order new Order();order.setUid(1);order.setUsername(测试用户1);order.setPid(pid);order.setPname(product.getPname());order.setPprice(product.getPprice());order.setNumber(1);orderService.createOrder(order);return order;}
}4.服务调⽤Ribbon⾼级
4.1 负载均衡概述
4.1.1 什么是负载均衡
在搭建⽹站时如果单节点的 web服务性能和可靠性都⽆法达到要求或者是在使⽤外⽹服务时经常 担⼼被⼈攻破⼀不⼩⼼就会有打开外⽹端⼝的情况通常这个时候加⼊负载均衡就能有效解决服务问 题。
负载均衡是⼀种基础的⽹络服务其原理是通过运⾏在前⾯的负载均衡服务按照指定的负载均衡算 法将流量分配到后端服务集群上从⽽为系统提供并⾏扩展的能⼒。 负载均衡的应⽤场景包括流量包、转发规则以及后端服务由于该服务有内外⽹个例、健康检查等功 能能够有效提供系统的安全性和可⽤性。
4.2 基于Ribbon实现负载均衡
Ribbon内置了多种负载均衡策略内部负责复杂均衡的顶级接⼝为 com.netflix.loadbalancer.IRule 实现⽅式如下 com.netflix.loadbalancer.RoundRobinRule 以轮询的⽅式进⾏负载均衡 com.netflix.loadbalancer.RandomRule 随机策略 com.netflix.loadbalancer.RetryRule 重试策略 com.netflix.loadbalancer.WeightedResponseTimeRule 权重策略。会计算每个服务的权重越⾼的被调⽤的可能性越⼤ com.netflix.loadbalancer.BestAvailableRule 最佳策略。遍历所有的服务实例过滤掉故障实例并返回请求数最⼩的实例返回 com.netflix.loadbalancer.AvailabilityFilteringRule 可⽤过滤策略。过滤掉故障和请 求数超过阈值的服务实例再从剩下的实⼒中轮询调⽤ ZoneAvoidanceRule以区域可⽤的服务器为基础进⾏服务器的选择。使⽤Zone对服务器进⾏分类这个Zone可以理解为⼀个机房、⼀个机架等。⽽后再对Zone内的多个服务做轮询
⾃定义负载均衡策略
⽅式1定义⼀个新的IRule(全局设置) Beanpublic IRule randomRule(){return new RandomRule();}
⽅式2在yml配置⽂件中配置局部设置 #需要调⽤的微服务名称service-product:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
5.Nacos配置管理
5.1 统⼀配置管理
5.1.1 在nacos中添加配置⽂件 注意项⽬的核⼼配置需要热更新的配置才有放到nacos管理的必要。基本不会变更的⼀些配置还是保 存在微服务本地⽐较好。
5.1.2 从微服务拉取配置
bootstrap.yaml⽂件会在application.yml之前被读取 配置实现步骤
1引⼊nacos-config依赖
dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-config/artifactId
/dependency
2添加bootstrap.yaml 不能使⽤原来的application.yml作为配置⽂件⽽是新建⼀个bootstrap.yml作为配置⽂件
配置⽂件优先级(由⾼到低):
bootstrap.properties - bootstrap.yml - application.properties - application.yml spring:application:name: service-productcloud:nacos:config: YAMLserver-addr: 127.0.0.1:8848 #nacos中⼼地址file-extension: yaml # 配置⽂件格式profiles:active: dev #环境标识开发环境
4 在nacos中添加配置
5.2 配置热更新
我们最终的⽬的是修改nacos中的配置后微服务中⽆需重启即可让配置⽣效也就是配置热更新。 要实现配置热更新可以使⽤两种⽅式 配置中⼼添加配置:
config:
appName: product
5.2.1.⽅式
在Value注⼊的变量所在类上添加注解RefreshScope RestControllerRefreshScope//
只需要在需要动态读取配置的类上添加此注解就可以
public class NacosConfigController {Value(${config.appName})private String appName; GetMapping(/nacos-config-test1) public String nacosConfingTest1() {return appName;}
}
5.3 配置共享
当配置越来越多的时候我们就发现有很多配置是重复的这时候就考虑可不可以将公共配置⽂件 提取出来
5.3.1 同服务内配置共享
现步骤: 新建⼀个以 spring.application.name 命名的配置⽂件然后将其所有环境的公共配置放在⾥ ⾯ 2. 新建⼀个名为service-product-test.yaml配置存放测试环境的配置 3. 新建⼀个名为service-product-dev.yaml配置存放开发环境的配置 4. 在两个环境⽂件中配置独有信息
# 多配置⼀段
config:env: test
# 多配置⼀段
config:env: dev 5. 添加测试⽅法
RestController
RefreshScope//动态读取配置类
public class NocasConfigController {Value({config.appName})private String appName;GetMapping(/nacos-config-test1)public String nacosStringTest1(){return appName;}
} 5.3.2 不同微服务共享配置
不同服务之间实现配置共享的原理类似于⽂件引⼊就是定义⼀个公共配置然后在当前配置中引 ⼊ 在nacos中定义⼀个DataID为all-service.yaml的配置⽤于所有微服务共享
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql:///shopserverTimezoneUTCusername: root password: root cloud:nacos: discovery: server-addr: 127.0.0.1:8848 2. 修改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 3. 启动商品微服务进⾏测试
配置共享的优先级
当nacos、服务本地同时出现相同属性时优先级有⾼低之分 服务名-profile.yaml 服务名称.yaml 本地配置bootstrap application