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

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 BootSpring CloudSpring Cloud Alibaba
2.1.xGreenwich0.9.x
2.0.xFinchley0.2.x
1.5.xEdgware0.1.x
1.5.xDalston0.1.x
  • 项目孵化之后,使用的groupIdcom.alibaba.cloud,兼容版本:
Spring Cloud VersionSpring Cloud Alibaba VersionSpring Boot Version
------------------------
Spring Cloud Greenwich2.1.x.RELEASE2.1.x.RELEASE
Spring Cloud Finchley2.0.x.RELEASE2.0.x.RELEASE
Spring Cloud Edgware1.5.x.RELEASE1.5.x.RELEASE

拓展阅读:
Spring Cloud Alibaba 发布第一个正式版本,顺利完成孵化!
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控制台,查看服务列表:

service-provider.png

进入服务详情:
service-provider-detail.png

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

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

service-consumer.png

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

nacos-discovery-project.png

4、测试

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

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

invoke1.png

invoke2.png

服务下线测试

把8081端口的服务提供者下线,再次请求接口,只会调用8080端口服务提供者
service-provider-down.png

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值