SpringCloud
微服务架构
创建SpringCloud项目
创建父项目
使用spring initializr创建项目的时候不用选择任何的依赖,直接创建就好,后面再按照需求添加。
修改pom.xml打包方式为pom<packaging>pom</packaging>
修改父项目springboot版本以及添加springcloud依赖,spring boot使用2.3.12.RELEASE版本,spring cloud alibaba使用2.2.9.RELEASE版本,spring cloud 使用Hoxton.SR12版本
<dependencyManagement>
<dependencies>
<!--Spring Cloud Alibaba版本管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.9.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring boot 版本管理-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring Cloud 版本管理-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR12</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>创建子项目
创建子项目的时候可以创建maven项目,创建spring项目的话还会重新添加依赖
Nacos
Nacos是一个更易于构建云原生应用的服务发现、服务配置和服务管理平台,即注册中心+配置中心+服务管理的一个平台。
Nacos关键特性
服务发现和服务健康检测
动态配置服务
动态DNS服务
服务及元数据管理
Nacos注册中心
注册中心CAP特性:C一致性,A可用性,P分区容错性。任何注册中心都没办法同时满足这三个指标。
Nacos Server部署
需要下载并启动Nacos服务,然后再将服务注册到Nacos之中。
下载Nacos要注意下载的版本和spring cloud alibaba版本所对应的版本一致,暂时使用windows版本学习。
下载完成之后进行解压,编辑启动cmd文件,将MODE修改为standalone,配置为单独启动。
修改完之后就可以启动nacos了,和dubbo一样,访问 http://192.168.139.1:8848/nacos/index.html 就可以访问nacos的管理界面。
Nacos Client搭建
添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>在配置文件中添加配置信息
spring:
application:
name: yunyao
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: public启动服务,服务就被添加到nacos之中了
调用服务
调用服务需要用到一个RestTemplate类的bean,在启动类中添加一个RestTemplate的bean
@Bean
@LoadBalanced//添加负载均衡
RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate = builder.build();
return new RestTemplate();
}在使用时自动注入这个bean,使用这个bean调用远程服务,url使用注册的服务名
@Autowired
RestTemplate restTemplate;
@GetMapping("/test")
public String test(){
return restTemplate.getForObject("http://yunyao/sms/token",String.class);
}注册中心配置项
Nacos配置中心
配置中心使用
在nacos界面中创建配置文件
创建一个bootstrap.yaml配置文件,用于设置necos配置中心,在bootstrap中配置注册中心的设置
spring:
cloud:
nacos:
config:
server-addr: 10.42.97.22:8848
namespace: 23ea8844-251e-4cee-ab35-234ad10101a0
file-extension: yaml
# 配置文件优先级
ext-config:
- data-id: yunyao-dev.yaml
refresh: true
- data-id: jwt-dev.yaml
refresh: true使用ext-config可以添加多个配置文件,注意要配置refresh
Feign
Feign是声明式、模板化的HTTP客户端,声明在服务消费端,整合了负载均衡器,能够更加便捷优雅的调用HTTP API。
Spring Cloud Alibaba 提供了 Open Feign 代替闭源了的 Feign,对Feign进行了增强,使其支持Spring MVC注解,另外还整合了Ribbon和Nacos,从而使Feign的使用更加方便。
整合Open Feign
在pom文件中添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>创建与调用服务相同的接口,注意,服务名要准确,服务路径也要和调用目标的路径相同
@FeignClient(name = "log-service", path = "/log")
public interface LogFeignService {
@PostMapping("/send")
ObjectResult sendLogMsg(@RequestBody SendLogReq logMsg);
}别忘了在启动类中添加@EnableFeignClients注解
之后再服务中调用接口的方法就好了