Spring Cloud Alibaba (1) - Nacos

11,951 阅读2分钟

代码地址:github.com/toyranger/l…

1. 基本组件

Spring Cloud Alibaba 基本组件:

  • Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性
  • Nacos:动态服务发现、配置管理和服务管理平台
  • RocketMQ:分布式消息系统,基于高可用分布式集群,提供低延时、高可靠的消息发布和订阅
  • Dubbo:高性能Java RPC框架
  • Seata:高性能微服务分布式事务解决方案

Nacos:

  1. 服务发现与注册
  2. 分布式配置中心

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