自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

作者 | 磊哥

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

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

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

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

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

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

1.服務(wù)注冊(cè)

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

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

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ù)注冊(cè)成功,其中:

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

與此同時(shí)我們打開(kāi) Nacos 管理后臺(tái)也可以看到我們注冊(cè)的服務(wù),如下圖所示:

點(diǎn)擊服務(wù)詳情,可以看到我們注冊(cè)的 IP 地址和端口,如下圖所示:

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

SDK 模式需要先創(chuàng)建一個(gè) Spring Cloud 項(xiàng)目,項(xiàng)目創(chuàng)建方法請(qǐ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.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</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)與注冊(cè)配置,其中子屬性 server-addr 指定 Nacos 服務(wù)器主機(jī)和端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 注冊(cè)到 nacos 的指定 namespace,默認(rèn)為 public
spring.cloud.nacos.discovery.namespace=public

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

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

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

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

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

2.2.1 添加 SDK

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

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</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)與注冊(cè)配置,其中子屬性 server-addr 指定 Nacos 服務(wù)器主機(jī)和端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 注冊(cè)到 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èn)地址。從這里可以看出,在服務(wù)調(diào)用者這里無(wú)需知道服務(wù)提供者的具體地址,只需要調(diào)用 Nacos 提供的服務(wù)名就可以了,這樣就實(shí)現(xiàn)了服務(wù)提供者和調(diào)用者的(請(qǐng)求地址)解耦了。

小結(jié)

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

責(zé)任編輯:姜華 來(lái)源: Java中文社群
相關(guān)推薦

2022-02-07 07:10:32

服務(wù)注冊(cè)功能

2021-04-18 07:33:20

項(xiàng)目Springboot Nacos

2022-03-10 07:41:36

調(diào)用服務(wù)Nacos

2022-04-26 05:36:42

服務(wù)治理模式

2010-03-18 08:55:50

C#

2012-10-16 09:40:38

洗牌算法

2010-10-14 14:33:15

MySQL多表聯(lián)查

2011-08-09 13:50:01

iPhone動(dòng)畫(huà)UIView

2010-09-09 19:53:50

2013-06-27 09:26:50

Android界面刷新

2010-04-25 17:34:30

負(fù)載均衡實(shí)現(xiàn)

2021-04-20 17:20:59

SpringColud EurekaNetflix開(kāi)發(fā)

2015-12-25 11:00:52

Zookeeper的Python

2020-09-23 09:24:01

堆棧開(kāi)發(fā)實(shí)現(xiàn)

2024-03-29 11:33:23

轉(zhuǎn)換[]bytestring

2011-06-23 09:07:16

2017-11-16 09:20:20

內(nèi)存虛擬化技術(shù)

2022-02-21 08:18:38

option編程模式

2010-07-14 10:30:26

Perl多線程

2021-12-08 10:47:35

RabbitMQ 實(shí)現(xiàn)延遲
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)