国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

spring cloud服務(wù)之間的調(diào)用之ribbon詳解

瀏覽:3日期:2023-06-27 15:24:48
前言

昨天,我們通過(guò)一個(gè)實(shí)例演示了,spring-cloud服務(wù)注冊(cè)組件——Eureka的基本配置和簡(jiǎn)單用法,但是服務(wù)注冊(cè)就是為了方便后期的發(fā)現(xiàn)和調(diào)用,所以今天我們趁熱打鐵,分享下spring-cloud服務(wù)之間的調(diào)用。

服務(wù)間的調(diào)用

關(guān)于spring-cloud的服務(wù)調(diào)用,我們首先需要了解它的兩個(gè)核心組件Ribbon和Feign。

我們都知道,spring boot的接口都是基于REST實(shí)現(xiàn)的,但是在實(shí)際線上運(yùn)行的時(shí)候,考慮到用戶規(guī)模、服務(wù)可用性等方面的因素,我們一般很少是單節(jié)點(diǎn)運(yùn)行的,通常都是以集群模式部署的,但是在集群部署中,又有一個(gè)核心的問(wèn)題必須解決——負(fù)載均衡。關(guān)于負(fù)載均衡,各位小伙伴應(yīng)該不陌生,最常用的組件之一nginx其中一個(gè)很核心的用途就是做負(fù)載均衡,但是nginx在實(shí)際做負(fù)載均衡的時(shí)候,確實(shí)不夠方便,需要手動(dòng)配置服務(wù)地址,如果服務(wù)地址發(fā)生變化,相關(guān)配置也需要修改,所以不夠靈活。

當(dāng)然spring cloud作為一款微服務(wù)綜合框架,它自然也提供了自己的一套負(fù)載均衡解決方案,所以接下來(lái)我們就來(lái)看下spring cloud的負(fù)載均衡組件——Ribbon。

Ribbon

Ribbon中文的意思是絲帶、帶狀物,正如它的含義,它就是連接調(diào)用方和服務(wù)之間的紐帶。

依賴

我們先通過(guò)一個(gè)簡(jiǎn)單實(shí)例,來(lái)演示下,然后在示例的過(guò)程中來(lái)解釋,首先是它的核心依賴:

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>2.2.9.RELEASE</version></dependency>配置

這個(gè)組件你需要添加到服務(wù)調(diào)用方的依賴中。同時(shí),還需要增加它的配置:

@Configurationpublic class RibbonConfig { // 多節(jié)點(diǎn)負(fù)載 @LoadBalanced @Bean(name = 'restTemplate') public RestTemplate restTemplate() {return new RestTemplate(); }}

@LoadBalanced注解的作用是啟用多節(jié)點(diǎn)負(fù)載,這樣后期我們?cè)谡{(diào)用的時(shí)候,RestTemplate客戶端其實(shí)就是通過(guò)負(fù)載均衡的方式在調(diào)用服務(wù)提供者。

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

然后,在服務(wù)調(diào)用方,我們通過(guò)RestTemplate去調(diào)用我們的服務(wù)提供者:

@Autowiredprivate RestTemplate restTemplate;@GetMapping('/ribbon')public Object queryUserByProductId() { List<JSONObject> jsonObjectList = Lists.newArrayList(); for (int i = 0; i < 10; i++) {JSONObject forObject = restTemplate.getForObject('http://user-center/user/' + (i + 1), JSONObject.class);jsonObjectList.add(forObject); } return jsonObjectList;}

這里我們通過(guò)前面配置的restTemplate來(lái)調(diào)用我們的用戶服務(wù),接口的地址就是我們eureka注冊(cè)中心顯示的地址:

spring cloud服務(wù)之間的調(diào)用之ribbon詳解

這里的地址不區(qū)分大小寫(xiě),都可以正常訪問(wèn)。調(diào)用十次,主要是為了測(cè)試負(fù)載均衡的效果。

服務(wù)提供者

首先我們看下服務(wù)提供者配置:

server.port=8776eureka.client.service-url.defaultZone=http://localhost:8999/eureka, http://localhost:9000/eureka

第一個(gè)配置是指定服務(wù)的端口,如果在本地啟動(dòng)的話,需要每啟動(dòng)一次改一個(gè)端口,否則會(huì)提示端口沖突,如果你用的是IDEA的話,要先運(yùn)行多應(yīng)用啟動(dòng):

spring cloud服務(wù)之間的調(diào)用之ribbon詳解

第二個(gè)配置就是設(shè)定我們的注冊(cè)中心,我們有兩個(gè)注冊(cè)中心,所以指定了兩個(gè)地址。

服務(wù)提供者就是一個(gè)簡(jiǎn)單的controller,在controller內(nèi)部,我們通過(guò)DiscoveryClient打印出被調(diào)用者的信息,方便我們查看。

@RestControllerpublic class UserController { private Logger logger = LoggerFactory.getLogger(UserController.class); @Autowired private DiscoveryClient discoveryClient; @GetMapping('/user/{id}') public JSONObject getUserById(@PathVariable(name = 'id') Long id) {List<ServiceInstance> instances = discoveryClient.getInstances('user-center');logger.info('instances = {}', instances);JSONObject user = new JSONObject();user.put('id', id);user.put('name', 'syske');return user; }}

這里需要注意的是,我們導(dǎo)入的DiscoveryClient是org.springframework.cloud.client.discovery包下的,如果不是同這個(gè)類,啟動(dòng)的時(shí)候會(huì)報(bào)錯(cuò):

Consider defining a bean of type ’com.netflix.discovery.DiscoveryClient’ in your configuration.

測(cè)試

我們分別啟動(dòng)服務(wù)調(diào)用發(fā)和被調(diào)用方,這里我啟動(dòng)了5個(gè)user-center,同時(shí)eureka服務(wù)也啟動(dòng)了兩個(gè),這個(gè)兩個(gè)注冊(cè)中心互相注冊(cè)監(jiān)控,在實(shí)際應(yīng)用中也可以確保服務(wù)穩(wěn)定性。5個(gè)user-center有2個(gè)注冊(cè)在8999的注冊(cè)中心上,有3個(gè)注冊(cè)在9000的注冊(cè)中心上:

spring cloud服務(wù)之間的調(diào)用之ribbon詳解

spring cloud服務(wù)之間的調(diào)用之ribbon詳解

然后,我們?cè)L問(wèn)product的ribbon接口:

