java (x 1) 3_Spring Boot 2.x 基础案例:整合Dubbo 2.7.3+Nacos1.1.3(配置中心)

45ad66e8d92ec075b5447fbb2035e318.png

本文原创首发于公众号:Java技术干货

1、概述

本文将Nacos作为配置中心,实现配置外部化,动态更新。这样做的优点:不需要重启应用,便可以动态更新应用里的配置信息。在如今流行的微服务应用下,将应用的配置统一管理,显得尤为重要。

上一篇写了《Spring Boot 2.x 基础案例:整合Dubbo 2.7.3+Nacos1.1.3(最新版)》https://www.jianshu.com/p/b0dddce1d404,在文章中,nacos的角色是注册中心。

本文也是在上一篇的基础上,继续学习和研究以Dubbo为微服务框架,nacos作为配置中心,应该如何进行实践。以及在此过程中,遇到了什么样的问题,如何解决。

2、nacos的必知必会

在进行编码之前,先看看当nacos作为配置中心时,操作界面是啥,有哪些新的知识点,需要我们先去了解和掌握呢?以免,在后面搭建环境时,全程懵逼。

c2cd62162dd6f5c8ddf4de7dc297dfe3.png

0d3df4a7cbda3434e6a3aaf4fc74ccda.png

重要参数说明

Data Id

Data Id的默认值为${nacos.config.prefix}-${spring.profile.active}.${nacos.config.file-extension}

nacos.config.prefix的默认值为${spring.application.name}

nacos.config.file-extension的默认值为properties

当spring.profiles.active未配置时,则匹配${spring.application.name}.properties

若设置了spring.profiles.active而Nacos中存在${spring.application.name}.properties时,若还存在${spring.application.name}-${spring.profiles.active}.properties,则默认匹配后者,若不存在,则会自动匹配前者

由于Nacos建议且默认用spring.application.name作为Data Id的前缀,若要在不同服务中共享项目统一配置,则可以通过配置nacos.config.shared-dataids或nacos.config.refreshable-dataids来添加共享配置,前者不支持自动刷新,后者支持

Group

这是一个很灵活的配置项,并没有固定的规定,可以用作多环境、多模块、多版本之间区分配置

Namespace

推荐使用命名空间来区分不同环境的配置,因为使用profiles或group会是不同环境的配置展示到一个页面,而Nacos控制台对不同的Namespace做了Tab栏分组展示,如下图:

010d8b22ee4692605aa2b537f475526e.png

注意配置Namespace的时候不是通过名称,而是通过命名空间的ID(上图所示),可通过如下配置来设置服务使用的命名空间:

nacos:

service-address: 127.0.0.1

port: 8848

config:

server-addr: ${nacos.service-address}:${nacos.port}

namespace: 9af36d59-2efd-4f43-8a69-82fb37fc8094 # 命名空间ID 不是命名空间名称

3、基础框架搭建

我的建议,尽可能自己花点时间,在不熟悉的情况下,尽量按照自己的想法思路,从零开始搭建一下,加深印象。在搭建过程中,可能会遇到问题,此时不要慌(嘴上不说,心里却慌得狠)。但幸运的是,你遇到了我,可以联系,留言或关注我,一起交流。

为了不造成知识点的混淆,我将spring-boot-dubbo-nacos-demo的maven工程,源代码已同步于github,重新拷贝一份,项目重新命名为spring-boot-dubbo-nacos-configcenter-demo。

00319ffec0a60c617ba7478ef1dbc7dc.png

直接拷贝过来,项目名变更,对应的pom.xml还需要修改一下

3ca1c44da39390a1354eab6b94b6b352.png

修改shop-service-provider和shop-service-consumer:的pom.xml

50da148a70171c29d9f95607d323c0b4.png

ab1e4e100004b848ef96f36d75409ecf.png

按照上一篇文章的6、测试,看一下项目是否能正常启动,如果正常,我们在开始整合nacos的配置中心。确保前面的功能都是正常的。

4、pom.xml说明

如果想nacos作为配置中心,需要在对应的maven工程中引入nacos-config-spring-boot-starter的依赖包,这里,将此依赖包在shop-service-provider和shop-service-consumer的项目中同时引入,这样可以方便服务提供者和服务消费者之间的测试。

这里就不把pom.xml的代码全部粘贴出来,大家想看的话,可以去上一篇文章中看。

pom.xml新增nacos-config-spring-boot-starter依赖

com.alibaba.boot

nacos-config-spring-boot-starter

0.2.3

5、配置文件说明

shop-service-provider和shop-service-consumer的application.yml,增如下配置,启动项目,会和nacos创建连接

nacos:

service-address: 127.0.0.1

port: 8848

config:

server-addr: ${nacos.service-address}:${nacos.port}

相关配置参数,请参考com.alibaba.boot.nacos.config.properties.NacosConfigProperties.java

