跟学b站“图灵架构师”SpringCloudAlibaba入门教程
系统架构演化进程
单体应用架构>垂直应用架构>分布式架构>SOA架构>微服务架构
1、针对微服务架构:
如何管理众多小服务?(服务治理 注册中心[服务注册 发现 剔除])nacos
众多小服务之间如何通讯?(restfui rpc dubbo feign) ,httpclient(“url”,参数),springBoot restTemplate(“url”,参数), feign
客户端怎么访问小服务?(网关)gateway
小服务一旦出现问题,如何自处理?(容错)sentinel
小服务一旦出现问题,如何排错?(链路追踪)skywalking
2、SpringCloudAlibaba——以微服务为核心的分布式系统构建标准
spring cloud的标准实现
代码实践——环境搭建
IDEA版本:2021.1
一、新建parent项目
step1
step2
二、新建子服务:以maven方式创建
step1
step2
step3:可选parent项目
finish后得:
对子项目进行依赖导入:pom.xml文件中导入dependency,该依赖的引用是为了使用RestTemplate进行服务间调用。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
三、nacos未启用前——子服务之间调用
创建项目启动类——添加项目配置文件——创建接口调用服务
order和stock都以同样方式进行项目简单搭建:
step1
新建配置文件application.yaml,做简单配置,配置项目端口:
#order的服务端口
server:
port: 8080
#stock的服务端口
server:
port: 8011
step2
构建启动类
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class,args);
}
//暂时将RestTemplate的实例对象构建方法配置在启动类
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate = builder.build();
return restTemplate;
}
}
@SpringBootApplication
public class StockApplication {
public static void main(String[] args) {
SpringApplication.run(StockApplication.class,args);
}
}
step3
编写order服务接口调用stock服务
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
RestTemplate restTemplate;
@RequestMapping("/add")
public String add(){
String msg = restTemplate.getForObject("http://localhost:8011/stock/reduct", String.class);
System.out.println("下单成功!");
return "hello world"+msg;
}
}
@RestController
@RequestMapping("/stock")
public class StockController {
@RequestMapping("/reduct")
public String reduct(){
System.out.println("扣减库存");
return "扣减库存服务";
}
}
以上是服务之间调用最简单的实现,针对一调多,多调一的情况,这种单点调用很不方便,而且面对服务迁移、高并发的情况也有弊端,因此引入nacos-服务注册管理工具。
四、做一些配置
step1
nacos启动:
启动成功标志:
nacos客户端:
用户名和密码均默认:nacos
nacos-client的搭建:
1.添加子项目中application.yaml的配置文件;
2.添加子项目中pom.xml文件的依赖项;
application.yaml内容如下:
server:
port: 8021
# 应用名称 (nacos会将该名称当做服务名称)
spring:
application:
name: stock-service
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
username: nacos
password: nacos
pom.xml内容如下:
<!--nocos的服务注册发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--引入nacos config配置依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
step1–配置完毕后启动项目,控制台输出register finished,则该服务注册成功。
step2—nacos客户端查看服务列表,详情可查看监听端口,ip等信息
step3—关闭子服务,停止心跳反馈,触发nacos保护机制
服务之间调用:
一、模拟生产环境上存在多个相同服务,构建不同监听端口的多个服务
二、order-service中调用stock-service服务:由之前ip换为服务名称
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
RestTemplate restTemplate;
@RequestMapping("/add")
public String add(){
String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
System.out.println("下单成功!");
return "hello world"+msg;
}
}
三、将服务全部启动,可在nacos客户端看到服务集群
服务详情可查看具体监听端口:
四、查看服务调用情况:order-service以轮询的方式调用stock-service集群
nacos管理界面:
一、订阅者列表:
二、服务详情-保护阈值
可以通过application.yaml配置文件中设置为永久实例
注册中心配置项解析
采用配置文件application.yaml进行配置:
server:
port: 8021
# 应用名称 (nacos会将该名称当做服务名称)
# service: stock-service(也可以此配置)
spring:
application:
name: stock-service
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
username: nacos
password: nacos
# namespace: public # 相同特征的服务进行归类分组管理
ephemeral: false # 默认=true(临时实例) 当服务宕机 超过心跳 就会将实例剔除掉
#永久实例 哪怕宕机了也不会删除实例 当服务宕机 永远不会剔除掉
#group: 默认DEFAULT_GROUP,相同特征的服务进行归类分组管理
#weight: 通常要结合 安装 权重的负载均衡策略, 权重越高分配的流量就越大
#metadata: version=1 可以结合元数据做扩展
#cluster-name: XUSHU
#service: 默认取{spring.application.name}