– SpringCloud Alibaba –
1、什么是SpringCloudAlibaba
Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过SpringCloud编程模型轻松使用这些组件来开发分布式应用服务。依托Spring Cloud Alibaba,您只需要添加一些注解和少 量配置,就可以将Spring Cloud应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
官网: https://gitee.com/johnlilijun/spring-cloud-alibaba
2、SpringCloud的痛点与pringCloudAlibaba的优势
-
SpringCloud的几大痛点:
SpringCloud部分组件停止维护和更新,给开发带来不便;SpringCloud部分环境搭建复杂,没有完善的可视化界面,我们需要大量的二次开发和定制;SpringCloud配置复杂,难以上手,部分配置差别难以区分和合理应用 -
SpringCloud Alibaba的优势:
阿里使用过的组件经历了考验,性能强悍,设计合理,现在开源出来成套的产品搭配完善的可视化界面给开发运维带来极大的便利,搭建简单,学习曲线低。 -
结合SpringCloud Alibaba我们最终的技术搭配方案:
SpringCloud Alibaba-Nacos:注册中心(服务发现/注册)
SpringCloudAlibaba . Nacos:配置中心(动态配置管理)
SpringCloud- Ribbon:负载均衡
SpringCloud- Feign:声明式HTTP客户端(调用远程服务)
SpringCloudAlibaba - Sentinel:服务容错(限流、降级、熔断)
SpringCloud - Gateway: API 网关(webflux 编程模式)
SpringCloud- Sleuth:调用链监控
SpringCloud Alibaba-Seata:原Fescar,即分布式事务解决方案
3、SpringCloudAlibaba依赖配置
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
4、Nacos注册中心的使用步骤
-
引入依赖
<!--注册中心/发现--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
-
下载NacosServer注册中心
https://github.com/alibaba/nacos/releases
-
启动nacos-server
- 双击bin中的startup.cmd文件
- 访问http://localhost:8848/nacos/
- 使用默认的nacos/nacos进行登录
-
在应用的application.properties配置文件中配置NacosServer地址
#配置注册中心 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 application: name: yunmall-coupon
-
在主程序添加注解@EnableDiscoveryClient
@EnableDiscoveryClient @SpringBootApplication public class YunmallMemberApplication { public static void main(String[] args) { SpringApplication.run(YunmallMemberApplication.class, args); } }
5、使用openfeign进行远程调用
简介
Feign是一个声明式的HTTP客户端,它的目的就是让远程调用更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。
Feign整合了Ribbon (负载均衡)和Hystrix(服务熔断),可以让我们不再需要显式地使用这两个组件。
-
引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
-
编写远程调用接口
package com.mall.yunmall.member.feign; import com.mall.common.utils.R; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.RequestMapping; /** * 这是一个声明式的远程调用 * 告诉SpringCloud这个接口需要调用远程服务 */ @FeignClient("yunmall-coupon") public interface CouponFeignService { @RequestMapping("/coupon/coupon/member/list") public R membercoupons(); }
-
开启远程调用功能
@EnableFeignClients(basePackages = "com.xx.xx.xx.feign") @EnableDiscoveryClient @SpringBootApplication public class YunmallMemberApplication { public static void main(String[] args) { SpringApplication.run(YunmallMemberApplication.class, args); } }
6、Nacos配置中心的使用步骤
-
引入依赖
<!--配置中心/配置管理--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
-
在应用的resources/bootstrap.properties 配置文件中配置Nacos Server地址;
spring.application.name=nacos-config-example spring.cloud.nacos.config.server-addr=127.0.0.1:8848
-
在Nacos
配置中心
→配置管理
→配置列表
→+
新增配置配置Data Id:xxxxxx.properties,选择配置格式
-
动态配置
@RefreshScope:动态获取并刷新配置
@Value("${配置项的名}"):获取到配置。
注意:如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置
7、Nacos命名空间、配置集、配置集ID、配置分组的基本概念
-
命名空间
默认:public(保留空间);默认新增的所有配置都在public空间
配置隔离:
1)利用命名空间来做环境隔离;
2)每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置;
#配置使用哪个命名空间 spring.cloud.nacos.config.namespace=cd26aa40-495f-429b-b501-af21c068a2ce
-
配置集:所有的配置的集合;
-
配置集ID:类似配置文件名;
-
配置分组
默认Group:DEFAULT_GROUP;
在每个微服务自己的命名空间里,使用配置分组区分环境;
#修改配置分组 spring.cloud.nacos.config.group=prod
8、同时加载多个配置集
1)、微服务任何配置信息,任何配置文件都可以放在配置中心中
2)、在bootstrap.properties写上需要配置中心的哪些配置文件即可
3)、以前SpringBoot任何方法从配置文件中获取配置信息,都能使用
4)、配置中心有的优先使用配置中心中的
#配置使用哪个命名空间
spring.cloud.nacos.config.namespace=05fd85ec-7a12-4c45-ba60-f5ef9389b227
spring.cloud.nacos.config.group=prod
#示例
#加载配置1
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true
#加载配置2
spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true
#加载配置3
spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true