电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

spring cloud服務之間的調用之ribbon詳解

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

昨天,我們通過一個實例演示了,spring-cloud服務注冊組件——Eureka的基本配置和簡單用法,但是服務注冊就是為了方便后期的發現和調用,所以今天我們趁熱打鐵,分享下spring-cloud服務之間的調用。

服務間的調用

關于spring-cloud的服務調用,我們首先需要了解它的兩個核心組件Ribbon和Feign。

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

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

Ribbon

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

依賴

我們先通過一個簡單實例,來演示下,然后在示例的過程中來解釋,首先是它的核心依賴:

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

這個組件你需要添加到服務調用方的依賴中。同時,還需要增加它的配置:

@Configurationpublic class RibbonConfig { // 多節點負載 @LoadBalanced @Bean(name = 'restTemplate') public RestTemplate restTemplate() {return new RestTemplate(); }}

@LoadBalanced注解的作用是啟用多節點負載,這樣后期我們在調用的時候,RestTemplate客戶端其實就是通過負載均衡的方式在調用服務提供者。

服務調用方

然后,在服務調用方,我們通過RestTemplate去調用我們的服務提供者:

@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;}

這里我們通過前面配置的restTemplate來調用我們的用戶服務,接口的地址就是我們eureka注冊中心顯示的地址:

spring cloud服務之間的調用之ribbon詳解

這里的地址不區分大小寫,都可以正常訪問。調用十次,主要是為了測試負載均衡的效果。

服務提供者

首先我們看下服務提供者配置:

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

第一個配置是指定服務的端口,如果在本地啟動的話,需要每啟動一次改一個端口,否則會提示端口沖突,如果你用的是IDEA的話,要先運行多應用啟動:

spring cloud服務之間的調用之ribbon詳解

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

服務提供者就是一個簡單的controller,在controller內部,我們通過DiscoveryClient打印出被調用者的信息,方便我們查看。

@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; }}

這里需要注意的是,我們導入的DiscoveryClient是org.springframework.cloud.client.discovery包下的,如果不是同這個類,啟動的時候會報錯:

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

測試

我們分別啟動服務調用發和被調用方,這里我啟動了5個user-center,同時eureka服務也啟動了兩個,這個兩個注冊中心互相注冊監控,在實際應用中也可以確保服務穩定性。5個user-center有2個注冊在8999的注冊中心上,有3個注冊在9000的注冊中心上:

spring cloud服務之間的調用之ribbon詳解

spring cloud服務之間的調用之ribbon詳解

然后,我們訪問product的ribbon接口:

http://localhost:8881/ribbon

瀏覽器返回結果如下:

spring cloud服務之間的調用之ribbon詳解

同時,在user-center端口為8771和8775的控制臺,會看到如下信息:

spring cloud服務之間的調用之ribbon詳解

spring cloud服務之間的調用之ribbon詳解

為什么只有8771和8775收到了請求,因為8771和8775都注冊到了8999的注冊中心,而且我們的product-service也注冊在該服務中心,所以就只調用了8771和8775這兩個服務:

spring cloud服務之間的調用之ribbon詳解

根據運行結果,我們還發現在10次請求中,8771和8775各處理五次,這里面還有一個潛藏的知識點:Ribbon默認的負載策略是輪詢策略,這樣可以確保同一個注冊中心下的所有服務節點接收到同樣的請求頻次。

如果你把user-center(5個服務)、product-serive都注冊在同一個注冊中心,那么你會發現每個服務都會被調用2次。

總結

總體來說,Ribbon對用戶來說感知確實不夠強,而且經過我的測試,我發現就算拿掉ribbon的依賴,依然可以正常負載均衡,這是因為eureka-client的依賴,已經添加過ribbon的依賴了:

spring cloud服務之間的調用之ribbon詳解

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

到此這篇關于spring-cloud服務之間的調用之ribbon的文章就介紹到這了,更多相關spring cloud服務調用內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 柔性测斜仪_滑动测斜仪-广州杰芯科技有限公司 | 光伏家 - 太阳能光伏发电_分布式光伏发电_太阳能光伏网 | 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 南京和瑞包装有限公司| 青岛空压机,青岛空压机维修/保养,青岛空压机销售/出租公司,青岛空压机厂家电话 | 气动绞车,山东气动绞车,气动绞车厂家-烟台博海石油机械有限公司 气动隔膜泵厂家-温州永嘉定远泵阀有限公司 | 砂尘试验箱_淋雨试验房_冰水冲击试验箱_IPX9K淋雨试验箱_广州岳信试验设备有限公司 | 金刚网,金刚网窗纱,不锈钢网,金刚网厂家- 河北萨邦丝网制品有限公司 | 分子蒸馏设备(短程分子蒸馏装置)_上海达丰仪器 | 100国际学校招生 - 专业国际学校择校升学规划 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | EPDM密封胶条-EPDM密封垫片-EPDM生产厂家 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 东莞注册公司-代办营业执照-东莞公司注册代理记账-极刻财税 | 移动机器人产业联盟官网| 软文世界-软文推广-软文营销-新闻稿发布-一站式软文自助发稿平台 | PU树脂_水性聚氨酯树脂_聚氨酯固化剂_聚氨酯树脂厂家_宝景化工 | 执业药师报名时间,报考条件,考试时间-首页入口 | 分类168信息网 - 分类信息网 免费发布与查询 | 制丸机,小型中药制丸机,全自动制丸机价格-甘肃恒跃制药设备有限公司 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 粉末冶金注射成型厂家|MIM厂家|粉末冶金齿轮|MIM零件-深圳市新泰兴精密科技 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 针焰试验仪,灼热丝试验仪,漏电起痕试验仪,水平垂直燃烧试验仪 - 苏州亚诺天下仪器有限公司 | 聚合甘油__盐城市飞龙油脂有限公司 | 防火门|抗爆门|超大门|医疗门|隔声门-上海加汇门业生产厂家 | 恒湿机_除湿加湿一体机_恒湿净化消毒一体机厂家-杭州英腾电器有限公司 | 电力测功机,电涡流测功机,磁粉制动器,南通远辰曳引机测试台 | 培训中心-翰香原香酥板栗饼加盟店总部-正宗板栗酥饼技术 | 专注氟塑料泵_衬氟泵_磁力泵_卧龙泵阀_化工泵专业品牌 - 梭川泵阀 | 蓄电池在线监测系统|SF6在线监控泄露报警系统-武汉中电通电力设备有限公司 | 西门子伺服电机维修,西门子电源模块维修,西门子驱动模块维修-上海渠利 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | 手术室净化厂家_成都实验室装修公司_无尘车间施工单位_洁净室工程建设团队-四川华锐16年行业经验 | 大倾角皮带机-皮带输送机-螺旋输送机-矿用皮带输送机价格厂家-河南坤威机械 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 |