Nacos入门指南之服务治理

我们在上一篇《Nacos入门指南之配置管理》介绍了使用Nacos进行配置信息的管理。下面将通过简单的示例说明如何完成服务的注册与发现。

Nacos Server

Nacos Server的部署方式,详见Nacos入门指南系列的另一篇《Nacos入门指南之部署Nacos服务端》

服务注册与发现

接下来我们要准备两个Spring Boot应用,分别作为服务的提供者和消费者,它们在启动时,在Nacos中进行注册,服务消费者根据服务名称调用服务提供者的接口,完成服务间调用。

服务提供者(Provider)

引入依赖

首先为我们的工程引入spring-cloud-starter-alibaba-nacos-discovery依赖。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.1.0.RELEASE</version>
</dependency>

应用配置

然后,在bootstrap.yaml配置文件中加入nacos server的地址。同时,在应用启动类中,需要添加@EnableDiscoveryClient注解,以启用服务发现特性,这样在应用启动时,当前应用便可以将自己注册到注册中心,为其他微服务提供服务。

spring:
  application:
    name: alibaba-nacos-service-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.3.201:8848

服务示例

接下来,我们添加一个获取当前日期时间的接口,以供服务消费者调用。

@RestController
public class TimeController {
    @GetMapping("/now")
    public String now() {
        return LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME);
    }
}

服务消费者(Consumer)

引入依赖

在服务消费者的pom.xml配置中,我们除了需要添加spring-cloud-starter-alibaba-nacos-discovery,还要加入openfeign的依赖,通过feign client来完成服务调用。

扫描二维码关注公众号,回复: 11473237 查看本文章
  <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      <version>2.1.0.RELEASE</version>
  </dependency>
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>

应用配置

与服务提供者相同,我们要在应用配置中添加nacos server的地址,并指定应用名称。

spring:
  application:
    name: alibaba-nacos-service-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.3.201:8848

服务示例

在服务消费者中,定义TimeService接口,通过@FeignClient注解指定该接口对应的服务名称。

@FeignClient("alibaba-nacos-service-provider")
public interface TimeService {
    @RequestMapping("/now")
    String now();
}

在Controller中便可以注入TimeService,通过方法调用的方式完成REST请求,极大的简化了开发。

@RestController
public class FeignController {
    private TimeService timeService;

    @Autowired
    public void setTimeService(TimeService timeService) {
        this.timeService = timeService;
    }

    @RequestMapping("/feign/now")
    public Map<String, String> now() {
        HashMap<String, String> map = new HashMap<>(2);
        map.put("userId", userId);
        map.put("time", timeService.now());
        return map;
    }
}

验证

分别启动Provider和Consumer,查看Nacos Server控制台,在服务管理->服务列表中可以看到我们的服务已经被注册。
在这里插入图片描述
我们试着访问服务消费者的接口,可以看到其中的time字段其实是从服务提供者获取的。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ldjjbzh626/article/details/105084613