国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基于Spring boot2服務注冊發(fā)現(xiàn)與調(diào)用

IT那活兒 / 1483人閱讀
基于Spring boot2服務注冊發(fā)現(xiàn)與調(diào)用

在微服務架構(gòu)中,業(yè)務都會被拆分成一個獨立的服務,服務與服務的通訊是基于httprestful的。Springcloud有兩種服務調(diào)用方式,一種是ribbon+restTemplate模式,另一種是feign模式:


  • Ribbon+RestTemplate

Ribbon是一個基于HTTP和TCP客戶端的負載均衡的工具。它可以 在客戶端 配置RibbonServerList(服務端列表),使用HttpClient或RestTemplate模擬http請求,步驟比較繁瑣。


  • Feign

Feign是在Ribbon的基礎上進行了一次改進,是一個使用起來更加方便的HTTP客戶端。采用接口的方式,只需要創(chuàng)建一個接口,然后在上面添加注解即可,將需要調(diào)用的其他服務的方法定義成抽象方法即可,不需要自己構(gòu)建 http請求。然后就像是調(diào)用自身工程的方法調(diào)用,而感覺不到是調(diào)用遠程方法,使得編寫客戶端變得非常容易。 

Feign和RestTemplate都內(nèi)置了Ribbon


創(chuàng)建Eureka注冊中心


在SpringCloud中,有多個組件可以起到服務發(fā)現(xiàn)代理的作用,但一般比較常用、較專業(yè)、可用性較高的是Eureka,Eureka分為Server和Client,Server是注冊中心,Client是注冊/調(diào)用方,接下來我們構(gòu)建EurekaServer來啟動一個服務發(fā)現(xiàn)代理。


1.創(chuàng)建一個maven項目,在pom.xml添加依賴jar文件

org.springframework.boot

spring-boot-starter-parent

2.0.6.RELEASE

org.springframework.cloud

spring-cloud-dependencies

Finchley.SR1

pom

import

org.springframework.cloud

spring-cloud-starter-netflix-eureka-server

2.創(chuàng)建application.yml文件

接下來,需要創(chuàng)建src/main/resources/application.yml文件(或application.properties,兩者作用是一樣的,但.yml文件為樹形結(jié)構(gòu),更容易理解)。添加如下配置:


###服務端口號

server:

port:1011

###服務名稱

spring:

application:

name:app-eureka-center

eureka:

instance:

#注冊中心地址

hostname:192.168.199.101

###客戶端調(diào)用地址

client:

serviceUrl:

defaultZone:http://192.168.199.101:1011/eureka/

###是否將自己注冊到Eureka服務中,因為該應用本身就是注冊中心,不需要再注冊自己(集群的時候為true)

register-with-eureka:false

###是否從Eureka中獲取注冊信息,因為自己為注冊中心,不會在該應用中的檢索服務信息

fetch-registry:false

server:

enable-self-preservation:true


3.創(chuàng)建服務啟動類

這一步是在啟動類中添加@EnableEurekaServer注解,就可以讓此應用程序成為一個Eureka服務。

@SpringBootApplication

@EnableEurekaServer//申明這是一個Eureka服務

publicclass SncApplication {

publicstatic void main(String[] args) {

SpringApplication.run(SncApplication.class,args);

}

}


4.項目結(jié)構(gòu)圖


5.測試訪問Eureka注冊中心

如上圖顯示,注冊中心已搭建成功


創(chuàng)建服務提供者

1.創(chuàng)建一個maven項目,在pom.xml中導入依賴jar

org.springframework.boot

spring-boot-starter-parent

2.1.12.RELEASE

com.shsnc

snc-base-service

1.0

snc-base-service

snc-base-service

org.springframework.cloud

spring-cloud-dependencies

Greenwich.SR5

pom

import



  org.springframework.cloud

  spring-cloud-starter-openfeign


  org.springframework.cloud

  spring-cloud-starter-netflix-eureka-client

上面的pom文件為非完整版,只把其中的重要配置貼出來了


2.創(chuàng)建application.properties文件

在src/main/java/resources/application.yml創(chuàng)建如下配置:

spring.application.name=base-user-center

server.port=10011

eureka.client.serviceUrl.defaultZone=http://192.168.199.101:1011/eureka/


3.創(chuàng)建UserController接口

@RestController

@RequestMapping("/user")

