初見(jiàn)Spring-cloud-alibaba(1):Nacos(配置中心+服務(wù)注冊(cè)中心)踩坑記錄

前言

本文基于nacos 1.0.1版本

小聲BB:懶得弄排版了,直接上筆記

  1. Nacos,如果使用高版本的 mysql, 啟動(dòng)時(shí)需要把mysql-connector放到plugin/mysql文件夾下,因?yàn)轫?xiàng)目默認(rèn)依賴的mysql-connector 5.1.34,所以會(huì)導(dǎo)致驅(qū)動(dòng)不生效而連接失敗

    原因:com.alibaba.nacos.config.server.service.BasicDataSourceServiceImpl
    這個(gè)類中有設(shè)定好老版本和高版本的mysql驅(qū)動(dòng)路徑,如下
static {
        try {
            Class.forName(MYSQL_HIGH_LEVEL_DRIVER);
            JDBC_DRIVER_NAME = MYSQL_HIGH_LEVEL_DRIVER;
            log.info("Use Mysql 8 as the driver");
        } catch (ClassNotFoundException e) {
            log.info("Use Mysql as the driver");
            JDBC_DRIVER_NAME = DEFAULT_MYSQL_DRIVER;
        }
    }

如果是直接在編譯器中啟動(dòng)該程序的話,需要找到nacos-all/pom.xml 里修改mysql-connector的version,如果是直接從程序包里啟動(dòng)的話,則將jar包添加到plugins/mysql 即可

P.S. 由于連接DB失敗并不影響應(yīng)用啟動(dòng),但是會(huì)導(dǎo)致設(shè)定好的登陸用戶名密碼無(wú)法使用,所以如果發(fā)現(xiàn)用戶名密碼設(shè)定失敗的話,去查看日志會(huì)發(fā)現(xiàn)有可能就是SB的問(wèn)題

  1. 補(bǔ)充1.:淦,用了上述的方法毫無(wú)作用,還是連不上數(shù)據(jù)庫(kù),必須要自己重新編譯,這項(xiàng)目有坑,無(wú)法兼容高版本MYSQL
    com.alibaba.nacos.naming.healthcheck
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

這個(gè)地方必須低版本MYSQL才有這個(gè)類,高版本的路徑已經(jīng)變了

所以上面這段兼容代碼完全木有卵用

  1. windows的cmd腳本里默認(rèn)了是stand alone單機(jī)模式的,想要在windows下測(cè)試集群得修改startup.cmd腳本,里面的MODE改成默認(rèn)cluster集群模式
    Just like this

    BAT代碼

  2. Nacos 支持環(huán)境隔離,參考阿里的nacos blog
    https://nacos.io/zh-cn/blog/address-server.html

  3. 關(guān)于1.和2.的補(bǔ)充,查看update log里說(shuō)1.0.0已經(jīng)支持MYSQL 8的driver了,然而我用1.0.1還是不行……issue里貌似也有不少抱怨的,先不管了

  4. nacos-config 就是一個(gè)配置中心的作用,用于分布式全局配置的作用,實(shí)際上跟.properties文件的屬性配置類似,但它可以用于分布式環(huán)境中的集中式中心配置的作用,例如在nacos集群中配置好了相應(yīng)的屬性,那么應(yīng)用程序中可以直接通過(guò)注解式的代碼進(jìn)行訪問(wèn),單臺(tái)nacos服務(wù)器配置的屬性可以自動(dòng)同步到整個(gè)集群
    Just like this:

@RefreshScope   
class SampleController {
  @Value("${user.name}")   
  String userName;
  @Value("${user.age}")   
  int age;
 }

