Spring Boot 2.x 基礎(chǔ)案例:整合Dubbo 2.7.3+Nacos1.1.3(配置中心)

本文的思維導(dǎo)圖

本文原創(chuàng)首發(fā)于公眾號(hào):Java技術(shù)干貨

1田轧、概述

本文將Nacos作為配置中心傻粘,實(shí)現(xiàn)配置外部化,動(dòng)態(tài)更新窒典。這樣做的優(yōu)點(diǎn):不需要重啟應(yīng)用瀑志,便可以動(dòng)態(tài)更新應(yīng)用里的配置信息肩祥。在如今流行的微服務(wù)應(yīng)用下混狠,將應(yīng)用的配置統(tǒng)一管理将饺,顯得尤為重要予弧。

上一篇寫了《Spring Boot 2.x 基礎(chǔ)案例:整合Dubbo 2.7.3+Nacos1.1.3(最新版)》http://www.reibang.com/p/b0dddce1d404湖饱,在文章中井厌,nacos的角色是注冊(cè)中心。

本文也是在上一篇的基礎(chǔ)上器赞,繼續(xù)學(xué)習(xí)和研究以Dubbo為微服務(wù)框架港柜,nacos作為配置中心夏醉,應(yīng)該如何進(jìn)行實(shí)踐畔柔。以及在此過程中,遇到了什么樣的問題肠槽,如何解決秸仙。


2桩盲、nacos的必知必會(huì)

在進(jìn)行編碼之前赌结,先看看當(dāng)nacos作為配置中心時(shí)柬姚,操作界面是啥量承,有哪些新的知識(shí)點(diǎn),需要我們先去了解和掌握呢拿穴?以免默色,在后面搭建環(huán)境時(shí)腿宰,全程懵逼。


nacos配置管理

新建配置

重要參數(shù)說明

Data Id
  1. Data Id的默認(rèn)值為${nacos.config.prefix}-${spring.profile.active}.${nacos.config.file-extension}
  2. nacos.config.prefix的默認(rèn)值為${spring.application.name}
  3. nacos.config.file-extension的默認(rèn)值為properties
  4. 當(dāng)spring.profiles.active未配置時(shí),則匹配${spring.application.name}.properties
  5. 若設(shè)置了spring.profiles.active而Nacos中存在${spring.application.name}.properties時(shí)捶闸,若還存在${spring.application.name}-${spring.profiles.active}.properties删壮,則默認(rèn)匹配后者央碟,若不存在亿虽,則會(huì)自動(dòng)匹配前者
  6. 由于Nacos建議且默認(rèn)用spring.application.name作為Data Id的前綴苞也,若要在不同服務(wù)中共享項(xiàng)目統(tǒng)一配置如迟,則可以通過配置nacos.config.shared-dataidsnacos.config.refreshable-dataids來添加共享配置殷勘,前者不支持自動(dòng)刷新输拇,后者支持
Group
  1. 這是一個(gè)很靈活的配置項(xiàng),并沒有固定的規(guī)定,可以用作多環(huán)境草讶、多模塊炉菲、多版本之間區(qū)分配置
Namespace
  1. 推薦使用命名空間來區(qū)分不同環(huán)境的配置,因?yàn)槭褂?code>profiles或group會(huì)是不同環(huán)境的配置展示到一個(gè)頁面薪介,而Nacos控制臺(tái)對(duì)不同的Namespace做了Tab欄分組展示汁政,如下圖:
命名空間ID
  1. 注意配置Namespace的時(shí)候不是通過名稱记劈,而是通過命名空間的ID(上圖所示)目木,可通過如下配置來設(shè)置服務(wù)使用的命名空間:
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刽射、基礎(chǔ)框架搭建