c062aa4b19f42444bb4fec472fe90013.png

6、编写业务代码

6.1、shop-service-provider增加配置实体类NacosConfig.java

NacosConfig.java代码实现:

package cn.raysonblog.shopserviceprovider.config;

import com.alibaba.nacos.api.config.annotation.NacosValue;

import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;

import lombok.Data;

import org.springframework.stereotype.Component;

/**

* 从Nacos外部拉取配置, 修改配置,自动会刷新应用的配置

*

* @author raysonfang

*/

@NacosPropertySource(dataId = "rayson", autoRefreshed = true)

@Data

@Component

public class NacosConfig {

@NacosValue(value = "${service.name:1}", autoRefreshed = true)

private String serviceName;

}

注解说明:

@NacosPropertySource注解其中包含两个属性,如下:

dataId:这个属性是需要在Nacos中配置的Data Id。

autoRefreshed:为true的话开启自动更新。

在使用Nacos做配置中心后,需要使用@NacosValue注解获取配置,使用方式与@Value一样。

其中${service.name:1}的service.name是属性key, 1是默认值。

6.2、shop-service-provider将NacosConfig的信息暴露到接口中获取

package cn.raysonblog.shopserviceprovider.service.impl;

import cn.raysonblog.shopserviceprovider.config.NacosConfig;

import cn.raysonblog.shopserviceprovider.service.RpcShopService;

import org.apache.dubbo.config.annotation.Service;

import org.springframework.beans.factory.annotation.Autowired;

/**

* 接口实现类

*

* ## @Service 这个注解是使用dubbo提供的,

* 这个注解中有很多属性,需要单独了解去进行配置

*

* @author raysonfang

*/

@Service

public class ShopServiceImpl implements RpcShopService {

@Autowired

NacosConfig nacosConfig;

public String sayHello(String name) {

return name;

}

/**

* 将nacos config的配置信息暴露给服务消费者

* @param desc

* @return

*/

public String getConfigServiceName(String desc){

return nacosConfig.getServiceName()+desc;

}

}

RpcShopService.java接口新增getConfigServiceName()方法

package cn.raysonblog.shopserviceprovider.service;

/**

* 提供暴露的Rpc接口

* @author raysonfang

*/

public interface RpcShopService {

String sayHello(String name);

String getConfigServiceName(String desc);

}

6.3、shop-service-consumer新增接口方法/getConfig

package cn.raysonblog.shopserviceconsumer;

import cn.raysonblog.shopserviceprovider.service.RpcShopService;

import org.apache.dubbo.config.annotation.Reference;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

/**

*

* 把主类和controller写在一起,方便简单测试演示。

*

* @author raysonfang

*/

@SpringBootApplication

@RestController

public class ShopServiceConsumerApplication {

@Reference

RpcShopService shopService;

/**

* 注释原因: 在主应用入口,只运行有一个RequestMapping 否则会报错。

*/

/* @RequestMapping(name = "/sayHello", method = RequestMethod.GET)

public String sayHello(){

return shopService.sayHello("Hello Dubbo Nacos!更多原创分享,技术交流,关注:Java技术干货(ID:raysonfang)");

}*/

/**

* Nacos config配置中心 获取配置信息 测试接口

* @return

*/

@RequestMapping(name = "/getConfig", method = RequestMethod.GET)

public String getConfig(){

return shopService.getConfigServiceName("更多原创分享,技术交流,关注:Java技术干货(ID:raysonfang)");

}

public static void main(String[] args) {

SpringApplication.run(ShopServiceConsumerApplication.class, args);

}

}

7、测试

项目启动顺序,这里再贴一下上一篇的图:

format,png

nacos还没配置信息时,输入http://localhost:8081/getConfig,显示的是默认值

aa2c8ce38a158a9553ea0b417d70b4bd.png

去nacos控制台新增如下配置:

7321e8d38e5972677cd82e31333bd912.png

fea322fa89cc8c312d35ff48edd1d195.png

刷新http://localhost:8081/getConfig,配置由1更新为hello nacos config-center!

4664b728973e9134dfc5b12403f5de92.png

8、问题记录及解决

8.1、对于dataID的配置不清楚,当时我使用rayson.service,导致客户端解析错误。

解决:查看源码得知,在NacosUtils.java中,对dataId有解析,.后面的值相当于文件后缀名。故,如果需要配置,则配置成支持的文件后缀名。

8c78087012dce22e570fec5446e8aab5.png

9、后记

由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!

欢迎大家star, 批评

我平常学习,编码也都会放置github上,欢迎持续关注交流。

我的github: https://github.com/raysonfang

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[Spring Boot 2.x 基础案例:整合Dubbo 2.7.3+Nacos1.1.3(配置中心)]http://www.zyiz.net/tech/detail-92801.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值