SpringCloud之Nacos注册中心

705 阅读2分钟

SpringCloud之Nacos注册中心

上一节中,我们已经搭建完nacos的环境,接下来就是代码中引用它了。

服务提供者

现在我们创建一个springboot项目,这个项目作为服务提供端。这个项目向注册中心提供服务接口,供客户端来调用。

首先,就是pom.xml中添加依赖关系

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.2</version>
        <optional>true</optional>
    </dependency>
</dependencies>

为了方便,我们在main函数类写一个接口

@EnableDiscoveryClient
@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

    @Slf4j
    @RestController
    static class TestController {
        @GetMapping("/hello")
        public String hello(@RequestParam String name) {
            log.info("invoked name = " + name);
            return "hello " + name;
        }
    }
}

注意这个注解@EnableDiscoveryClient。这里就开启了服务注册中心,当项目启动完之后,这个项目就自动的注册到注册中心了。

配置

最关键的就是配置信息

spring.application.name=alibaba-nacos-discovery-server
server.port=8001

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

其中spring.cloud.nacos.discovery.server-addr就是我们刚搭建的nacos环境地址。我们现在可以尝试启动项目,看看nacos界面有没有新的服务注册进来。

启动成功了,界面中也有了新的服务。这个服务就是我们刚创建的服务提供者。

服务消费者

我们要消费这个服务,就要创建服务消费的项目,利用注册中心,来消费里面的服务接口。

还是一样创建一个空的springboot项目,我们在main类中调用服务提供者的接口。

@EnableDiscoveryClient
@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

    @Slf4j
    @RestController
    static class TestController {

        @Autowired
        LoadBalancerClient loadBalancerClient;

        @GetMapping("/test")
        public String test() {
            // 通过spring cloud common中的负载均衡接口选取服务提供节点实现接口调用
            ServiceInstance serviceInstance = loadBalancerClient.choose("alibaba-nacos-discovery-server");
            String url = serviceInstance.getUri() + "/hello?name=" + "nn";
            RestTemplate restTemplate = new RestTemplate();
            String result = restTemplate.getForObject(url, String.class);
            return "Invoke : " + url + ", return : " + result;
        }
    }
}

配置信息

spring.application.name=alibaba-nacos-discovery-client-common
server.port=9000

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

注意的地方就是

 ServiceInstance serviceInstance = loadBalancerClient.choose("alibaba-nacos-discovery-server");

我们通过服务名称来调用里面的接口。这里就体现出了注册中心在其中的作用了。服务消费者,通过从注册中心获取服务列表,缓存到本地,服务消费者通过本地服务列表来调用服务接口。这样就实现了简单微服务的整个接口调用方向。

以上内容皆为本人观点,欢迎大家提出批评和指导,我们一起探讨!