Spring Cloud Alibaba Nacos 初探

什么是Nacos?
  • 官方文档
  • 概括:服务发现、服务配置、服务共享与管理等
解决什么问题?
  • 服务直接如何相互调用
  • 服务的配置管理
服务架构
Spring Cloud Alibaba Nacos 初探_第1张图片
服务架构图
搭建Nacos Server
  • 下载 nacos-server 安装包
  • 安装
  • 浏览器执行: http://localhost:8848/nacos
    Spring Cloud Alibaba Nacos 初探_第2张图片
    效果
编写Client代码,实现服务间调用
  • 创建SpringBoot项目 (user-server)
  • 引入依赖
    
      
          org.springframework.boot
          spring-boot-starter-web
      
      
          org.springframework.boot
          spring-boot-starter-test
          test
      
      
          com.alibaba.cloud
          spring-cloud-starter-alibaba-nacos-discovery
      
      
          net.logstash.logback
          logstash-logback-encoder
      
    
    
  • application.yml 配置
    # 配置服务端口
    server:
      port: 8801
    
    spring:
      # 配置服务名称
      application:
        name: user-server
      # 配置nacos注册中心地址
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
    
  • 以同样的步骤创建一个 order-server
  • 启动服务,在nacos页面可以看到两个服务已经注册
    Spring Cloud Alibaba Nacos 初探_第3张图片
    Nacos Server Web UI
  • order-server 提供一个API
    # order-server
    @RestController
    @RequestMapping("/orders")
    public class OrderController {  
        @GetMapping("/{orderId}")
        public String getOrderById(@PathVariable String orderId) {
            return orderId + " - orders";
        }
    }
    
  • user-server 使用 RestTemplate 实现调用 order-server
    # user-server
    @Service
    public class UserServiceImpl implements UserService {
        @Autowired
        private DiscoveryClient discoveryClient;
        @Autowired
        private RestTemplate restTemplate;
    
        @Override
        public String getUserOrderById(String orderId) {
            List instances = discoveryClient.getInstances("order-server");
            String userServerAddress = instances.stream()
                  .map(ServiceInstance::getUri)
                  .findFirst().orElseThrow(() -> new RuntimeException("No Instances."))
                  .toString();
    
            return restTemplate.getForObject(
                    userServerAddress + "/orders/{orderId}",
                    String.class,
                    orderId);
         }
    }
    
  • 为了方便测试,这里使用junit,停掉已经启动的 user-server
    @Autowired
    private UserService userService;
    
    @Test
    public void getOrderById() {
        String order = userService.getUserOrderById("E000202003170001");
        System.out.println(order);
    }
    
  • 结果
    Spring Cloud Alibaba Nacos 初探_第4张图片
    结果
到此 Nacos Server 搭建完成,Nacos Client 注册完成

你可能感兴趣的:(Spring Cloud Alibaba Nacos 初探)