在講注冊中心內容時,我們已經知道Nacos本質上是一個服務,那么,是服務就會有接口,下面阿鑒給大家介紹一下注冊實例接口
更多OpenAPI可查看Nacos官網:https://nacos.io/zh-cn/docs/open-api.html
接口:/nacos/v1/ns/instance
請求方式:POST
參數:
名稱 | 類型 | 是否必選 | 描述 |
---|---|---|---|
ip | 字符串 | 是 | 服務實例IP |
port | int | 是 | 服務實例port |
namespaceId | 字符串 | 否 | 命名空間ID |
weight | double | 否 | 權重 |
enabled | boolean | 否 | 是否上線 |
healthy | boolean | 否 | 是否健康 |
metadata | 字符串 | 否 | 擴展信息 |
clusterName | 字符串 | 否 | 集群名 |
serviceName | 字符串 | 是 | 服務名 |
groupName | 字符串 | 否 | 分組名 |
ephemeral | boolean | 否 | 是否臨時實例 |
測試:
發送一個curl請求,當然使用Postman也可以
curl-i-XPOST\-H"Content-Type:application/json"\'http://192.168.2.11:8850/nacos/v1/ns/instance?serviceName=test&ip=123.123.123.123&port=8081&username=nacos&password=nacos'
打開Nacos控制臺查看效果
由于只傳了必要參數,所以命名空間和分組名稱都是默認的。
注意:由于我們只注冊了實例,并未定時發送心跳,所以實例會在一定時間內被Nacos剔除
打開詳情
ip和端口號即為我們填入的信息
相信小伙伴已經發現了,我們在調用接口時傳入的參數是什么,注冊到Nacos上的實例信息就是什么,那么在實際項目中能不能也這樣玩呢?
在之前我們使用Nacos時,我們使用的配置是這樣:
server:port:8080spring:application:name:my-ordercloud:nacos:discovery:server-addr:192.168.2.11:8850username:nacospassword:nacos
此時我們并未使用ip和port配置,Nacos將自動發現本地ip地址進行注冊, port則使用
server.port
現在我們將ip
和port
加上
server:port:8080spring:application:name:my-ordercloud:nacos:discovery:server-addr:192.168.2.11:8850ip:123.123.123.123port:1234username:nacospassword:nacos
但實際上我本機ip地址為192.168.65.91
啟動服務并在控制臺查看服務詳情
此時IP和端口就成了我們實際配置了的
心急的小伙伴這時候可能就會給阿鑒個大嘴巴子:講那么多,這有啥用?!
阿鑒:不急不急
在實際項目使用時,我們肯定傾向于讓服務自己發現IP和端口號進行注冊。
多實例部署時,誰關心你的本機ip是個啥,一個服務一會在那臺機器,一會在這臺機器,不可能每次部署時都改下配置。
但是有一種情況讓Nacos自己發現IP是不可行的。那就是使用容器部署服務。
比如我們在192.168.2.11
的服務器上部署一個my-goods
服務,此時Nacos自動發現的IP實際上是容器內部IP,如172.19.0.16
現在嘗試使用在192.168.2.12
的服務器上的my-order
服務,對my-goods
服務進行調用,此時會收到一個拒絕連接錯誤,因為調用的地址是172.19.0.16
,但實際需要的地址是192.168.2.11
簡單的辦法就是在配置文件中加上ip的配置,如
server:port:8081spring:application:name:my-goodscloud:nacos:discovery:server-addr:192.168.2.11:8850ip:192.168.2.11username:nacospassword:nacos
此時my-goods注冊到Nacos上的地址就是服務器的地址了。
但是這種方式有個很明顯的弊端,就是服務遷移時需要改動配置,多實例部署時需要頻繁改動配置。
我們把配置改成如下:
server:port:8081spring:application:name:my-goodscloud:nacos:discovery:server-addr:192.168.2.11:8850ip:${HOST_IP_ADDRESS:127.0.0.1}username:nacospassword:nacos
此時ip配置中增加了變量:HOST_IP_ADDRESS
docker-compose.yaml
version:'3.5'services:my-goods:restart:alwaysimage:my-goodscontainer_name:my-goodsenvironment:HOST_IP_ADDRESS:$HOST_IP_ADDRESSTZ:Asia/Shanghaiports:-8081:8081
在執行docker-compose
前,將HOST_IP_ADDRESS
輸出到環境變量中
exportHOST_IP_ADDRESS=$(ifconfigeth0|grep-E"([0-9]{1,3}\.){3}[0-9]{1,3}"|awk'{print$2}'|cut-f2-"d:")
這行命令表示將本機ip輸出到環境變量
HOST_IP_ADDRESS
中這個步驟可根據不同的部署工具進行執行,比如阿鑒用的是gitlab-ci,就是在gitlab-ci中執行的。
如此,使用容器部署的方式便優雅完成了~
當我們發現了奧秘:只要我們配了IP,配的IP是啥,注冊到Nacos的IP就是啥。
掌握奇技淫巧的程序員們有沒有想到一些騷操作呢?阿鑒這里卻是想到了一個哦~
<img src="https://notes.zijiancode.cn/nacos/my-sidecar.png" />
my-sidercar將my-integral的信息注冊到Nacos上
新建一個my-sidecar
服務,配置如下
server:port:8082spring:application:name:my-sidecarmain:allow-bean-definition-overriding:truecloud:nacos:discovery:server-addr:192.168.1.11:8850namespace:publicservice:my-integralip:192.168.65.91port:8083username:nacospassword:nacosmanagement:endpoints:web:exposure:include:"*"
注冊到Nacos的信息是
my-integral
服務的
新建一個Spring Boot my-integral
服務(注意不是SpringCloud服務,不集成Nacos),配置如下
server:port:8083spring:application:name:my-integral
spring.application.name 配置加不加無所謂
在my-integral
服務中編寫接口
@Slf4j@RestController@RequestMapping("/integral")publicclassIntegralController{@GetMapping("/remain")publicStringremain(){log.info("積分服務被調用了");Randomrandom=newRandom();inti=random.nextInt(100);return"您當前的積分為:"+i;}}
啟動項目并打開控制臺
該信息是由my-sidecar注冊而來,而非my-integer所注冊的,因為my-integral并未集成Nacos
在my-order
編寫調用代碼
@RestController@RequestMapping("/order")publicclassOrderController{@ResourceprivateRestTemplaterestTemplate;@GetMapping("/integral")publicStringintegral(){Stringurl="http://my-integral/integral/remain";returnrestTemplate.getForObject(url,String.class);}}
啟動my-order
測試
服務調用成功了
回顧一下我們做了什么:我們使用配置ip的奧秘將一個并未集成Nacos的my-integral
信息注冊到了Nacos上,然后通過my-order
成功發起了調用~
這樣做有什么意義呢?難道真就為了騷一把?不是的。
假設我們現在有這樣的需求,有一個老項目old-project
想要加入到微服務系統中,但是這個old-project
集成Nacos的成本過高,那么我們就可以使用這樣的方式了。
這樣的方式支持非Java語言哦~
這里阿鑒偷偷告訴大家,這個方式其實有個術語,叫做:邊車模式。
其實Nacos已經實現了邊車模式,集成方式非常簡單
在原Nacos項目(my-sidecar)中引入依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sidecar</artifactId></dependency>
編寫配置
server:port:8082spring:application:name:my-sidecarmain:allow-bean-definition-overriding:truecloud:nacos:discovery:server-addr:192.168.1.11:8850service:my-integralsidecar:ip:127.0.0.1port:8083health-check-url:http://127.0.0.1:8083/integral/healthmanagement:endpoints:web:exposure:include:"*"
ip:my-integral的IP
port: my-integral的端口
health-check-url: my-integral的健康檢查地址
在my-integral
服務中增加接口
@RestController@RequestMapping("/integral")publicclassIntegralController{@GetMapping("/health")publicMap<String,String>health(){Map<String,String>map=newHashMap<>(2);map.put("status","UP");returnmap;}}
返回的內容必須是:status: UP
測試
感謝各位的閱讀,以上就是“Nacos的作用是什么”的內容了,經過本文的學習后,相信大家對Nacos的作用是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是本站,小編將為大家推送更多相關知識點的文章,歡迎關注!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
北京時間5月27日2:45,意甲第37輪,桑普多利亞主場對陣薩索洛。上半場,加比亞迪尼前場搶斷后推射破門,貝拉爾迪迅速扳平比分,僅過了兩分鐘,馬特烏斯-恩里克頭球破門反超比分。下半場,埃爾利奇自擺烏龍,最終,提前四輪降級的桑普多利亞在本賽季最后一場主場比賽中,2-2戰平薩索洛,桑普多利亞已經十輪聯賽未能取勝。(資料圖片)>" content="">點擊查看本場比賽詳細數據>>>" co...
據了解,2021年,以美元計價,我國進出口規模達到了6.05萬億美元,在2013年首次達到4萬億美元后,2021年連續跨過5萬億美元、6萬億美元兩大臺階,達到了歷史高點。海關數據顯示,2021年我國貨物貿易進出口總值39.1萬億元人民幣,比2020年增長21.4%。其中,出口21.73萬億元,增長21.2%;進口17.37萬億元,增長21.5%。根據最新數據測算,2021年前三季度,我國出口國際市...
順豐同城騎士單日收入過萬是真的嗎?【#順豐同城回應騎士單日收入過萬#:含用戶打賞約7856元】4月11日晚間,@順豐同城 回應網上關于“順豐同城騎士收入過萬”的消息。據悉,近日網上截圖顯示一順豐同城騎士4月9日實際收入10067.75 元。順豐同城表示,經后臺查詢后確認,該順豐同城騎士共完成60筆同城配送訂單,系企業用戶下單,訂單傭金計提總額達10067.75 元。說明顯示...