版本适配spring cloud alibaba 是 对 springcloud的标准实现,以微服务为核心的整体解决方案
https://github.com/alibaba/spring-cloud-alibaba/wiki
对应的springboot版本
创建一个父maven项目,修改package
maven不用利用parent形成继承关系
springboot初始化阿里云com.alibaba.cloud spring-cloud-alibaba-dependencies 2.2.5.RELEASE pom import org.springframework.boot spring-boot-starter-parent 2.3.11.RELEASE pom import org.springframework.cloud spring-cloud-dependencies Hoxton.SR8 pom import
https://start.aliyun.com
Nacos一个更易于构建云原生应用的动态服务发现(Nacos Discovery),服务配置(Nacos Config)和服务管理平台
心跳机制注册中心 + 配置中心 + 服务管理平台
服务发现和服务健康监测动态配置服务动态DNS服务服务及其元数据管理
我们的服务会在本地维护一个定时任务,比如说没5s发送一个心跳到注册中心,注册中心一但超过了5s没有收到心跳,就认为当前服务已经挂掉了,并把当前状态修改为down(已下线)。。如果超过了30s,都没有获取到服务的心跳的话,就会把这个服务从注册表中剔除掉。。。心跳机制,就能将已经宕机的服务剔除出去。。
如果这个服务停止了,会调用这个注销接口,把这个服务从注册表中剔除出去
在调用的时候,也会有一个定时任务 ,实时的去调用这个服务获取接口,并实时的拉取到最新的服务列表,拉取的时候只会获取到健康状态的服务。。获取到了之后会用缓存保存起来(每次都去获取性能不好),
。。。
负载均衡器 —》 负载均衡
- 下载Nacos 。。根据上面的版本适配下载对应的版本
https://github.com/alibaba/nacos/releases/tag/1.4.1
设置成单机之后启动
用户名:nacos
密码: nacos
创建两个子模块 order 和 stock
依赖
org.springframework.boot spring-boot-starter-web com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
配置文件
server:
port: 8010
spring:
application:
name: order-service # 服务的名字
cloud:
nacos:
server-addr: 127.0.0.1:8848 # nacos 服务地址
discovery:
username: nacos # 登录到 nacos 平台上的用户名称,,默认nacos
password: nacos
namespace: public # 服务存在命名空间 隔离不同的服务实例 dev开发环境 或 pro生产环境。。默认public
订单
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
RestTemplate restTemplate;
@RequestMapping("/add")
public String add(){
String msg = restTemplate.getForObject("http://stock-service/stock/reduce", String.class);
return "hello world+ "+msg;
}
}
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class,args);
}
@Bean
@LoadBalanced // nacos 本身是没有办法去解析服务名称对应的服务地址,他需要依靠负载均衡去解析服务器名称,调用对应地址
RestTemplate restTemplate(RestTemplateBuilder builder){
// 构造器模式 可以设置读取超时时间,连接超时时间
RestTemplate restTemplate = builder.build();
return restTemplate;
}
}
库存
@RestController
@RequestMapping("/stock")
public class StockController {
@Value("${server.port}")
String port;
@RequestMapping("/reduce")
public String reduce(){
return "库存减少 "+port;
}
}
克隆相同的服务:
服务注册
服务心跳: 定时任务往注册中心发送心跳
服务同步: 服务集群的时候会自动同步????Nacos Server集群之间会相互同步服务实例,用来保证服务信息的一致性
服务发现
服务健康检查
CAP C一致性 A可用性 P分区容错性



