nacos那邊可以看到服務(wù),但是健康狀態(tài)在1和0來回變更,查看日志,一直有這條日志的報(bào)錯(cuò)。
本身使用沒什么問題,可以使用
default.ERROR: Nacos instance heartbeat failed: [0] caused: errCode: 400, errMsg: Current service DEFAULT_GROUP@@finance is persistent service, can't register ephemeral instance. ;. {"name":"main","trace":[]}
是不是webman這邊要實(shí)現(xiàn)什么功能啊
插件版本是1.2.2,我看默認(rèn)這個(gè)字段就是字符串類型的'false'
nacos版本是2.2.3 php版本是8.1。環(huán)境是centos7.6
我看了源碼,請(qǐng)求的nacos接口,都是v1,目前nacos比較新的版本都是2.x.x,2.x的文檔,沒有心跳的api,是不是因?yàn)檫@個(gè)原因。但是我看v2的文檔,它是兼容v1的
你的這個(gè)是因?yàn)橹白?cè)的是臨時(shí)實(shí)例,將臨時(shí)實(shí)例修改為非臨時(shí)實(shí)例時(shí),nacos會(huì)報(bào)400錯(cuò)誤,具體可自行百度can't register ephemeral instance相關(guān)內(nèi)容
ephemeral這個(gè)字段一直都默認(rèn)的‘false’,應(yīng)該是注冊(cè)的非臨時(shí)實(shí)例吧。非臨時(shí)實(shí)例需要心跳嗎
按照目前的條件,ephemeral這個(gè)字段一直都默認(rèn)的‘false’,應(yīng)該是注冊(cè)的非臨時(shí)實(shí)例吧。心跳的發(fā)送信息,我也打印看了,也是非臨時(shí)實(shí)例的心跳。但是還是提示service DEFAULT_GROUP@@finance is persistent service, can't register ephemeral instance
按照網(wǎng)上的說法,把raft文件夾內(nèi)的清除,重啟nacos。其實(shí)并未解決問題。因?yàn)閺拈_始就注冊(cè)的非臨時(shí)實(shí)例,后續(xù)發(fā)送的心跳也是非臨時(shí)實(shí)例的心跳參數(shù),目前還是這個(gè)錯(cuò)誤日志。但是我覺得應(yīng)該不是該插件的問題了
我這邊經(jīng)過多個(gè)nacos-server版本的測(cè)試。2.0.3及之前的,沒有 is persistent service, can't register ephemeral instance這個(gè)報(bào)錯(cuò),但是會(huì)出現(xiàn)2個(gè)實(shí)例,1個(gè)健康,1個(gè)不健康這個(gè)問題。2.0.3之后的,沒有這個(gè)2個(gè)實(shí)例的問題,但是會(huì)出現(xiàn)is persistent service, can't register ephemeral instance
好的,感謝感謝,辛苦了。我這邊查了一些資料,資料上說,對(duì)于臨時(shí)實(shí)例,需要服務(wù)提供者主動(dòng)向nacos發(fā)送心跳,5s一次,15s不發(fā),就從服務(wù)中剔除。對(duì)于永久實(shí)例,變成了由nacos主動(dòng)探測(cè)服務(wù)提供者,它的探測(cè)周期是 2000 毫秒 + 隨機(jī)數(shù)(5000 毫秒以內(nèi)),如果檢測(cè)異常會(huì)將此服務(wù)實(shí)例,標(biāo)記為非健康實(shí)例,但不會(huì)把服務(wù)實(shí)例向臨時(shí)實(shí)例那樣進(jìn)行刪除。
在nacos2.0.4版本下,我嘗試在app.php中將要注冊(cè)的實(shí)例,'ephemeral' => 'true',主動(dòng)標(biāo)記為臨時(shí)實(shí)例,則一切正常了,也不會(huì)出現(xiàn)心跳的錯(cuò)誤日志了??赡茏兿嗟恼f明,對(duì)于永久實(shí)例,是不需要服務(wù)提供者主動(dòng)心跳的
以上猜測(cè),僅供參考,對(duì)nacos,我還是初學(xué)者
我好像找到原因了。根據(jù)上面的規(guī)則,永久實(shí)例是需要接受探測(cè)的,因?yàn)槲业膎acos是在容器內(nèi),如果配置的是127.0.0.1的話,nacos容器對(duì)宿主機(jī)的探測(cè)肯定是失敗的,我調(diào)整后,讓容器可以訪問宿主后,這個(gè)永久實(shí)例開始保持健康了,但是日志中仍然有主動(dòng)心跳報(bào)錯(cuò)的日志,應(yīng)該是需要移除那些永久實(shí)例的主動(dòng)心跳
總的來說,如果nacos部署在docker的話,永久實(shí)例要保證容器內(nèi)的nacos可以訪問到服務(wù)提供者,這種容器內(nèi)的nacos-server其實(shí)建議直接使用臨時(shí)實(shí)例即可。
如果nacos是單獨(dú)部署的,或者mse的這種,可以使用永久實(shí)例,但是最好等待插件修復(fù)永久實(shí)例主動(dòng)心跳的bug
總的來說,如果nacos部署在docker的話,永久實(shí)例要保證容器內(nèi)的nacos可以訪問到服務(wù)提供者,這種容器內(nèi)的nac> os-server其實(shí)建議直接使用臨時(shí)實(shí)例即可。
如果nacos是單獨(dú)部署的,或者mse的這種,可以使用永久實(shí)例,但是最好等待插件修復(fù)永久實(shí)例主動(dòng)心跳的bug
其實(shí)也不是,因?yàn)楸镜販y(cè)試時(shí)候下意識(shí)會(huì)注冊(cè)127.0.0.1,所以nacos如果在docker容器中會(huì)探測(cè)不到,但在實(shí)際生產(chǎn)環(huán)境中,填寫127.0.0.1的場(chǎng)景基本上不存在,所以大可不必?fù)?dān)心;
而當(dāng)nacos使用docker進(jìn)行本地開發(fā)環(huán)境部署的時(shí)候,為了保持統(tǒng)一,大概率其他項(xiàng)目也會(huì)同時(shí)使用docker環(huán)境,所以如果想要在開發(fā)環(huán)境中使用,其實(shí)注冊(cè)的時(shí)候通過host.docker.internal即可
心跳的發(fā)送信息如下:
{
["serviceName"]=>
string(11) "finance"
["ip"]=>
string(9) "127.0.0.1"
["port"]=>
int(9514)
["groupName"]=>
string(13) "DEFAULT_GROUP"
["namespaceId"]=>
string(0) ""
["ephemeral"]=>
bool(false)
["beat"]=>
string(58) "{"ip":"127.0.0.1","port":9514,"serviceName":"finance"}"
}