Spring Cloud Alibaba Nacos 初探

什么是Nacos?
  • 官方文档
  • 概括:服务发现、服务配置、服务共享与管理等
解决什么问题?
  • 服务直接如何相互调用
  • 服务的配置管理
服务架构
2007033-5f9371d6023a8e98.png
服务架构图
搭建Nacos Server
编写Client代码,实现服务间调用
  • 创建SpringBoot项目 (user-server)
  • 引入依赖
    <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
      </dependency>
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      <dependency>
          <groupId>net.logstash.logback</groupId>
          <artifactId>logstash-logback-encoder</artifactId>
      </dependency>
    </dependencies>
    
  • application.yml 配置
    # 配置服务端口
    server:
      port: 8801
    
    spring:
      # 配置服务名称
      application:
        name: user-server
      # 配置nacos注册中心地址
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
    
  • 以同样的步骤创建一个 order-server
  • 启动服务,在nacos页面可以看到两个服务已经注册
    2007033-3b3f2e23d2b78cb3.png
    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<ServiceInstance> 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);
    }
    
  • 结果
    2007033-cc6f2acef7e5ab47.png
    结果
到此 Nacos Server 搭建完成,Nacos Client 注册完成
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值