700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > nacos 公共_技术分享——使用nacos作注册中心和配置中心

nacos 公共_技术分享——使用nacos作注册中心和配置中心

时间:2020-05-11 22:25:48

相关推荐

nacos 公共_技术分享——使用nacos作注册中心和配置中心

什么是nacos?

首先看下官方的简介:

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

nacos的特性

服务发现和服务健康监测动态配置服务动态DNS服务服务及元数据管理

nacos脑图

nacos的安装

对于nacos的安装,本文不作详细介绍,因为官网文档里面已经介绍的十分全面了,若有需要可以直接参考官网快速开始。安装完成之后,打开nacos后台管理页面如下:

可以发现左侧菜单有我们今天需要用到的配置管理和服务管理选项。

使用nacos作注册中心和配置中心

在使用nacos之前,本人所在公司注册中心使用的是eureka,配置中心是携程的apollo。nacos由国内公司阿里巴巴开源出品,集成了注册中心和配置中心两大功能,并且有强大的社区支持,符合国人使用习惯。

创建spring cloud项目

在父工程下创建module,创建服务提供者cloud-nacos-provider和服务消费者cloud-nacos-consumer,依赖信息如下:

org.springframework.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.cloud spring-cloud-starter-openfeign 2.0.0.RELEASEcom.alibaba.cloud spring-cloud-starter-alibaba-nacos-config 2.2.1.RELEASEcom.yezi cloud-nacos-api 1.0-SNAPSHOTcompile

cloud-nacos-provider

创建启动类

package com.yezi;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.openfeign.EnableFeignClients;/** * @Description: * @Author: yezi * @Date: /7/22 14:17 */@EnableFeignClients(basePackages = {"com.yezi"})@EnableDiscoveryClient@SpringBootApplicationpublic class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); }}

@EnableDiscoveryClient将服务注册到注册中心

@EnableFeignClients(basePackages = {"com.yezi"})本文使用了feign,开启feign包扫描

服务提供api

package com.yezi.controller;import com.yezi.api.ProviderApi;import org.springframework.beans.factory.annotation.Value;import org.springframework.cloud.context.config.annotation.RefreshScope;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;/** * @Description: * @Author: yezi * @Date: /7/22 15:01 */@RefreshScope@RestControllerpublic class ProviderApiController implements ProviderApi { @Value("${name:123}") private String name; @Override public String say(@PathVariable("msg") String msg) { System.out.println("【---------from---------】" + msg); return "hello,consumer1"; } @GetMapping("/config") public String config() { System.out.println("【---------from---------】" + name); return name; }}

@RefreshScope 局部刷新注解,开启实时更新配置信息@Value("${name:123}") 最常用的配置信息注入直接,默认为123,如果配置文件有信息,则从配置文件获取。本文本地application.yml中没有这个属性,在配置中心中放置name配置

在配置中心创建配置信息

nacos的配置data id默认以服务的 spring.application.name 加上 .yml ,因此这里创建2个配置文件,分别为nacos-provider.yml、nacos-consumer.yml。

nacos-provider.yml内容:

server: port: 8082name: y好卡机SD卡

nacos-consumer.yml内容:

server: port: 8081

配置bootstrap.yml

创建bootstrap.yml

spring: application: name: nacos-provider cloud: nacos:config: enabled: false server-addr: 192.168.18.244:8848 file-extension: ymldiscovery: server-addr: 192.168.18.244:8848

config.enabled 是否开启使用配置中心配置

config.server-addr 配置中心地址,也就是nacos地址

discovery.server-addr 注册中心地址(nacos地址)

笔者这里一开始用的application.yml,发现配置中心的数据没有生效,查看官方之后发现官网直接使用的bootstrap.yml然后就生效了。所以这里一定注意要使用bootstrap.yml。bootstrap.yml与application.yml两者区别如下:

bootstrap.yml(bootstrap.properties)用来程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。

由此知道bootstrap.yml 先于 application.yml 加载,使用spring cloud的时候,配置信息一般是从配置中心加载的,因此,把配置中心信息放在 bootstrap.yml,用来加载真正需要的配置信息。

创建config文件夹

在resources目录下创建config目录,在config目录中创application.yml配置文件,这里创建配置文件的目的是用作本地配置,当config.enabled=false时,将不会去读取配置中心细心,会直接读取config下配置文件信息。

cloud-nacos-consumer

服务消费者与提供者所有的文件模式是一样的,这里只提供一个消费者的延时controller:

package com.yezi.controller;import com.yezi.api.ProviderApi;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;/** * @Description: * @Author: yezi * @Date: /7/22 15:03 */@RestControllerpublic class ConsumerController { @Autowired private ProviderApi providerApi; @GetMapping("/say") public String test() { return providerApi.say("hello,provider"); }}

这里解释下为什么要把api层单独提供一个module,在使用feign的时候,服务消费者要使用服务提供者的api,需要构造一个与提供者一个一样的feign的client,为了节省这部分代码,把这部分单独提取一个module,在provider和consumer两边引入即可。

api信息如下:

package com.yezi.api;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;/** * @Description: * @Author: yezi * @Date: /7/22 16:35 */@FeignClient("nacos-provider")public interface ProviderApi { @GetMapping("/provider/say/{msg}") String say(@PathVariable("msg") String msg);}

启动服务验证结果

查看nacos配置列表,如下

发现2个服务都注册到nacos中心。

测试一下用为注册中心服务调用:

访问consumer服务http://127.0.0.1:8081/say地址,8081端口是我们在配置中心指定的,本地端口为8083,得到如下结果:

nacos作为注册中心,验证通过。

测一下用作配置中心:

访问provider服务http://127.0.0.1:8082/config地址,8082端口是我们在配置中心指定的,本地端口为8084,配置中心中name配置为yezi,得到如下结果:

nacos作为配置中心,验证通过。

来源:/articles/auIvemi

欢迎关注微信公众号【慕容千语】

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。