欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nacos快速入门(三):Spring Cloud Alibaba Nacos实现服务注册与发现

程序员文章站 2022-07-15 09:42:54
...

1、前言

Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,目前已经加入Spring Cloud项目,跟随Spring Cloud一起维护。集成Nacos需要使用Spring Cloud Alibaba Nacos模块。

拓展阅读:Spring Cloud 加盟重量级成员Spring Cloud Alibaba,打造更符合中国国情的微服务体系

2、启动nacos服务

在上文《Nacos快速入门(二):Nacos集群安装部署》谈的了nacos的集群部署,如果你没有那么多linux机器来搭建集群,可以本地启动非集群模式nacos服务:

  • Linux/Unix/Mac:sh startup.sh -m standalone
  • Windows:cmd startup.cmd -m standalone

Windows下可以直接双击nacos/bin目录下的startup.cmd

3、搭建服务接入nacos注册中心

搭建spring boot项目nacos-spring-cloud-discovery-example,编辑pom.xml

<properties>
    <spring-boot.version>2.0.4.RELEASE</spring-boot.version>
    <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    <spring-cloud-alibaba.version>0.2.2.RELEASE</spring-cloud-alibaba.version>
</properties>


<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

附录:Spring Cloud Alibaba & Spring Cloud & Spring Boot兼容版本

Spring Cloud Alibaba依赖坐标的groupId有两个,对应的版本是不一样的

  • 项目孵化期间,使用的groupIdorg.springframework.cloud,兼容版本:
Spring Boot Spring Cloud Spring Cloud Alibaba
2.1.x Greenwich 0.9.x
2.0.x Finchley 0.2.x
1.5.x Edgware 0.1.x
1.5.x Dalston 0.1.x
  • 项目孵化之后,使用的groupIdcom.alibaba.cloud,兼容版本:
Spring Cloud Version Spring Cloud Alibaba Version Spring Boot Version
-------- -------- --------
Spring Cloud Greenwich 2.1.x.RELEASE 2.1.x.RELEASE
Spring Cloud Finchley 2.0.x.RELEASE 2.0.x.RELEASE
Spring Cloud Edgware 1.5.x.RELEASE 1.5.x.RELEASE

拓展阅读:Spring Cloud Alibaba 发布第一个正式版本,顺利完成孵化!

3.1、服务创建者

第一步: 在nacos-spring-cloud-discovery-example下新建mavem模块nacos-spring-cloud-provider-example,编辑pom.xml,加入nacos服务注册发现模块依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

第二步: 创建提供者应用主类

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {

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

    @Value("${server.port}")
    private String port ;

    @RestController
    class EchoController {

        @RequestMapping(value = "/hello", method = RequestMethod.GET)
        public String hello() {
            // 返回服务端口
            return "service provider,port:" + port;
        }
    }
}

第三步:application.properties中配置应用名称和nacos注册中心地址

server.port=8080
spring.application.name=service-provider
# nacos注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

第四步: 我们启动两个服务实例,启动第一个实例后,我们修改server.port=8081,然后再启动一个实例

如果不想修改配置,可以在启动参数中添加-Dserver.port=8081参数来启动

登录nacos控制台,查看服务列表:

Nacos快速入门(三):Spring Cloud Alibaba Nacos实现服务注册与发现

进入服务详情:
Nacos快速入门(三):Spring Cloud Alibaba Nacos实现服务注册与发现

3.2、服务消费者

第一步: 在nacos-spring-cloud-discovery-example下新建mavem模块nacos-spring-cloud-consumer-example,编辑pom.xml,加入nacos服务注册发现模块依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

第二步: 创建消费者应用主类

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

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

    @RestController
    public class TestController {

        private final RestTemplate restTemplate;

        @Autowired
        public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}

        @RequestMapping(value = "/hello", method = RequestMethod.GET)
        public String hello() {
            // 调用服务提供者接口
            return restTemplate.getForObject("http://service-provider/hello", String.class);
        }
    }

第三步:application.properties中配置应用名称和nacos注册中心地址

server.port=8090
spring.application.name=service-consumer
# nacos注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

第四步: 启动服务,查看注册中心,消费者也注册上来了

Nacos快速入门(三):Spring Cloud Alibaba Nacos实现服务注册与发现

到此,服务已经全部搭建好了,完整项目结构:

Nacos快速入门(三):Spring Cloud Alibaba Nacos实现服务注册与发现

4、测试

消费者调用提供者接口测试

访问消费者接口:http://127.0.0.1:8090/hello,多次访问,调用的服务提供者实例是不同的

Nacos快速入门(三):Spring Cloud Alibaba Nacos实现服务注册与发现

Nacos快速入门(三):Spring Cloud Alibaba Nacos实现服务注册与发现

服务下线测试

把8081端口的服务提供者下线,再次请求接口,只会调用8080端口服务提供者
Nacos快速入门(三):Spring Cloud Alibaba Nacos实现服务注册与发现

nacos这里做的是不很友好,服务下线成功与否控制台界面看不出来,相比之下eureka会友好些。

相关标签: Nacos