1. 基本组件
Spring Cloud Alibaba 基本组件:
- Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性
- Nacos:动态服务发现、配置管理和服务管理平台
- RocketMQ:分布式消息系统,基于高可用分布式集群,提供低延时、高可靠的消息发布和订阅
- Dubbo:高性能Java RPC框架
- Seata:高性能微服务分布式事务解决方案
Nacos:
- 服务发现与注册
- 分布式配置中心
2. nacos 安装
可以使用docker-compose启动,我这里直接使用idea启动 按照官网的步骤下载解压编译,就可以运行成功,访问8848端口可以看到nacos server看板
3. 创建提供者,提供http服务
## 注解
@EnableDiscoveryClient
## pom.xml
<!-- spring cloud -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 这个依赖的版本没有被spring cloud的dependencies托管,我这里就没有用这个,感觉效果应该差不多
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>
-->
## application.yml
spring:
application:
name: service-provider
cloud:
nacos:
discovery:
# 如果使用docker-compose部署,这里就是docker容器地址
server-addr: 127.0.0.1:8848
server:
port: 8888
# 健康检查,判断实例是否健康 /actuator/nacos-discovery
management:
endpoints:
web:
exposure:
include: "*"
4. 创建消费者
pom和xml和提供者类似,只是服务名和端口号不同
5. 在消费者中使用Feign消费提供者服务
Feign和RestTemplate相比更强大
Feign是一个声明式的伪Http客户端,只需要创建一个接口并注解即可。Feign默认集成了Ribbon,也很好的兼容Nacos,默认实现了负载均衡效果。
## 注解
@EnableDiscoveryClient
## pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
## feign接口
@FeignClient(name = "service-provider")
public interface HelloService {
@GetMapping("/hello/{name}") //这里是提供者提供http服务的接口
String hello(@PathVariable String name);
}
报错及解决:
报错1:
Action:
Correct the classpath of your application so that it contains a single, compatible version of org.springframework.boot.actuate.health.CompositeHealthIndicator
解决:(https://github.com/spring-cloud/spring-cloud-netflix/issues/3410)
SpringBoot 2.2 will be supported by the upcoming Spring Cloud Hoxton Release Train. For now, with Greenwich, please use Boot 2.1.x
问题:
问题1:中划线不符合规定吗?但是没有影响使用,有知道的朋友可以指导一下原因 -- 已解决
Endpoint ID 'nacos-discovery' contains invalid characters, please migrate to a valid format.
Endpoint ID 'service-registry' contains invalid characters, please migrate to a valid format.
org.springframework.boot.actuate.endpoint.EndpointId
中划线和.都会打印warning