如上的代碼中的user.name和age就是從配置中心中獲得的,更多細(xì)節(jié)參考:
https://github.com/spring-cloud-incubator/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md

  1. Nacos-config 的配置有部分是先于application就開(kāi)始使用的,所以必須要寫(xiě)在bootstrap.properties上,如果寫(xiě)到application.properties上會(huì)撲街

  2. Nacos 集群模式搭建的時(shí)候,有可能會(huì)因?yàn)榫钟蚓W(wǎng)的網(wǎng)卡問(wèn)題導(dǎo)致集群leader選舉失敗,需要進(jìn)行網(wǎng)卡設(shè)置,具體參考文檔中的https://nacos.io/zh-cn/docs/deployment.html

  3. 關(guān)于8的補(bǔ)充,我使用了網(wǎng)卡配置,開(kāi)啟了局域網(wǎng)IP選項(xiàng)為true,并且設(shè)置了127.0.0.1為本機(jī)IP,日志顯示集群選舉成功,但是服務(wù)注冊(cè)依舊撲街,返回503 server is down,翻issue發(fā)現(xiàn)是bughttps://github.com/alibaba/nacos/issues/1189,維護(hù)者說(shuō)是1.0.0的bug,將會(huì)在1.0.1 fix,然鵝在下使用的1.0.1了還是有這個(gè)bug,但是暫時(shí)不知道是不是跟我單機(jī)環(huán)境開(kāi)啟集群造成的問(wèn)題,后續(xù)有了測(cè)試服務(wù)器再嘗試
    最后解決的方法是使用了網(wǎng)絡(luò)上的ip,設(shè)置局域網(wǎng)IP開(kāi)關(guān)為false,結(jié)果就注冊(cè)成功了,先記錄下

  4. ConfigService不能直接得到,要通過(guò)NacosConfigProperties注入然后configServiceInstance()方法獲得

  5. nacos的SDK提供了配置中心和服務(wù)中心的操作API,基本的CRUD操作都有,具體查看https://nacos.io/zh-cn/docs/sdk.html

  6. nacos集成了spring cloud的ribbon和feign,可以直接用它們來(lái)做基礎(chǔ)的RPC。RPC的URL中記得加入目標(biāo)服務(wù)的context-root,因?yàn)閺膎acos里獲取到的只有一個(gè)IP,實(shí)例化請(qǐng)求的時(shí)候url如果沒(méi)有context-root就無(wú)法指向到正確的接口內(nèi)

  7. nacos默認(rèn)有一個(gè)nacos/nacos的賬號(hào)密碼,會(huì)在nacos實(shí)例第一次啟動(dòng)時(shí)自動(dòng)生成數(shù)據(jù)到users表中,可以將其刪除,然后使用
    org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder這個(gè)類,類似:

System.out.println(new BCryptPasswordEncoder().encode("password"));

來(lái)生成密碼,該工具類在spring-security-core包中有,然后在users表中插入賬號(hào)密碼,賬號(hào)明文存儲(chǔ),密碼則使用加密后的字符串存入,然后在roles表中給對(duì)應(yīng)賬號(hào)插入ROLE_ADMIN,則可以新建管理員賬號(hào)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • [TOC] 服務(wù)發(fā)現(xiàn) 為了實(shí)現(xiàn)多個(gè)微服務(wù)之間的調(diào)用,我們除了需要Feign這種調(diào)用組件外還得依賴服務(wù)發(fā)現(xiàn)組件。主要...
    端碗吹水閱讀 1,435評(píng)論 0 5
  • 古人云:鷙鳥(niǎo)之將擊,必卑身翕翼;猛獸之將搏,必俯耳俯伏;圣人之將動(dòng),必有愚色。 即使有絕對(duì)的優(yōu)勢(shì),...
    出澗閱讀 1,532評(píng)論 0 1
  • 房子喜歡有人來(lái)家里,它也更敞開(kāi),它應(yīng)該是一個(gè)愛(ài)笑的女生吧,天天笑呵呵的,沒(méi)完沒(méi)了,所以它喜歡有人可以在它這里感覺(jué)很...
    Abbie_4b10閱讀 146評(píng)論 0 0
  • 文|曲婭菲 來(lái)源|《一起讀好書(shū)》 字?jǐn)?shù)731|閱讀4分鐘 佛陀說(shuō)教四圣諦:痛苦的存在、痛苦的原因、痛苦的消滅和導(dǎo)致...
    我是曲婭菲閱讀 668評(píng)論 0 1

友情鏈接更多精彩內(nèi)容