http://localhost:8881/ribbon

瀏覽器返回結(jié)果如下:

spring cloud服務(wù)之間的調(diào)用之ribbon詳解

同時(shí),在user-center端口為8771和8775的控制臺(tái),會(huì)看到如下信息:

spring cloud服務(wù)之間的調(diào)用之ribbon詳解

spring cloud服務(wù)之間的調(diào)用之ribbon詳解

為什么只有8771和8775收到了請(qǐng)求,因?yàn)?771和8775都注冊(cè)到了8999的注冊(cè)中心,而且我們的product-service也注冊(cè)在該服務(wù)中心,所以就只調(diào)用了8771和8775這兩個(gè)服務(wù):

spring cloud服務(wù)之間的調(diào)用之ribbon詳解

根據(jù)運(yùn)行結(jié)果,我們還發(fā)現(xiàn)在10次請(qǐng)求中,8771和8775各處理五次,這里面還有一個(gè)潛藏的知識(shí)點(diǎn):Ribbon默認(rèn)的負(fù)載策略是輪詢策略,這樣可以確保同一個(gè)注冊(cè)中心下的所有服務(wù)節(jié)點(diǎn)接收到同樣的請(qǐng)求頻次。

如果你把user-center(5個(gè)服務(wù))、product-serive都注冊(cè)在同一個(gè)注冊(cè)中心,那么你會(huì)發(fā)現(xiàn)每個(gè)服務(wù)都會(huì)被調(diào)用2次。

總結(jié)

總體來(lái)說(shuō),Ribbon對(duì)用戶來(lái)說(shuō)感知確實(shí)不夠強(qiáng),而且經(jīng)過(guò)我的測(cè)試,我發(fā)現(xiàn)就算拿掉ribbon的依賴,依然可以正常負(fù)載均衡,這是因?yàn)閑ureka-client的依賴,已經(jīng)添加過(guò)ribbon的依賴了:

spring cloud服務(wù)之間的調(diào)用之ribbon詳解

好了,今天的Ribbon分享就先到這里吧,我們明天分享基于Feign的聲明式調(diào)用。

到此這篇關(guān)于spring-cloud服務(wù)之間的調(diào)用之ribbon的文章就介紹到這了,更多相關(guān)spring cloud服務(wù)調(diào)用內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 久久99国产亚洲精品 | 在线看国产视频 | 舔操 | 国产精品亚洲综合网站 | 天天精品在线 | 亚洲天堂男人在线 | 日本国产免费一区不卡在线 | 久久精品免费播放 | 玖玖这里只有精品 | 亚洲欧美日本人成在线观看 | 最新国产美女肝交视频播放 | 高清韩国a级特黄毛片 | 欧美成人免费全部观看天天性色 | 做爰成人五级在线视频| 久久精品一 | 无套内谢孕妇毛片免费看 | 女人被男人躁得好爽免费视频免费 | avav在线看 | 欧美精品一级毛片 | 毛片手机在线视频免费观看 | 亚洲欧美卡通成人制服动漫 | 操亚洲| 亚州视频一区二区 | 男女男精品视频网站 | 国产亚洲精品午夜一区 | 美女图片1314mm爽爽爽 | 成人三级在线观看 | 久久精品在线免费观看 | 日本一级视频 | 国产在线观看免费一级 | 九九九九在线精品免费视频 | 日韩欧美一区二区三区不卡视频 | 亚洲欧美在线综合一区二区三区 | 中文字幕亚洲精品日韩精品 | 国产精品大片天天看片 | 亚洲欧美久久 | 久久久久欧美情爱精品 | 免费五级在线观看日本片 | 亚洲欧美另类视频 | 欧美大片一级毛片 | www.色中色 |