我的建議柄冲,盡可能自己花點(diǎn)時(shí)間忠蝗,在不熟悉的情況下阁最,盡量按照自己的想法思路速种,從零開始搭建一下配阵,加深印象。在搭建過程中救拉,可能會(huì)遇到問題亿絮,此時(shí)不要慌(嘴上不說派昧,心里卻慌得狠)蒂萎。但幸運(yùn)的是,你遇到了我纳寂,可以聯(lián)系烈疚,留言或關(guān)注我爷肝,一起交流灯抛。

為了不造成知識(shí)點(diǎn)的混淆对嚼,我將spring-boot-dubbo-nacos-demo的maven工程纵竖,源代碼已同步于github靡砌,重新拷貝一份珊楼,項(xiàng)目重新命名為spring-boot-dubbo-nacos-configcenter-demo厕宗。

直接拷貝過來已慢,項(xiàng)目名變更蛇受,對(duì)應(yīng)的pom.xml還需要修改一下


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

修改shop-service-consumer的pom.xml

按照上一篇文章的6、測(cè)試轻专,看一下項(xiàng)目是否能正常啟動(dòng)察蹲,如果正常洽议,我們?cè)陂_始整合nacos的配置中心亚兄。確保前面的功能都是正常的审胚。


4膳叨、pom.xml說明

如果想nacos作為配置中心菲嘴,需要在對(duì)應(yīng)的maven工程中引入nacos-config-spring-boot-starter的依賴包,這里昭雌,將此依賴包在shop-service-provider和shop-service-consumer的項(xiàng)目中同時(shí)引入悉默,這樣可以方便服務(wù)提供者和服務(wù)消費(fèi)者之間的測(cè)試城豁。

這里就不把pom.xml的代碼全部粘貼出來,大家想看的話抄课,可以去上一篇文章中看唱星。

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

<!-- nacos config依賴 -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
            <version>0.2.3</version>
        </dependency>

5、配置文件說明

shop-service-provider和shop-service-consumer的application.yml跟磨,增如下配置间聊,啟動(dòng)項(xiàng)目,會(huì)和nacos創(chuàng)建連接

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

相關(guān)配置參數(shù)哎榴,請(qǐng)參考com.alibaba.boot.nacos.config.properties.NacosConfigProperties.java

NacosConfigProperties


6、編寫業(yè)務(wù)代碼

6.1、shop-service-provider增加配置實(shí)體類NacosConfig.java

NacosConfig.java代碼實(shí)現(xiàn):

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外部拉取配置, 修改配置尚蝌,自動(dòng)會(huì)刷新應(yīng)用的配置
 *
 * @author raysonfang
 */
@NacosPropertySource(dataId = "rayson", autoRefreshed = true)
@Data
@Component
public class NacosConfig {

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

注解說明:
@NacosPropertySource注解其中包含兩個(gè)屬性迎变,如下:

  • dataId:這個(gè)屬性是需要在Nacos中配置的Data Id。
  • autoRefreshed:為true的話開啟自動(dòng)更新飘言。

在使用Nacos做配置中心后衣形,需要使用@NacosValue注解獲取配置,使用方式與@Value一樣姿鸿。

其中${service.name:1}的service.name是屬性key, 1是默認(rèn)值谆吴。

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;

/**
 * 接口實(shí)現(xiàn)類
 *
 * ## @Service 這個(gè)注解是使用dubbo提供的苛预,
 *             這個(gè)注解中有很多屬性句狼,需要單獨(dú)了解去進(jìn)行配置
 *
 * @author raysonfang
 */
@Service
public class ShopServiceImpl implements RpcShopService {

    @Autowired
    NacosConfig nacosConfig;

    public String sayHello(String name) {
        return name;
    }

    /**
     * 將nacos config的配置信息暴露給服務(wù)消費(fèi)者
     * @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寫在一起热某,方便簡(jiǎn)單測(cè)試演示腻菇。
 *
 * @author raysonfang
 */
@SpringBootApplication
@RestController
public class ShopServiceConsumerApplication {
    @Reference
    RpcShopService shopService;

