前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一起来学Spring Cloud(F版) | 第二篇:Ribbon软负载

一起来学Spring Cloud(F版) | 第二篇:Ribbon软负载

作者头像
battcn
发布于 2018-10-18 03:40:54
发布于 2018-10-18 03:40:54
55000
代码可运行
举报
文章被收录于专栏:battcnbattcn
运行总次数:0
代码可运行

SpringCloud 为开发者提供了在分布式系统中的一些常用的组件(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,决策竞选,分布式会话集群状态)。使用Spring Cloud开发人员可以快速地完成实现这些模式的服务和应用程序。它们在任何分布式环境中都能很好地工作

Ribbon

RibbonNetflix 开源的基于 HTTPTCP 的客户端负载均衡器框架,目前也已被 SpringCloud 团队集成在 spring-cloud-netflix 子项目下,主要用于客户端软负载功能,内部已实现了 随机轮询权重减压(选取压力最小的) 等常见的负载算法,同时也提供了 ILoadBalanceIRule 两个接口方便我们自己编写适合自己的负载算法

  • 负载均衡
  • 容错
  • 多协议(HTTP,TCPUDP)支持异步和反应模型
  • 缓存和批处理

交互图

Try

要尝试 SpringCloudRibbon 首要的就是准备一个服务注册中心,还不太清楚的可以在回头看看上一章 认识Eureka ,这里就不做过多赘述了,准备 eureka-server(回顾上一章)product-serverorder-server三个项目,后面的两个可以理解为上一章的 eureka-client

Eureka Server

详情参考上一章,或从文末的 GITHUB 链接获取对应篇幅的完整代码

Product Server

一个普通的 EurekaClient 即可,详情参考上一章,或从文末的 GITHUB 链接获取对应篇幅的完整代码

Order Server

一个普通的 EurekaClient

依赖

细心的小伙伴会发现,这和一个普通的 EurekaClient 也没啥区别啊,没任何额外依赖的,那是因为在 spring-cloud-starter-netflix-eureka-client 中已经帮我们依赖过 spring-cloud-starter-netflix-ribbon 了。假如使用 consulzookeeperetcd容器为服务发现为者时,就必须依赖 spring-cloud-starter-netflix-ribbon

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>

配置文件

src/main/resources 目录下创建一个 bootstrap.yml 的文件,写上 eureka 相关配置信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server:
  port: 7072
spring:
  application:
    name: order-server
eureka:
  instance:
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}}
  client:
    service-url:
      defaultZone: http://localhost:7071/eureka/

主函数

各位小伙伴对 SpringBoot 中的 RestTemplate 应该都不陌生,它是由 SpringBoot 提供而不是 SpringCloud,无负载功能,为了方便开发者, SpringCloud 团队提供了一个 @LoadBalanced 注解(默认采用轮训算法)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.battcn;

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.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * @author Levin
 */
@EnableDiscoveryClient
@SpringBootApplication
public class OrderApplication {

    @Configuration
    class MyConfiguration {
        @LoadBalanced
        @Bean
        RestTemplate restTemplate() {
            return new RestTemplate();
        }
    }

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

控制器

客户端( order-server:7702)从 EurekaServer 同步了 product-server:7703product-server:7704 这个时候它是如何知晓注册表中的信息呢?上一章中遗留了一个知识点就是 DiscoveryClient ,通过它就可以获得注册表中客户端的信息了,下列代码块演示了 DiscoveryClient 的简单用法,更多 API 可以自行尝试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.battcn.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;

/**
 * @author Levin
 * @since 2018/9/28 0028
 */
@RestController
@RequestMapping("/orders")
public class OrderController {

    private final RestTemplate restTemplate;
    private final DiscoveryClient discoveryClient;

    @Autowired
    public OrderController(RestTemplate restTemplate, DiscoveryClient discoveryClient) {
        this.restTemplate = restTemplate;
        this.discoveryClient = discoveryClient;
    }

