1、微服务技术

2、SpringCloud

  • SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。
  • SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验:

3、SpringCloud与SpringBoot的版本兼容关系如下:

4、服务间远程调用方式(RestTemplate):

1:在服务调用端配置类中添加RestTemplate Bean

 1 @SpringBootApplication
2 public class OrderApplication {
3
4 public static void main(String[] args) {
5 SpringApplication.run(OrderApplication.class, args);
6 }
7
8 @Bean
9 public RestTemplate getRestTemplate(){
10 return new RestTemplate();
11 }
12
13 }

2:在需要远程调用时使用RestTemplate发送http请求

 1 @Service
2 public class OrderService {
3
4 @Autowired
5 private OrderMapper orderMapper;
6
7 @Autowired
8 private RestTemplate restTemplate;
9
10 public Order queryOrderById(Long orderId) {
11 // 1.查询订单
12 Order order = orderMapper.findById(orderId);
13 // 2. 发送请求查询用户信息
14 String url="http://localhost:8081/user/"+order.getUserId();
15 User user = restTemplate.getForObject(url, User.class);
16 //3.将用户传给订单对象
17 order.setUser(user);
18 // 4.返回
19 return order;
20 }
21 }

5、Eureka注册中心

原理图解:

1、搭建EurekaServer

① 创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖

<!--eureka服务端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

② 编写启动类,添加@EnableEurekaServer注解

③ 添加application.yml文件,编写下面的配置

server:
port: 10086 # 服务端口
spring:
application:
name: eurekaserver # eureka的服务名称
eureka:
client:
service-url: # eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka

2、服务注册EurekaClient

① 在order-service项目引入spring-cloud-starter-netflix-eureka-client的依赖

<!--eureka客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

② 在application.yml文件,编写下面的配置

spring:
application:
name: orderservice # 服务名 eureka:
client:
service-url: # eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka

3、消费端拉取服务、负载均衡

① 修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口

String url = "http://userservice/user/" + order.getUserId();

② 在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解

@SpringBootApplication
public class OrderApplication { public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
} @Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
} }

4、总结

一、搭建EurekaServer
1、引入eureka-server依赖
2、添加@EnableEurekaServer注解
3、在application.yml中配置eureka地址
二、服务注册
1、引入eureka-client依赖
2、在application.yml中配置eureka地址
三、服务发现
1、引入eureka-client依赖
2、在application.yml中配置eureka地址
3、给RestTemplate添加@LoadBalanced注解
4、用服务提供者的服务名称远程调用

6、Ribbon负载均衡

1、负载均衡流程图

2、负载均衡源码流程图

3、负载均衡策略

Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则

不同策略类接口含义

4、负载均衡策略修改

通过定义IRule实现可以修改负载均衡规则,有两种方式

① 代码方式:在消费端中的配置类中,定义一个新的IRule

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

② 配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则

userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则

5、饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。 而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载

ribbon:
eager-load:
enabled: true #开启饥饿加载
clients: userservice #指定对userservice这个服务饥饿加载

6、总结

一、Ribbon负载均衡规则
1、规则接口是IRule
2、默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询
二、负载均衡自定义方式
1、代码方式:配置灵活,但修改时需要重新打包发布
2、配置方式:直观,方便,无需重新打包发布,但是无法做全局配置
三、饥饿加载
1、开启饥饿加载
2、指定饥饿加载的微服务名称