publicclass UserController {

@RequestMapping("/getUserList")

@ResponseBody

publicModelMap getUserList() {

ModelMapmodelMap = new ModelMap();

ListuserList = new ArrayList();

userList.add("用戶1");

userList.add("用戶2");

userList.add("用戶3");

modelMap.put("data",userList);

returnmodelMap;

}

}


4.創(chuàng)建啟動類

@SpringBootApplication

@EnableFeignClients

@EnableEurekaClient

publicclass SncApplication {


publicstatic void main(String[] args) {

SpringApplication.run(SncApplication.class,args);

}

}


5.測試服務是否正常 

如上圖顯示,接口服務正常


6.在eureka注冊中心上的效果

在這個demo中,我創(chuàng)建了一個名叫base-user-center的服務,在啟動后,可以在Eureka管理界面看到該服務。

可以看到本地啟動的base-user-center服務已經(jīng)注冊成功


創(chuàng)建服務消費者


服務注冊成功后,我們可以使用另外的服務客戶端來查找和調(diào)用該服務base-user-center,而不用知道該服務的位置。現(xiàn)在我們創(chuàng)建另一個服務,讓這兩個服務互相調(diào)用。

為了實現(xiàn)這個目的,我們需要引入客戶端庫。能夠?qū)崿F(xiàn)服務查找和調(diào)用功能的在SpringCloud中有三個客戶端,分別為:


  • Spring DiscoveryClient.

  • RestTemplate

  • Netflix Feign

下面我們使用Feign來實現(xiàn)服務調(diào)用。


1.創(chuàng)建一個maven項目,在pom.xml中導入依賴jar文件


com.shsnc

snc-kanban-service

1.0

snc-kanban-service

snc-kanban-service


org.springframework.boot

spring-boot-starter-parent

2.1.2.RELEASE


org.springframework.cloud

spring-cloud-dependencies

Greenwich.SR5

pom

import

org.springframework.cloud

spring-cloud-starter-openfeign

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client


2.創(chuàng)建application.properties文件

spring.application.name=snc-kanban-service

server.port=30006

eureka.client.serviceUrl.defaultZone=http://192.168.199.101:1011/eureka/


3.創(chuàng)建feign客戶端接口

我們通過@FeignClient注解來標志服務,其中的name為在Eureka中注冊的應用ID。在這個接口中的send方法中,我們加上@RequestMapping注解來將此方法的實現(xiàn)映射到url。參數(shù)的傳遞通過@PathVariable注解將接口參數(shù)映射到url參數(shù)。遠程接口的返回值將自動映射到接口返回值。

@FeignClient(name= "BASE-USER-CENTER")

publicinterface UserService {

@RequestMapping(value= "/user/getUserList")

publicModelMap getUserList();

}


4.創(chuàng)建消費者接口

@RestController

@RequestMapping("/order")