    @GetMapping
    public String query() {
        final List<String> services = discoveryClient.getServices();
        for (String service : services) {
            List<ServiceInstance> list = discoveryClient.getInstances(service);
            for (ServiceInstance instance : list) {
                System.out.println(instance.getUri() + "/" + service + " - " + instance.getServiceId());
            }
        }
        return restTemplate.getForObject("http://PRODUCT-SERVER/products", String.class);
    }
}

Why

有的小伙伴对上面的内容会存在一些疑问,为什么没有写 IP:PORT 了,而是写了一串字符,它是怎么做到的?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
用通俗的概念来说,它就是编码与解码操作,还记得 Eureka Server UI 中 Application 吗? 
编码:根据 spring.application.name 设置 serviceId 
Server IDPRODUCT-SERVER
Client A :http://localhost:7073/products
Client B :http://localhost:7074/products

解码:通过 serviceId 找到对应的客户端,
然后根据客户端配置的负载算法从对应集合中
找出符合当前算法条件的结果,最后拼接出相应的 http 地址即可

解码前:http://PRODUCT-SERVER/products 
那么将 http://PRODUCT-SERVER 替换成 instance.getUri() 内容是不是就出来了
http://localhost:7073/products 和 http://localhost:7074/products
自定义 IRule

假如我们不想使用轮训了,换换口味改成随机算法,又或者想自己写一套适合自己的负载算法,可以用下面这种方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.battcn.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author Levin
 * @since 2018/9/28 0028
 */
@Configuration
public class RibbonRuleConfiguration {

