SpringCloud Alibaba提供的组件
Sentinel:服务流量控制和服务降级(熔断)
Nacos:服务注册与发现组件
Nacos:统一配置中心组件
事件驱动:事件驱动利用RocketMQ
Seata:分布式事务
Dubbo RPC:集成Dubbo实现服务间通信
实战开发时SpringCloud NetFlix + SpringCloud Spring + SpringCloud Alibaba 都用
1.服务注册中心 Nacos
2.服务间通信负载均衡 HttpRest a.RestTemplate+Ribbon b.Openfeign
3.服务流控与服务降级 Sentinel
4.服务网关组件 Gateway
5.统一配置中心组件 Nacos
SpringCloud Alibaba环境搭建
创建全局父项目
维护SpringCloud依赖 Hoxton.SR6
维护alibaba依赖 2.2.1.RELEASE
维护SpringBoot父项目 2.2.5.RELEASE
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dql</groupId>
<artifactId>springcloudalibaba_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 继承springboot父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<!-- 定义版本号-->
<properties>
<spring.cloud.version>Hoxton.SR6</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
</properties>
<!-- 维护依赖-->
<dependencyManagement>
<dependencies>
<!--维护springcloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 维护springcloud alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
NacosClient(Name Service Configuration Service)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
@SpringBootApplication
@EnableDiscoveryClient
public class NacosClientApplication {
public static void main(String[] args) {
SpringApplication.run(NacosClientApplication.class, args);
}
}
server:
port: 8989
spring:
application:
name: NACOSCLIENT
# nacos server
cloud:
nacos:
server-addr: 192.178.127.128:8848
服务间通信
ProductsController与UsersController通信
@RestController
public class ProductsController {
private static final Logger log = LoggerFactory.getLogger(ProductsController.class);
@Value("${server.port}")
private int port;
@GetMapping("/product")
public String product(Integer id) {
log.info("id: {}", id);
return "商品服务返回:" + id + "当前提供服务端口为:" + port;
}
}
@RestController
public class UsersController {
private static final Logger log = LoggerFactory.getLogger(UsersController.class);
@Value("${server.port}")
private int port;
@Autowired
private ProductClient productClient;
//推荐http rest方式通信
@GetMapping("/invoke")
public String invoke() {
log.info("调用用户服务。。。");
String result = productClient.product(21);
log.info("商品服务调用结果:{}", result);
return result;
}
}
引入openfeign依赖,实现负载均衡。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
PRODUCTS接口
@FeignClient("PRODUCTS")
public interface ProductClient {
@GetMapping("/product")
String product(@RequestParam("id") Integer id);
}
nacos统一配置中心
1.nacos管理配置文件方式是在自己所在服务器上形成一个版本库,因此不需要再创建远程版本库
2.nacos作为统一配置中心管理文件时,同样也是存在版本控制
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--nacos config client-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
application.yaml要改为bootstrap.yaml
spring:
cloud:
nacos:
config:
#告诉config server地址
server-addr: 192.178.127.128:8848
#告诉从哪个组进行配置获取
group: DEFAULT_GROUP
#告诉获取哪个配置文件
name: configclient-prod
#告诉获取文件后缀
file-extension: yaml
Controller
@RestController
@RefreshScope //允许远端配置修改自动刷新
public class DemoController {
private static final Logger log = LoggerFactory.getLogger(DemoController.class);
@Value("${user1}")
private String username;
@GetMapping("/demo")
public String demo() {
log.info("demo ok!!!!");
return "demo ok!!1 username:" + username;
}
}
nacos 持久化配置
nacos有内置的持久化数据库debrey,不能很好地展示数据。
持久化配置目前只支持mysql,版本要求:5.6.5+。
在nacos中更改配置
db.num是数据库编号
连接远程用户要开放远程登陆权限。
https://blog.csdn.net/weixin_48669196/article/details/120216180
改完之后可将配置存放在mysql中