前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Cloud整合Nacos实现服务注册发现

Spring Cloud整合Nacos实现服务注册发现

作者头像
故里
发布2020-11-25 15:54:05
1.2K0
发布2020-11-25 15:54:05
举报
文章被收录于专栏:故里学Java

戳这里,加关注哦~

SpringCloud整合Naco实现分布式环境下的配置管理和服务注册发现。

  • 通过Nacos Server和spring-cloud-starter-alibaba-nacos-config实现配置的动态变更。
  • 通过Nacos Server和spring-cloud-starter-alibaba-nacos-discovery实现服务的注册与发现。

首先我们需要先下载并启动Nacos Server

启动后配置管理

  1. 添加依赖;
代码语言:javascript
复制
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>${latest.version}</version>
</dependency>

注意匹配Spring Boot和Nacos的版本,2.1.x.RELEASE对应的是Spring Boot2.1.x版本,2.0.x.RELEASE对应的是Spring Boot2.0.x版本,1.5.x.RELEASE对应的是Spring Boot1.5.x版本

  1. 在bootstrap.properties中配置Nacos Server的地址和应用名
代码语言:javascript
复制
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

spring.application.name=demo

spring.application.name是构成Nacos配置管理的dataId的一部分

补充:Nacos配置管理dataId的完整格式:

代码语言:javascript
复制
${prefix}-${spring.properties.active}.${file-exetension}
  • prefix默认取的就是spring.application.name的值,也可以通过spring.cloud.nacos.config.prefix配置
  • spring.profiles.active即当前环境对应的profile,为空时对应的连接符也将不存在
  • file-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-exetension来配置
  1. 通过Spring Cloud原生注解 RefreshScope实现配置自动更新
代码语言:javascript
复制
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @RequestMapping("/get")
    public boolean get() {
        return useLocalCache;
    }
}

4.通过调用Nacos Open API向Nacos Server发布配置:dataId 为demo.properties,内容为useLocalCache=true

代码语言:javascript
复制
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=demo.properties&group=DEFAULT_GROUP&content=useLocalCache=true"

5.运行NacosConfigApplication,调用

代码语言:javascript
复制
curl http://localhost:8080/config/get

返回值:true

6.再次调用调用Nacos Open API向Nacos Server发布配置:dataId 为demo.properties,内容为useLocalCache=false

代码语言:javascript
复制
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=demo.properties&group=DEFAULT_GROUP&content=useLocalCache=false"
  1. 再次访问 http://localhost:8080/config/get,此时返回内容为false,说明程序中的useLocalCache值已经被动态更新了。

启动服务发现

下边通过一个简单的例子演示在Spring Cloud 项目中启用Nacos的服务发现功能

  1. 添加依赖
代码语言:javascript
复制
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>${latest.version}</version>
</dependency>
  1. 配置服务提供者,从而服务提供者可以通过Nacos的服务注册发现功能将其服务注册到Nacos Server上。
  • 在application.properties中配置Nacos Server的地址
代码语言:javascript
复制
server.port=8070
spring.application.name=service-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  • 通过Spring Cloud原生注解 @EnableDiscoveryClient开启服务注册发现功能
代码语言:javascript
复制
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {

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

  @RestController
  class EchoController {
    @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
    public String echo(@PathVariable String string) {
      return "Hello Nacos Discovery " + string;
    }
  }
}

3.配置服务消费者,从而服务消费者可以通过Nacos的服务注册发现功能从Nacos Server上获取到它要调用的服务。

  • application.properties中配置Nacos Server的地址
代码语言:javascript
复制
server.port=8080
spring.application.name=service-consumer

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

通过Spring Cloud原生注解EnableDiscoveryClient开启服务注册发现功能,给RestTemplate实例添加@LoadBalanced注解,开启@LoadBalanced与Ribbon的集成

代码语言:javascript
复制
@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 = "/echo/{str}", method = RequestMethod.GET)
        public String echo(@PathVariable String str) {
            return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
        }
    }
}
  1. 启动NacosProviderApplicationNacosConsumerApplication,调用http://localhost:8080/echo/demo,返回内容Hello Nacos Discovery demo

这个Spring Cloud整合Nacos实现配置更新和服务注册发现的小demo,可以结合之前的Nacos文章练习

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 故里学Java 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 启动后配置管理
  • 启动服务发现
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档