? 创建一个Eureka服务:
https://www.cnblogs.com/william-m/p/15991511.html
如果没有Eureka , 如何进行服务之间的调用?
? 使用Rest进行调用 , 先将RestTemplate注册到Bean , 然后:
@RestControllerpublic class MyController {private static final String REST_URL_PREFIX="http://localhost:8082";@Autowiredprivate RestTemplate restTemplate;@GetMApping("user/getAll")public User getById(@RequestParam Long id){return restTemplate.getForObject(REST_URL_PREFIX+"/user/getAll/"+id,User.class);}}3.1 三个角色#
- 注册中心
- Eureka Server , 可以让其他服务将相关信息注册进去 , 然后让相关服务发现这些服务并来调用
- 服务提供者
- Eureka Client , 将自身注册进Server中 , 提供自身的主机 , 端口 , 运行状况指示器URL , 主页和其他详细信息让其他服务去发现 , 一般都是完成某些具体业务的服务
- 服务消费者
- Eureka Client , 将自身注册进Server中 , 发现服务提供者并调用其相关接口 , 一般仅提供接口供外部调用 , 然后调用服务提供者的接口完成具体的业务
C - consistency 强一致性【SpringCloud入门简述】? Eureka遵循的是AP原则 , Eureka各个节点都是平等的 , 部分服务节点的下线不会影响正常服务的调用 , 只要该服务还剩下一个节点在线就可以进行正常的服务访问 , 即保证了服务可用 , 但是并不能保证查询到的信息是最新的 。Zookeeper的CP原则与之不同 , Zookeeper会有一个master节点来保证一致性 , 一旦master节点挂掉 , 剩余的节点会重新选举一个leader , 而选择的过程需要时间 , 这期间会使得该服务瘫痪 , 所以需要满足高可用的话该情况是不能够容忍的 。
A - availability 可用性
P - partition tolerance 分区容错性
4、Ribbon 负载均衡#? Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具 , 基于Netflix Ribbon实现 , 通过轮询、随机等算法选择一个可用服务 。
? 目的:将用户的请求平摊的分配到多个服务上 , 实现高可用
4.1 客户端负载均衡与服务器端负载均衡的区别#

文章插图
? 最大区别:服务清单所存储的位置
- 服务器端负载均衡
- 客户端负载均衡
4.2 服务调用#? 逻辑时序:RestTemplate发起请求 → 负载均衡器拦截器拦截 → LoadBalanceClient获取ILoadBalance → 获取服务列表 → 根据负载均衡器选择一个server → 发起请求 → 记录调用信息
4.3 负载均衡算法重写#
public class MyBalanceRule extends AbstractLoadBalancerRule {// 继承AbstractLoadBalancerRule并重写choose算法@Overridepublic Server choose(Object key) {return choose(getLoadBalancer(), key);}public Server choose(ILoadBalancer lb, Object key) {if (lb == null) {return null;}Server server = null;while (server == null) {if (Thread.interrupted()) {return null;}List<Server> upList = lb.getReachableServers();// 获取活着的服务List<Server> allList = lb.getAllServers();// 获取所有服务int serverCount = allList.size();if (serverCount == 0) {return null;}// =============================================//自定义负载均衡算法// server = ......//===============================================if (server == null) {Thread.yield();continue;}if (server.isAlive()) {return (server);}server = null;Thread.yield();}return server;}}// 添加配置类 , 指定负载均衡算法@Configurationpublic class MyRuleConfig {@Beanpublic IRule myRule(){return new MyBalanceRule();}}5、Feign负载均衡#? Feign是声明式的 web service 客户端 , SpringCloud对Feign进行了封装 , 可以与Ribbon和Eureka使用以支持负载均衡 , 只需要创建一个接口并添加@FeignClient("服务名")注解即可 。
推荐阅读
- 简述C语言的三个标准:ANSI/ISO C99 C11
- 蒙特卡洛树搜索入门教程
- 新手使用mac电脑教程?mac电脑新手入门教程?
- C++基础入门
- 网络工程师快速入门---网络架构及传输介质详解
- 怎么开网店新手入门 自己如何开网店详细步骤
- grpc的入门使用
- 可以秒杀全场的SpringCloud微服务电商实战项目,文档贼全
- 简述淘宝网店的流量来源有哪些渠道 淘宝的流量来源
- 使用Clover安装macOS入门指南