    @Bean
    public IRule ribbonRule() {
        return new RandomRule();
    }
}

@RibbonClient(name = "ribbonRule",configuration = RibbonRuleConfiguration.class)
public class OrderController {

}

总结

目前很多大佬都写过关于 SpringCloud 的教程了,如有雷同,请多多包涵,本教程基于最新的 spring-cloud:Finchley.SR1 编写...

个人博客:http://blog.battcn.com/

全文代码:https://github.com/battcn/spring-cloud2-learning/tree/master/chapter2

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 battcn 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
泄露GTA6的18岁少年黑客,被判在医院“终生监禁”!
作为 R 星旗下最知名的游戏系列之一,GTA 一直以来都备受游戏玩家的喜爱和期待:
Python编程与实战
2024/01/04
4080
泄露GTA6的18岁少年黑客,被判在医院“终生监禁”!
黑了微软、三星、英伟达的神秘黑客组织曝光,背后竟是16岁英国少年,还招内鬼帮忙
大数据文摘出品 之前,一个神秘的黑客组织攻击了微软、英伟达和三星,轰动一时。 这个组织名为Lapsus$,在攻击了英伟达和三星后,还将一些数据公布于众,很多人都在猜测这个神秘黑客组织的身份,现在这件事有了眉目。 网络安全研究人员调查了一系列和Lapsus$有关的攻击事件,发现攻击源竟然来自一名16岁的少年,他住在英国牛津附近的母亲家中。 彭博社报道,代表被攻击公司调查黑客组织Lapsus$的四名调查人员表示,他们认为这名少年是主谋。 并且,该组织还在招募大公司内部人员作为攻击的卧底。 除了英国少年,还有巴
大数据文摘
2022/04/02
4880
黑了微软、三星、英伟达的神秘黑客组织曝光,背后竟是16岁英国少年,还招内鬼帮忙
16岁自闭少年被指黑掉英伟达微软,曾赚1400万美元,英国警方逮捕7人
机器之心报道 机器之心编辑部 在英国牛津,一个上特殊学校的 16 岁自闭少年被指控为 2022 年最高调的黑客组织 Lapsus$ 的头目之一。据悉,他已经赚到了 1400 万美元。他所在的 Lapsus$ 最近接连入侵了英伟达、三星、微软等科技巨头,盗取了数 TB 的数据。 据 BBC 报道,一名来自英国牛津的 16 岁少年被指控为网络犯罪团伙 Lapsus$ 的头目之一。 这名少年据称通过黑客攻击积累了 1400 万美元(1060 万英镑)的财富,却因为被竞争对手和研究人员点名而暴露。 伦敦警方已证实
机器之心
2022/03/25
4300
微软、英伟达等多家企业源代码被偷,“带头大哥”居然是未成年人?
本周,微软与身份管理平台 Okta 双双披露由 Lapsus 一手策划的违规行为。作为网络犯罪领域的一股“新势力”, Lapsus 专门从大企业处窃取数据,并以公开数据内容为要挟迫使受害企业支付赎金。经过调查发现,该组织不是什么极具威胁意义的“国家性”组织,其带头人不过是一位不足 18 岁的青少年,而且尚未受到正式犯罪指控。
深度学习与Python
2022/04/19
1.4K0
微软、英伟达等多家企业源代码被偷,“带头大哥”居然是未成年人?
微软、英伟达等多家企业源代码被偷,幕后主使竟是年仅16岁的黑客少年?
近期,黑客组织 Lapsus$ 活跃在各大科技网站:窃取英伟达近 1TB 的数据、泄露三星近 190GB 的机密数据、公布微软 Bing 和 Cortana 源码… 不同于大部分黑客组织,Lapsus$ 没有刻意隐藏自己,反而行事非常高调,不仅在 Telegram 上预告并宣布目标入侵企业,还直白地表示希望能向广大企业员工购买内部系统访问权。 作为网络犯罪领域的一股“新势力”, Lapsus$ 专门从大企业处窃取数据,并以公开数据内容为要挟迫使受害企业支付赎金。 一、行事猖狂的黑客组织 本周,微软被证实
老九君
2022/03/28
7950
16岁成为勒索组织扛把子,黑客未成年化趋势明显?
最近,FreeBuf发布了文章《年仅16岁 ,入侵微软等18家跨国巨头,LAPSUS$ 黑客组织“狠疯狂”》,对该组织进行了深入讲解,其中让人印象深刻的是,一名年仅16岁的少年竟被指控为该组织头目之一,在他策划或参与下接连攻破了英伟达、三星、微软等巨头企业,猖狂程度在2022年可谓首屈一指。
FB客服
2022/11/14
2980
16岁成为勒索组织扛把子,黑客未成年化趋势明显?
敲诈英伟达的竟然是一群未成年???
明敏 鱼羊 发自 凹非寺 量子位 | 公众号 QbitAI 敲诈英伟达引起轩然大波的那伙黑客,“头目”疑似被捕。 伦敦警方最新消息透露,他们已经逮捕7名相关人员归案。 而该黑客组织的官方Telegram频道也更新了这样一则信息: Lapsus$刚刚任命了一名新的管理员。 话说Lapsus$这个黑客组织,在跟英伟达激情对线之后,那真是名声大噪。 不仅窃取了英伟达1TB数据,三星、微软、EA……也都遭受过他们的公开嘲讽和攻击。 行事之嚣张、“成果”之斐然,引得网友们纷纷猜测其背后团队之强大。甚至有人怀疑他们是
量子位
2022/03/28
4040
年仅16岁 ,入侵微软等18家跨国巨头,LAPSUS$ 黑客组织“狠疯狂”
2021 年年末,黑客世界横空杀出一支队伍,入侵巴西卫生部成功”出道”,此后短短四个月内,疯狂开展网络攻击活动,英伟达、三星、沃达丰,育碧、微软等十八家行业巨头相继沦陷。一时间,人人自危,LAPSUS$ 一跃成为 2022 年最猖狂、最令人闻风丧胆的黑客组织。
FB客服
2022/11/14
5300
年仅16岁 ,入侵微软等18家跨国巨头,LAPSUS$ 黑客组织“狠疯狂”
“盘一盘”近期疯狂作案的 Lapsus $ 黑客组织
互联网技术飞速发展,改变了世界运行的模式,带来了巨大便利。事物发展具有两面性,同样,互联网环境巨大的温床也滋养了一大批黑客组织,带了信息泄露,勒索软件等网络安全问题。
FB客服
2022/04/12
7650
“盘一盘”近期疯狂作案的 Lapsus $ 黑客组织
老黄被黑,微软中招!黑客团伙竟是16岁英国自闭症男孩带队
---- 新智元报道   编辑:袁榭 好困 【新智元导读】在不到半年里,黑客组织Lapsus$四处搞事,从巴西政府黑到英伟达,现在又黑了微软。 最近,那个勒索英伟达的Lapsus$,又把微软给黑了! 在过去几个月里,Lapsus$可谓是声名鹊起。 英伟达、三星、沃达丰、育碧等等都惨遭毒手。 而这里面最惨的,就属英伟达了。 毕竟被放出源代码,而且文件大小还高达75GB的,也仅此一家。 不过,距离「最后通牒」也已经过了小半个月,却不见Lapsus$有进一步的动作。 对于微软这家商业软件巨头来说,目前
新智元
2022/03/24
5170
深陷安全事件泥潭,优步数据泄露何时休?
9月15日,一名黑客侵入了一名优步员工的办公通讯应用 Slack,发布了如上信息。次日,根据多家外国媒体报道,这家国际网约车巨头证实其系统遭到了黑客攻击,但尚不清楚黑客访问了哪些内部数据。
FB客服
2022/11/14
5710
深陷安全事件泥潭,优步数据泄露何时休?
国际知名“青少年黑客”盘点
全美大学生网络防御大赛(NCCDC)是一项年度盛会,旨在让大学生参与到网络安全活动中来。像往常一样,今年,这些孩子正投身于这场激烈的网络防御战中,但是有变化的是,其中许多竞争者过去都有过黑帽攻击经历,他们入侵的系统包括胰岛素泵、航空电子系统以及生啤保鲜机系统等。 当然,年轻人参与黑客攻击的历史已经相当长远,提到“少年天才”不由得脑海里就会浮现很多面容、名字以及他们不朽的事迹。这是一篇拜会“黑客祖师爷”的文章。让我们回到现代互联网还没有成型的那个年代,看看那些注定不凡的天才少年们: 1. James Ko
FB客服
2018/02/26
1.3K0
国际知名“青少年黑客”盘点
GTA6发售悬了!遭遇游戏史上最大泄密,18岁黑客手握源码公开勒索开发商R星
梦晨 衡宇 发自 凹非寺 量子位 | 公众号 QbitAI 全球游戏玩家盼了八年的GTA6,恐怕又要延期了。 黑客一次性放出90段游戏泄露视频,已在各大平台疯传,官方删都删不过来。 这件事的影响力不只在游戏圈,也受到大量主流媒体、商业媒体关注—— 涉及的游戏开发商Rockstar Games(简称R星),其母公司Take-Two Interactive是一家市值200亿美元的上市公司。 系列前作GTA5最早于2013年推出,截至2021年底累计销量超1.6个亿风靡全球,并靠出售线上道具的模式持续盈利,狂赚
量子位
2022/09/20
4300
GTA6发售悬了!遭遇游戏史上最大泄密,18岁黑客手握源码公开勒索开发商R星
2022 年全球数据泄露事件 TOP 100 | FreeBuf 年度盘点
数字化时代,数据已然是一种战略资源,是企业发展经营的“催化剂”,企业拥有的数据规模以及数据处理能力,决定其是否具备核心竞争力,因此数据成为了网络犯罪分子眼中的“摇钱树”。
FB客服
2023/02/10
2.2K0
2022 年全球数据泄露事件 TOP 100 | FreeBuf 年度盘点
英伟达7万多员工密码遭泄露!三星、高通也遭殃,肇事黑客「开源」190GB机密数据
---- 新智元报道   编辑:好困 David 【新智元导读】英伟达核心源码刚「被开源」,7万多员工信息又遭泄露。与此同时,黑客又「帮」三星把代码给开源了,顺便还把高通也捎上了。 看起来,南美黑客团伙Lapsus$要和英伟达玩一把大的了。 源代码才刚刚「开源」没几天,英伟达71335个员工的电子邮件地址和NTLM密码哈希就被完全泄露了。数据泄露检测网站HIBP证实,这里面有不少内容已经被破解并在黑客社区内大肆传播。 据统计,英伟达在2021年有18975名员工。因此,这个数据很显然也包含了已经离职
新智元
2022/03/09
2980
FreeBuf周报 | 美国陆军首次装备赛博态势理解软件;台湾 2300 万人民信息泄露
各位 Buffer 周末好,以下是本周「FreeBuf周报」,我们总结推荐了本周的热点资讯、安全事件、一周好文和省心工具,保证大家不错过本周的每一个重点!
FB客服
2022/11/14
5000
FreeBuf周报 | 美国陆军首次装备赛博态势理解软件;台湾 2300 万人民信息泄露
英伟达遭黑客勒索,涉及1T机密数据:deadline已过,7万员工信息泄露
机器之心报道 编辑:泽南、小舟 黑客宣称勒索了英伟达多达 1TB「最严密保护」的数据,包含 40 系显卡及后续产品计划、禁止挖矿限制、DLSS 源代码。 英伟达从未否认他们被黑客入侵了,但这家科技巨头也没有透露过太多信息。 然而在本周五,当人们即将看到黑客兑现他们的威胁,在互联网上公布数百 GB 英伟达数据时,情况似乎变得比想象更加严重了。被入侵电子邮件警报网站 Have I Been Pwned 表示,此次黑客攻击的范围包括惊人的 71000 名英伟达员工的电子邮件和密码哈希值,这些信息可以使黑客能够破解
机器之心
2022/03/09
5030
黑客故事:乔纳森·詹姆斯(Jonathan James)——为了好玩而攻击 NASA 的少年
乔纳森·詹姆斯(Jonathan James),一位多产的年轻黑客,他在早上上学时在晚上对 NASA 进行黑客攻击。他继续成为第一个因计算机黑客行为被联邦判处监禁的少年。
IT运维技术圈
2022/06/27
1.6K0
黑客故事:乔纳森·詹姆斯(Jonathan James)——为了好玩而攻击 NASA 的少年
英伟达黄仁勋:摩尔定律结束了;78% 的试点公司顺利实现四天工作制;小米回应11系列,可能是系统故障或主板质量问题 | EA周报
近日,特斯拉上海工厂工人薪酬曝光,特斯拉生产线一线普工的底薪是 5341 元,若是本科学历可再加 200 元,加上各种补贴及季度奖,年薪过 10 万并不困难。“对外号称 17 薪,平均下来每个月到手有个七八千,还有五险一金”。有内部人员表示,所说的 17薪,是将季度奖包含在内,特斯拉工厂就会发放一笔奖金,根据不同的绩效评分。据其透露,季度奖分成 A-E 五个档次,其中 A 档是月底薪的 1.5 倍,C 等为一个月底薪。但他只拿过 C 等,从未获得过 AB 档评级。(时代财经)
yuanyi928
2022/11/07
5960
英伟达黄仁勋:摩尔定律结束了;78% 的试点公司顺利实现四天工作制;小米回应11系列,可能是系统故障或主板质量问题 | EA周报
【每日要闻】黄仁勋考虑让英特尔代工芯片;LG能源将投资14亿美元在美国建电池厂
点击图片报名 1、黄仁勋考虑让英特尔代工芯片 2、LG能源将投资14亿美元在美国建电池厂 3、Canalys:2021年第四季度中国PC出货量达到1650万台 4、黑掉微软英伟达三星的主谋疑似16岁英国少年 5、欧盟将公布数字市场法案,立法遏制科技巨头 6、英特尔CEO将半导体比作石油 7、Snap收购脑机接口初创公司,将其技术用于未来的AR头显 8、苹果在美国推出iPhone电子驾照 9、Counterpoint发布2021年高端智能手机数据报告 10、租车巨头赫兹将特斯拉Model Y加入电动车队 1
镁客网
2022/03/25
3040
推荐阅读
泄露GTA6的18岁少年黑客,被判在医院“终生监禁”!
4080
黑了微软、三星、英伟达的神秘黑客组织曝光,背后竟是16岁英国少年,还招内鬼帮忙
4880
16岁自闭少年被指黑掉英伟达微软,曾赚1400万美元,英国警方逮捕7人
4300
微软、英伟达等多家企业源代码被偷,“带头大哥”居然是未成年人?
1.4K0
微软、英伟达等多家企业源代码被偷,幕后主使竟是年仅16岁的黑客少年?
7950
16岁成为勒索组织扛把子,黑客未成年化趋势明显?
2980
敲诈英伟达的竟然是一群未成年???
4040
年仅16岁 ,入侵微软等18家跨国巨头,LAPSUS$ 黑客组织“狠疯狂”
5300
“盘一盘”近期疯狂作案的 Lapsus $ 黑客组织
7650
老黄被黑,微软中招!黑客团伙竟是16岁英国自闭症男孩带队
5170
深陷安全事件泥潭,优步数据泄露何时休?
5710
国际知名“青少年黑客”盘点
1.3K0
GTA6发售悬了!遭遇游戏史上最大泄密,18岁黑客手握源码公开勒索开发商R星
4300
2022 年全球数据泄露事件 TOP 100 | FreeBuf 年度盘点
2.2K0
英伟达7万多员工密码遭泄露!三星、高通也遭殃,肇事黑客「开源」190GB机密数据
2980
FreeBuf周报 | 美国陆军首次装备赛博态势理解软件;台湾 2300 万人民信息泄露
5000
英伟达遭黑客勒索,涉及1T机密数据:deadline已过,7万员工信息泄露
5030
黑客故事:乔纳森·詹姆斯(Jonathan James)——为了好玩而攻击 NASA 的少年
1.6K0
英伟达黄仁勋:摩尔定律结束了;78% 的试点公司顺利实现四天工作制;小米回应11系列,可能是系统故障或主板质量问题 | EA周报
5960
【每日要闻】黄仁勋考虑让英特尔代工芯片;LG能源将投资14亿美元在美国建电池厂
3040
相关推荐
泄露GTA6的18岁少年黑客,被判在医院“终生监禁”!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验