    /**
     * 注釋原因: 在主應(yīng)用入口,只運(yùn)行有一個(gè)RequestMapping 否則會(huì)報(bào)錯(cuò)苫拍。
     */
  /*  @RequestMapping(name = "/sayHello", method = RequestMethod.GET)
    public String sayHello(){
        return shopService.sayHello("Hello Dubbo Nacos!更多原創(chuàng)分享芜繁,技術(shù)交流,關(guān)注:Java技術(shù)干貨(ID:raysonfang)");
    }*/

    /**
     * Nacos config配置中心 獲取配置信息 測(cè)試接口
     * @return
     */
    @RequestMapping(name = "/getConfig", method = RequestMethod.GET)
    public String getConfig(){
        return shopService.getConfigServiceName("更多原創(chuàng)分享绒极,技術(shù)交流骏令,關(guān)注:Java技術(shù)干貨(ID:raysonfang)");
    }

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

}

7、測(cè)試

項(xiàng)目啟動(dòng)順序垄提,這里再貼一下上一篇的圖:


image

nacos還沒配置信息時(shí)榔袋,輸入http://localhost:8081/getConfig,顯示的是默認(rèn)值

顯示默認(rèn)值

去nacos控制臺(tái)新增如下配置:


新增配置
新增成功!

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

hello nacos config-center


8凰兑、問題記錄及解決

8.1、對(duì)于dataID的配置不清楚审丘,當(dāng)時(shí)我使用rayson.service吏够,導(dǎo)致客戶端解析錯(cuò)誤。

解決:查看源碼得知滩报,在NacosUtils.java中锅知,對(duì)dataId有解析,.后面的值相當(dāng)于文件后綴名脓钾。故售睹,如果需要配置,則配置成支持的文件后綴名可训。


9昌妹、后記

由于能力有限捶枢,若有錯(cuò)誤或者不當(dāng)之處,還請(qǐng)大家批評(píng)指正飞崖,一起學(xué)習(xí)交流烂叔!

源代碼放置Github: https://github.com/raysonfang/spring-boot-demo-all

歡迎大家star, 批評(píng)

我平常學(xué)習(xí),編碼也都會(huì)放置github上蚜厉,歡迎持續(xù)關(guān)注交流长已。
我的github: https://github.com/raysonfang


文章推薦
1. Spring Boot 2.x 基礎(chǔ)案例:整合Dubbo 2.7.3+Nacos1.1.3(最新版)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畜眨,一起剝皮案震驚了整個(gè)濱河市昼牛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌康聂,老刑警劉巖贰健,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恬汁,居然都是意外死亡伶椿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門氓侧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脊另,“玉大人,你說我怎么就攤上這事约巷≠送矗” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵独郎,是天一觀的道長(zhǎng)踩麦。 經(jīng)常有香客問我,道長(zhǎng)氓癌,這世上最難降的妖魔是什么谓谦? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮贪婉,結(jié)果婚禮上反粥,老公的妹妹穿的比我還像新娘。我一直安慰自己疲迂,他們只是感情好才顿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鬼譬,像睡著了一般娜膘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上优质,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天竣贪,我揣著相機(jī)與錄音军洼,去河邊找鬼。 笑死演怎,一個(gè)胖子當(dāng)著我的面吹牛匕争,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播爷耀,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼甘桑,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了歹叮?” 一聲冷哼從身側(cè)響起跑杭,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咆耿,沒想到半個(gè)月后德谅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萨螺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年窄做,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慰技。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡椭盏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吻商,到底是詐尸還是另有隱情掏颊,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布手报,位于F島的核電站蚯舱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掩蛤。R本人自食惡果不足惜枉昏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望揍鸟。 院中可真熱鬧兄裂,春花似錦、人聲如沸阳藻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腥泥。三九已至匾南,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛔外,已是汗流浹背蛆楞。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工泪漂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留监婶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓囱井,卻偏偏與公主長(zhǎng)得像瘪吏,于是被迫代替她去往敵國和親话原。 傳聞我的和親對(duì)象是個(gè)殘疾皇子告材,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容