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、指定饥饿加载的微服务名称