publicclass OrderController {

@Autowired

UserServiceuserService;

@RequestMapping("/getUserList")

publicModelMap getUserList() {

returnuserService.getUserList();

}


5.創(chuàng)建啟動類

@SpringBootApplication

@EnableEurekaClient

@EnableFeignClients

publicclass SncApplication {


publicstatic void main(String[] args) {

SpringApplication.run(SncApplication.class,args);

}

}


6.測試消費者調(diào)用服務提供者接口

如上圖所示,消費者成功調(diào)用了服務者提供的接口

實際應用及可用性保證機制

在上面的過程中,我們構(gòu)建了一整個服務注冊發(fā)現(xiàn)調(diào)用流程,在其中可以發(fā)現(xiàn)很多問題,比如Eureka掛掉怎么辦,客戶端聯(lián)系不上Eureka怎么辦,似乎這樣的架構(gòu)是非常脆弱的,但SpringCloud提供了一系列的機制來保證可用性,下面來進行分析。


1.服務發(fā)現(xiàn)集群

每個服務實例啟動時會通過一個或多個服務發(fā)現(xiàn)代理進行注冊它們的IP等信息,但即使只在一個服務發(fā)現(xiàn)節(jié)點注冊。由于服務發(fā)現(xiàn)代理間使用了數(shù)據(jù)傳播的點對點模型,每個節(jié)點的數(shù)據(jù)都會同步到服務發(fā)現(xiàn)集群中的所有節(jié)點。

在注冊成功后,每個服務實例會按時間間隔發(fā)送心跳包,來推送自身的狀態(tài),一段時間沒有發(fā)送心跳包時,會被從服務實例池中移除。

通過這樣的方式,即使單個服務發(fā)現(xiàn)代理節(jié)點宕機,其他節(jié)點也能繼續(xù)提供同樣的服務。


2.客戶端負載均衡

上圖是加入了客戶端緩存和負載均衡,和直接請求服務發(fā)現(xiàn)代理相比,進行了如下優(yōu)化:


  1. 首先請求服務發(fā)現(xiàn)代理,獲取它請求的服務的所有實例,并在本地進行緩存。

  2. 當需要調(diào)用該服務時,首先從緩存中查找所有實例信息,再使用負載均衡算法,選擇一個實例進行調(diào)用。

  3. 客戶端將定期請求服務發(fā)現(xiàn)代理,刷新緩存數(shù)據(jù)。

  4. 如果本地緩存數(shù)據(jù)錯誤,請求到了錯誤的實例,本地緩存將會失效,并重新請求服務發(fā)現(xiàn)代理的數(shù)據(jù)。


通過以上的機制,能最大程度地保證客戶端能夠正確地查找到所需服務的實例信息。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/130165.html

相關文章

  • 《 Kotlin + Spring Boot : 下一代 Java 服務端開發(fā) 》

    摘要:下一代服務端開發(fā)下一代服務端開發(fā)第部門快速開始第章快速開始環(huán)境準備,,快速上手實現(xiàn)一個第章企業(yè)級服務開發(fā)從到語言的缺點發(fā)展歷程的缺點為什么是產(chǎn)生的背景解決了哪些問題為什么是的發(fā)展歷程容器的配置地獄是什么從到下一代企業(yè)級服務開發(fā)在移動開發(fā)領域 《 Kotlin + Spring Boot : 下一代 Java 服務端開發(fā) 》 Kotlin + Spring Boot : 下一代 Java...

    springDevBird 評論0 收藏0
  • Docker Swarm集群初探

    摘要:既然要組集群那就涉及諸如的資源調(diào)度管理等等一系列問題。目前涉及集群的三個主要的技術(shù)無外乎三種。從本文開始作者將會一一實踐這幾種主要的集群技術(shù),話不多說,現(xiàn)在開始。完全運行于內(nèi)存中,體積小,啟動快。 showImg(https://segmentfault.com/img/remote/1460000015723680); 前言 相信Docker技術(shù)大家都有所了解,單個Docker能發(fā)...

    MingjunYang 評論0 收藏0
  • Spring Boot2(二):使用Spring Boot2集成Mybatis緩存機制

    摘要:本文章的源碼再文章末尾什么是查詢緩存有一級緩存和二級緩存。默認開啟一級緩存。證明了一級緩存只是在數(shù)據(jù)庫會話內(nèi)部共享的。但是,整合到中后,一級緩存就會被關閉。根據(jù)時間表比如沒有刷新間隔緩存不會以任何時間順序來刷新。 倉庫地址:spring-boot-learning歡迎star、fork,給作者一些鼓勵 學習SpringBoot集成Mybatis的第二章,了解到Mybatis自帶的緩存機...

    mikasa 評論0 收藏0
  • Spring Boot2(二):使用Spring Boot2集成Mybatis緩存機制

    摘要:本文章的源碼再文章末尾什么是查詢緩存有一級緩存和二級緩存。默認開啟一級緩存。證明了一級緩存只是在數(shù)據(jù)庫會話內(nèi)部共享的。但是,整合到中后,一級緩存就會被關閉。根據(jù)時間表比如沒有刷新間隔緩存不會以任何時間順序來刷新。 倉庫地址:spring-boot-learning歡迎star、fork,給作者一些鼓勵 學習SpringBoot集成Mybatis的第二章,了解到Mybatis自帶的緩存機...

    NSFish 評論0 收藏0
  • Spring Boot2(三):使用Spring Boot2集成Redis緩存

    摘要:本文章的源碼再文章末尾什么是查詢緩存有一級緩存和二級緩存。默認開啟一級緩存。證明了一級緩存只是在數(shù)據(jù)庫會話內(nèi)部共享的。但是,整合到中后,一級緩存就會被關閉。根據(jù)時間表比如沒有刷新間隔緩存不會以任何時間順序來刷新。 學習SpringBoot集成Mybatis的第二章,了解到Mybatis自帶的緩存機制,在部署的時候踩過了一些坑。在此記錄和分享一下Mybatis的緩存作用。 本文章的源碼再...

    NusterCache 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<