您好,登錄后才能下訂單哦!
本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里
Eureka是Netflix開(kāi)發(fā)的服務(wù)發(fā)現(xiàn)框架,本身是一個(gè)基于REST的服務(wù),SpringCloud將它集成在其子項(xiàng)目spring-cloud-netflix中,以實(shí)現(xiàn)SpringCloud的服務(wù)發(fā)現(xiàn)功能。
角色職責(zé)如下:
1)、Register:服務(wù)注冊(cè)中心,它是一個(gè)Eureka Server ,提供服務(wù)注冊(cè)和發(fā)現(xiàn)功能。
2)、Provider:服務(wù)提供者,它是一個(gè)Eureka Client ,提供服務(wù)。
3)、Consumer:服務(wù)消費(fèi)者,它是一個(gè)Eureka Cient ,消費(fèi)服務(wù)。
1)、Registe服務(wù)注冊(cè)
當(dāng)Client向Server 注冊(cè)時(shí),Client 提供自身的元數(shù)據(jù),比如IP 地址、端口、運(yùn)行狀況指標(biāo)的Uri 、主頁(yè)地址等信息。
2)、Renew服務(wù)續(xù)約
Client 在默認(rèn)的情況下會(huì)每隔30 秒發(fā)送一次心跳來(lái)進(jìn)行服務(wù)續(xù)約。通過(guò)服務(wù)續(xù)約來(lái)告知Server該Client仍然可用。正常情況下,如果Server在90 秒內(nèi)沒(méi)有收到Client 的心跳,Server會(huì)將Client 實(shí)例從注冊(cè)列表中刪除。官網(wǎng)建議不要更改服務(wù)續(xù)約的間隔時(shí)間。
3)、Fetch Registries獲取服務(wù)注冊(cè)列表信息
Client 從Server 獲取服務(wù)注冊(cè)表信息,井將其緩存在本地。Client 會(huì)使用服務(wù)注冊(cè)列表信息查找其他服務(wù)的信息,從而進(jìn)行遠(yuǎn)程調(diào)用。該注冊(cè)列表信息定時(shí)(每30 秒) 更新一次。
4)Cancel服務(wù)下線(xiàn)
Client 在程序關(guān)閉時(shí)可以向Eureka Server 發(fā)送下線(xiàn)請(qǐng)求。發(fā)送請(qǐng)求后,該客戶(hù)端的實(shí)例信息將從Server 的服務(wù)注冊(cè)列表中刪除。該下線(xiàn)請(qǐng)求不會(huì)自動(dòng)完成,需要在程序關(guān)閉時(shí)調(diào)用以下代碼:
DiscoveryManager.getinstance().shutdownComponent();
5) Eviction服務(wù)下線(xiàn)
在默認(rèn)情況下,當(dāng)Client 連續(xù)90 秒沒(méi)有向Server 發(fā)送服務(wù)續(xù)約(即心跳〉時(shí),Server 會(huì)將該服務(wù)實(shí)例從服務(wù)注冊(cè)列表刪除,即服務(wù)下線(xiàn)。
主要包括兩個(gè)注冊(cè)中心(集群)
node01-eureka-7001
node01-eureka-7002
一個(gè)服務(wù)提供方
node01-provider-8001
一個(gè)服務(wù)消費(fèi)方
node01-consume-8002
# cloud host
127.0.0.1 registry01.com
127.0.0.1 registry02.com
127.0.0.1 provider-8001.com
1)Eureka注冊(cè)中心依賴(lài)
<dependencies>
<!--eureka-server服務(wù)端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
2)核心配置文件
server:
port: 7001
spring:
application:
name: node01-eureka-7001
eureka:
instance:
hostname: registry01.com
prefer-ip-address: true
client:
# false表示不向注冊(cè)中心注冊(cè)自己
register-with-eureka: false
# false表示該端就是注冊(cè)中心,維護(hù)服務(wù)實(shí)例,不去檢索服務(wù)
fetch-registry: false
service-url:
# 單點(diǎn)注冊(cè)中心
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
# 集群注冊(cè)中心
defaultZone: http://registry02.com:7002/eureka/
這里采用集群的配置,如果有多個(gè)集群,逗號(hào)分隔,如下寫(xiě)法就好:
defaultZone:
http://registry02.com:7002/eureka/,
http://registry02.com:7002/eureka/
3)啟動(dòng)類(lèi)注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer // 注冊(cè)中心注解
public class Application_7001 {
public static void main(String[] args) {
SpringApplication.run(Application_7001.class,args) ;
}
}
這樣注冊(cè)中心代碼完成。
4)啟動(dòng)項(xiàng)目,如圖
暫時(shí)沒(méi)有服務(wù)注冊(cè)進(jìn)來(lái)。
1)核心依賴(lài)
<dependencies>
<!-- 將微服務(wù)provider側(cè)注冊(cè)進(jìn)eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
</dependencies>
2)配置文件如下
server:
port: 8003
spring:
application:
name: node01-provider-8001
eureka:
instance:
hostname: provider-8001
prefer-ip-address: true
client:
service-url:
# 集群注冊(cè)中心
defaultZone: http://registry01.com:7001/eureka/,http://registry02.com:7002/eureka/
3)提供一個(gè)接口服務(wù)
@RestController
public class ProviderController {
@RequestMapping("/getInfo")
public Map<String,String> getInfo (){
Map<String,String> infoMap = new HashMap<>() ;
infoMap.put("作者:","知了一笑") ;
infoMap.put("時(shí)間:","2019-05-18") ;
infoMap.put("主題:","SpringCloud微服務(wù)框架") ;
return infoMap ;
}
}
4)啟動(dòng)類(lèi)上需要注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient // 本服務(wù)啟動(dòng)后會(huì)自動(dòng)注冊(cè)進(jìn)eureka服務(wù)中
@EnableDiscoveryClient
public class Application_8001 {
public static void main(String[] args) {
SpringApplication.run(Application_8001.class,args) ;
}
}
服務(wù)消費(fèi)方和提供方的代碼邏輯基本一致。
1)配置文件
這里不需要注冊(cè)自己,只是單純從注冊(cè)中心獲取服務(wù)提供方的消息。
server:
port: 8002
spring:
application:
name: node01-consume-8002
eureka:
client:
register-with-eureka: false
service-url:
# 集群注冊(cè)中心
defaultZone: http://registry01.com:7001/eureka/,http://registry02.com:7002/eureka/
2)消費(fèi)服務(wù)代碼
注意這里的【server_name】就服務(wù)提供方的
spring:
application:
name: node01-provider-8001
使用RestTemplate調(diào)用服務(wù)。
@RestController
public class ConsumeController {
@Autowired
private RestTemplate restTemplate ;
String server_name = "node01-provider-8001" ;
@RequestMapping("/showInfo")
public Map<String,String> showInfo (){
return restTemplate.getForObject("http://"+server_name+":8001/getInfo",Map.class) ;
}
}
到這里,一個(gè)基于Eureka的服務(wù)注冊(cè)與發(fā)現(xiàn)就完成了。
3)四個(gè)服務(wù)全部啟動(dòng)
4)訪(fǎng)問(wèn)如下地址
http://localhost:8002/showInfo
獲取服務(wù)接口結(jié)果
{
"主題:": "SpringCloud微服務(wù)框架",
"作者:": "知了一笑",
"時(shí)間:": "2019-05-18"
}
GitHub·地址
https://github.com/cicadasmile/spring-cloud-base
GitEE·地址
https://gitee.com/cicadasmile/spring-cloud-base
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。