<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Nacos服務(wù)注冊與發(fā)現(xiàn)的2種實(shí)現(xiàn)方法!

          共 5453字,需瀏覽 11分鐘

           ·

          2022-02-09 16:48

          作者 | 磊哥

          來源 | Java中文社群(ID:javacn666)

          轉(zhuǎn)載請聯(lián)系授權(quán)(微信ID:GG_Stone)

          Spring Cloud Alibaba 技術(shù)體系中的 Nacos,提供了兩個(gè)重要的功能:注冊中心(服務(wù)注冊與發(fā)現(xiàn))功能和配置中心功能。

          其中注冊中心解決了微服務(wù)調(diào)用中,服務(wù)提供者和服務(wù)調(diào)用者的解耦,讓程序開發(fā)者可以無需過多的關(guān)注服務(wù)提供者和調(diào)用者的運(yùn)行細(xì)節(jié),只需要通過 Nacos 的注冊中心就可以實(shí)現(xiàn)兩者的互聯(lián)互通,相當(dāng)于實(shí)現(xiàn)了遠(yuǎn)程服務(wù)本地化,并且提供了健康檢查等機(jī)制。

          而 Nacos 注冊中心又提供了兩種服務(wù)注冊和發(fā)現(xiàn)的方法:OpenAPI 方法和(Nacos)SDK 方法。

          所謂的 OpenAPI 是指通過 Nacos 提供的開放 API 地址實(shí)現(xiàn)服務(wù)的注冊與發(fā)現(xiàn);而 SDK 方法是通過 Nacos 提供的 SDK 框架,也就是使用 spring-cloud-starter-alibaba-nacos-discovery 框架來實(shí)現(xiàn)服務(wù)注冊與發(fā)現(xiàn)的功能。

          1.服務(wù)注冊

          1.1 服務(wù)注冊:OpenAPI模式

          OpenAPI 的使用方式相對(duì)來說比較簡單,首先打開系統(tǒng)的命令行,在系統(tǒng)命令行中使用以下命令實(shí)現(xiàn)服務(wù)注冊:

          curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=spring-cloud-nacos-producer&ip=192.168.76.224&port=8081'

          以上命令的執(zhí)行結(jié)果如下圖所示:當(dāng)返回“ok”結(jié)果時(shí),表示服務(wù)注冊成功,其中:

          • serviceName:表示服務(wù)名。
          • ip:表示客戶端程序的 IP 地址。
          • port:表示客戶端程序的端口號(hào)。

          與此同時(shí)我們打開 Nacos 管理后臺(tái)也可以看到我們注冊的服務(wù),如下圖所示:點(diǎn)擊服務(wù)詳情,可以看到我們注冊的 IP 地址和端口,如下圖所示:

          1.2 服務(wù)注冊:SDK模式

          SDK 模式需要先創(chuàng)建一個(gè) Spring Cloud 項(xiàng)目,項(xiàng)目創(chuàng)建方法請參考:https://mp.weixin.qq.com/s/c4EHDWAlTXKr3Xl17biglA,項(xiàng)目創(chuàng)建成功之后添加 Nacos 的 SDK 框架支持,最后再配置 Nacos 的相關(guān)信息即可,具體實(shí)現(xiàn)如下。

          1.2.1 添加 SDK

          在 pom.xml 中添加 Nacos SDK 框架支持,具體配置如下:

          <dependency>
          ??<groupId>com.alibaba.cloudgroupId>
          ??<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
          dependency>

          1.2.2 Nacos 配置

          SDK 框架添加完成之后,需要在項(xiàng)目的配置文件中添加相應(yīng)的配置,具體配置內(nèi)容如下:

          # 應(yīng)用名稱
          spring.application.name=spring-cloud-nacos-producer
          # Nacos認(rèn)證信息
          spring.cloud.nacos.discovery.username=nacos
          spring.cloud.nacos.discovery.password=nacos
          # Nacos 服務(wù)發(fā)現(xiàn)與注冊配置,其中子屬性 server-addr 指定 Nacos 服務(wù)器主機(jī)和端口
          spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
          # 注冊到 nacos 的指定 namespace,默認(rèn)為 public
          spring.cloud.nacos.discovery.namespace=public

          設(shè)置完以上配置之后,啟動(dòng)當(dāng)前項(xiàng)目,程序會(huì)自己自動(dòng)注冊到 Nacos 服務(wù)端。

          2.服務(wù)發(fā)現(xiàn)

          服務(wù)被正確注冊到 Nacos 之后,就可以通過服務(wù)發(fā)現(xiàn)正常的調(diào)用服務(wù)提供者暴露的方法了,它的實(shí)現(xiàn)方法依然有以下兩種。

          2.1 服務(wù)發(fā)現(xiàn):OpenAPI模式

          在系統(tǒng)命令行中使用以下命令實(shí)現(xiàn)服務(wù)發(fā)現(xiàn):

          curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'

          執(zhí)行結(jié)果如下所示:以上內(nèi)容 JSON 格式化之后的信息如下:

          {
          ??"name":?"DEFAULT_GROUP@@spring-cloud-nacos-producer",
          ??"groupName":?"DEFAULT_GROUP",
          ??"clusters":?"",
          ??"cacheMillis":?10000,
          ??"hosts":?[
          ????{
          ??????"instanceId":?"192.168.76.224#8081#DEFAULT#DEFAULT_GROUP@@spring-cloud-nacos-producer",
          ??????"ip":?"192.168.76.224",
          ??????"port":?8081,
          ??????"weight":?1,
          ??????"healthy":?true,
          ??????"enabled":?true,
          ??????"ephemeral":?true,
          ??????"clusterName":?"DEFAULT",
          ??????"serviceName":?"DEFAULT_GROUP@@spring-cloud-nacos-producer",
          ??????"metadata":?{
          ????????"preserved.register.source":?"SPRING_CLOUD"
          ??????},
          ??????"instanceHeartBeatInterval":?5000,
          ??????"instanceHeartBeatTimeOut":?15000,
          ??????"ipDeleteTimeout":?30000
          ????}
          ??],
          ??"lastRefTime":?1644210068852,
          ??"checksum":?"",
          ??"allIPs":?false,
          ??"reachProtectionThreshold":?false,
          ??"valid":?true
          }

          其中:

          • healthy:表示是否開啟健康檢測功能,也就是定期的將自己的健康狀態(tài)報(bào)告給 Nacos 服務(wù)器端。
          • ephemeral:表示是否為臨時(shí)實(shí)例,臨時(shí)實(shí)例下線一段時(shí)間之后,會(huì)被 Nacos 直接剔除。
          • “"instanceHeartBeatInterval": 5000”:表示每 5s 執(zhí)行一次健康檢測。
          • “"instanceHeartBeatTimeOut": 15000”:表示如果超過 15s 沒有收到(客戶端)心跳包,就將此實(shí)例設(shè)置為非健康狀態(tài)。
          • “"ipDeleteTimeout": 30000”:表示如果超過 30s 沒有收到心跳包就剔除臨時(shí)實(shí)例。

          2.2 服務(wù)發(fā)現(xiàn):SDK模式

          與 SDK 實(shí)現(xiàn)服務(wù)注冊的步驟類似,服務(wù)發(fā)現(xiàn)也是先要?jiǎng)?chuàng)建 Spring Cloud 項(xiàng)目,然后添加 Nacos SDK 框架,再配置 Nacos 相關(guān)信息,最后編寫代碼來調(diào)用服務(wù)提供者提供的方法。

          2.2.1 添加 SDK

          在項(xiàng)目的 pom.xml 文件中,添加 Nacos SDK 框架支持,具體內(nèi)容如下:

          <dependency>
          ??<groupId>com.alibaba.cloudgroupId>
          ??<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
          dependency>

          2.2.2 配置 Nacos

          在項(xiàng)目的配置文件中添加如下 Nacos 的相關(guān)配置:

          # 應(yīng)用名稱
          spring.application.name=springcloud-nacos-consumer
          # Nacos認(rèn)證信息
          spring.cloud.nacos.discovery.username=nacos
          spring.cloud.nacos.discovery.password=nacos
          # Nacos 服務(wù)發(fā)現(xiàn)與注冊配置,其中子屬性 server-addr 指定 Nacos 服務(wù)器主機(jī)和端口
          spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
          # 注冊到 nacos 的指定 namespace,默認(rèn)為 public
          spring.cloud.nacos.discovery.namespace=public

          2.2.3 調(diào)用服務(wù)提供者

          最后一步在項(xiàng)目中使用 RestTemplate 對(duì)象,實(shí)現(xiàn)調(diào)用服務(wù)提供者暴露的方法。首先我們需要一個(gè) RestTemplate 對(duì)象,具體實(shí)現(xiàn)代碼如下:

          import?org.springframework.boot.SpringApplication;
          import?org.springframework.boot.autoconfigure.SpringBootApplication;
          import?org.springframework.cloud.client.discovery.EnableDiscoveryClient;
          import?org.springframework.cloud.client.loadbalancer.LoadBalanced;
          import?org.springframework.context.annotation.Bean;
          import?org.springframework.web.client.RestTemplate;

          @SpringBootApplication
          @EnableDiscoveryClient
          public?class?SpringcloudNacosConsumerApplication?{
          ????public?static?void?main(String[]?args)?{
          ????????SpringApplication.run(SpringcloudNacosConsumerApplication.class,?args);
          ????}
          ????@LoadBalanced
          ????@Bean
          ????public?RestTemplate?restTemplate()?{
          ????????return?new?RestTemplate();
          ????}
          }

          有了 RestTemplate 對(duì)象之后,我們就可以調(diào)用服務(wù)提供者了,調(diào)用代碼如下:

          import?org.springframework.beans.factory.annotation.Autowired;
          import?org.springframework.web.bind.annotation.RequestMapping;
          import?org.springframework.web.bind.annotation.RestController;
          import?org.springframework.web.client.RestTemplate;

          @RestController
          public?class?TestController?{
          ????@Autowired
          ????private?RestTemplate?restTemplate;
          ????@RequestMapping("/hi")
          ????public?String?hi(String?name)?{
          ????????//?調(diào)用服務(wù)提供者的?sayhi?方法,并將結(jié)果返回
          ????????return?restTemplate.getForObject("http://spring-cloud-nacos-producer/sayhi/"?+?
          ?????????????????????????????????????????name,String.class);
          ????}
          }

          其中“http://spring-cloud-nacos-producer/sayhi/xxx”中的“spring-cloud-nacos-producer”為 Nacos 的服務(wù)名,“/sayhi/xxx”為服務(wù)提供者提供的方法訪問地址。從這里可以看出,在服務(wù)調(diào)用者這里無需知道服務(wù)提供者的具體地址,只需要調(diào)用 Nacos 提供的服務(wù)名就可以了,這樣就實(shí)現(xiàn)了服務(wù)提供者和調(diào)用者的(請求地址)解耦了。

          小結(jié)

          Nacos 注冊中心提供了兩種服務(wù)注冊與發(fā)現(xiàn)的方法:OpenAPI 方式和 SDK 方式,其中比較常用的是 SDK 的實(shí)現(xiàn)方式,也就是在項(xiàng)目中添加 Nacos 的 SDK,再配置好 Nacos 的相關(guān)配置就可以實(shí)現(xiàn)服務(wù)的自動(dòng)注冊和調(diào)用了。

          是非審之于己,毀譽(yù)聽之于人,得失安之于數(shù)。

          公眾號(hào):Java中文社群

          Java面試合集:gitee.com/mydb/interview


          往期推薦

          Spring Cloud Alibaba Nacos 服務(wù)注冊與發(fā)現(xiàn)功能實(shí)現(xiàn)!

          2022-02-07

          Spring Boot Admin,賊好使!

          2022-01-14

          Spring Boot Admin 報(bào)警提醒和登錄驗(yàn)證功能實(shí)現(xiàn)!

          2022-01-26



          瀏覽 80
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产乱人乱偷精品 | 五月天久久影院 | 日韩无码网址 | 日韩a在线观看 | 中文资源在线aⅴ |