SpringCloud-01-Eureka Ribbon的更多相关文章

  1. SpringCloud学习之Ribbon

    一.负载均衡与Ribbon 负载均衡,在集群中是很常见的一个“名词”,顾名思义是根据一定的算法将请求分摊至对应的服务节点上,常见的算法有如下几种: 轮询法:所有请求被依次分发到每台应用服务器上,每台服 ...

  2. Spring Cloud中五大神兽总结(Eureka/Ribbon/Feign/Hystrix/zuul)

    Spring Cloud中五大神兽总结(Eureka/Ribbon/Feign/Hystrix/zuul) 1.Eureka Eureka是Netflix的一个子模块,也是核心模块之一.Eureka是 ...

  3. SpringCloud创建Eureka模块集群

    1.说明 本文详细介绍Spring Cloud创建Eureka模块集群的方法, 基于已经创建好的Spring Cloud Eureka Server模块, 请参考SpringCloud创建Eureka ...

  4. SpringCloud中eureka配置心跳和剔除下线的服务的时间

    在默认的springCloud中eureka注册中心在服务下线时表现的非常不灵敏,用惯了dubbo的zk注册中心表示很不习惯,eureka设计的本意是在服务不会频繁上下线和网络稳定的内网,这种设计在生 ...

  5. springcloud(二) eureka的使用

    上一节讲到order微服务是通过rest调用user微服务的地址.但是,user微服务的地址是写死的, 如果user微服务集群的话,那么order微服务该如何调用呢?这个时候注册中心该上场了 演示eu ...

  6. spring-cloud配置eureka客户端

    spring-cloud配置eureka客户端 eureka用来发现其他程序 需要提前配置eureka服务端,具体看 https://www.cnblogs.com/ye-hcj/p/10292944 ...

  7. 浅谈SpringCloud (二) Eureka服务发现组件

    上面学习到了如何由一个程序访问另一个程序,那么如果使用SpringCloud来进行访问,该如何访问呐? 可以借助Eureka服务发现组件进行访问. 可以借助官方文档:https://spring.io ...

  8. SpringCloud之Eureka:集群搭建

    上篇文章<SpringCloud之Eureka:服务发布与调用例子>实现了一个简单例子,这次对其进行改造,运行两个服务器实例.两个服务提供者实例,服务调用者请求服务,使其可以进行集群部署. ...

  9. SpringCloud学习笔记(三、SpringCloud Netflix Eureka)

    目录: 服务发现简介 SpringCloud Netflix Eureka应用 Eureka高可用 Eureka源码分析 >>> Eureka Client初始化(客户端定时获取服务 ...

  10. springCloud 之 Eureka注册中心高可用配置

    springCloud的eureka高可用配置方案思路是:几个服务中心之间相互注册,比如两个注册中心,A注册到B上,B注册到A上,如果是三个注册中心则是:A注册到BC上,B注册到AC上,C注册到AB上 ...

随机推荐

  1. OOALV总结

    1.1ALV屏幕 1.1.1定义无CONTAINER屏幕 1.屏幕中可以不使用定制控制控件画范围,直接定义一个屏幕即可. "--------------------------------- ...

  2. Windows 环境下安装与配置 Node.js

    一.下载Node.js安装包 下载地址:http://nodejs.cn/download/ 本教程以msi安装包为例 点击Windows 安装包下载 二.安装Node.js 1.打开安装包 欢迎页: ...

  3. Codeforces Round #645 (Div. 2)

    这一次的Div.2 大多数学思维.. A. Park Lightingtime https://codeforces.com/contest/1358/problem/A 题意:给一个n,m为边的矩形 ...

  4. vivo 云服务海量数据存储架构演进与实践

    一.写在开头 vivo 云服务提供给用户备份手机上的联系人.短信.便签.书签等数据的能力,底层存储采用 MySQL 数据库进行数据存储. 随着 vivo 云服务业务发展,云服务用户量增长迅速,存储在云 ...

  5. secure boot (二)基本概念和框架

    什么是secure boot secure boot是指确保在一个平台上运行的程序的完整性的过程或机制.secure boot会在固件和应用程序之间建立一种信任关系.在启用secure boot功能后 ...

  6. 如何一键私有化部署 Laf ?

    太长不看:Laf 上架了 Sealos 的模板市场,通过 Laf 应用模板即可一键部署! Laf 是一个完全开源的项目,除了使用公有云之外,还有大量的用户选择私有化部署 Laf.然而,私有化部署通常伴 ...

  7. 简易机器学习笔记(八)关于经典的图像分类问题-常见经典神经网络LeNet

    前言 图像分类是根据图像的语义信息对不同类别图像进行区分,是计算机视觉的核心,是物体检测.图像分割.物体跟踪.行为分析.人脸识别等其他高层次视觉任务的基础.图像分类在许多领域都有着广泛的应用,如:安防 ...

  8. [Qt开发/毕业设计/求职项目]局域网环境下远程文件发送部署系统-服务端、客户端双端的讲解

    写在前面 本文旨在做一个简单的代码讲解,我会给出源码,然后整个代码的讲解都在源码的基础上进行. 代码可能会随着更新而进行修改,但是整体框架变化不会太大. 整个文章内容不会太多,算是我自己的一个复盘,整 ...

  9. TOEFL | 202307 改革 · 新版题型总结

    目录 Listening(36min) Reading(35min) Speaking(16min) Writing(29min) Listening(36min) 2 conversation,3 ...

  10. MySQL本地服务器与MySQL57网络服务器区别

    MySQL服务器与MySQL57服务器区别与不同处在哪里,他们各自的领域范围,能不能同时启动服务? 安装了MySQL-5.7.18.0版本数据库,版本中包含了MySQL Workbench可视化试图工 ...