一、Nacos
注册中心
1.引入Nacos
(1)安装 Nacos
下载 Nacos Server,然后执行bin目录下命令启动 Nacos Server
(2)修改 pom.xml 文件,引入 Nacos Discovery Starter
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
(3)在 application.properties 文件中配置 Nacos Server 地址,添加服务名称和端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=service-provider
server.port=18082
(4)在主启动类上添加 @EnableDiscoveryClient 注解,开启服务注册与发现功能
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
(5)登录http://127.0.0.1:8848/nacos,默认用户名密码都为 nacos,然后就可以在服务列表中看到注册好的服务
2.服务调用
(1)引入 OpenFeign 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
(2)编写 FeignClient 接口,标明要调用的服务(如 service-provider)
@FeignClient(name = "service-provider")
public interface EchoService {
@GetMapping(value = "/echo/{str}")
String echo(@PathVariable("str") String str);
}
(3)在主启动类中添加 @EnableFeignClients 注解,开启 Feign 功能,并扫描 FeignClient 接口
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.consumer.feign")
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
(4)在 Controller 中就可以通过 FeignClient 接口实例来调用远程服务
配置中心
1.使用
(1)引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
(2)在应用的 bootstrap.properties 文件中配置 Nacos Config 信息
spring.application.name=nacos-config-example
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
(3)在 Nacos 管理台添加配置文件
(4)读取 Nacos Config 中配置好的信息
@RefreshScope // 打开动态刷新功能
class SampleController {
@Value("${user.name}")
String userName;
@Value("${user.age}")
int age;
}
2.Nacos Config基本概念
(1)命名空间:配置隔离
默认配置在 public 下,可以通过修改 bootstrap.properties 文件信息来给不同服务指定不同的命名空间,其中namespace 值为 Nacos 管理台配置列表中的命名空间id(如 8ea132ucs-cd23-45kj-789acui1)。
spring.cloud.nacos.config.namespace=8ea132ucs-cd23-45kj-789acui1
(2)配置集:配置文件中的所有内容
(3)配置集ID:Nacos 管理台配置文件的 Data ID,也就是配置文件名称
(4)配置分组
默认分组为 DEFAULT_GROUP,也可以通过 bootstrap.properties 文件来修改分组。可以用来做环境隔离,如开发环境 dev、测试环境 test、生产环境 prod等
spring.cloud.nacos.config.group=prod
可以通过 bootstrap.properties 文件来加载多配置集
spring.cloud.nacos.config.namespace=8ea132ucs-cd23-45kj-789acui1
spring.cloud.nacos.config.group=prod # 默认读取prod分组配置信息
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 # 开启自动刷新
spring.cloud.nacos.config.ext-config[1].data-id=middleware.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true
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
二、SpringCloud-Gateway
作为API网关,主要功能有路由转发、权限校验、监控、限流等
1.引入
(1)在 pom.xml 文件中添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
(2)在 bootstrap.properties 文件中配置网关信息
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=service-gateway
server.port=88
(3)在 application.yml 文件中定义网关规则
spring:
cloud:
gateway:
routes:
- id: baidu_route
uri: https://www.baidu.com
predicates:
- Query=url,baidu
- id: qq_route
uri: https://www.qq.com
predicates:
- Query=url,qq
三、Sentinel
以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性
1.引入
(1)在 pom.xml 文件中添加依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.4</version>
</dependency>
(2)下载 Sentinel 控制台,并通过 java -jar sentinel-dashboard.jar --server.port=8833 启动控制台,指定好启动端口
(3)在 application.yml 文件中配置控制台信息
spring:
cloud:
sentinel:
transport:
port: 8719
dashboard: localhost:8080
2.监控
使用 Endpoint 特性进行流量监控,可以在控制台定义流控规则
(1)引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
(2)在 application.yml 文件中添加配置,暴露 endpoint,路径为 /actuator/sentinel
management.endpoints.web.exposure.include=*
3.自定义 Sentinel 拦截返回
@Configuration
public class SentinelConfig {
public SentinelConfig() {
WebCallbackManager.setUrlBlockHandler(new UrlBlockHandler() {
@Override
public void blocked(HttpRequestServlet request, HttpResponseServlet response, BlockException ex) throw IOException {
response.getWriter.write("limited");
}
});
}
}
4.熔断降级
(1)熔断 OpenFeign 远程调用,在调用方中的 application.properties 文件中添加熔断配置
feign.sentinel.enabled=true