SpringCloud
服务拆分
微服务远程调用
将问题转换成了如何在java代码中发送http请求。
Bean的注入只能写在配置类里面,而启动类本身也是一个配置类,所以可以将bean的注入写到这里面。
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
利用RestTemplate
要想实现跨服务的远程调用,其实就是发送一次http的请求。
提供者与消费者
- 服务提供者: - -次业务中,被其它微服务调用的服务。 (提供接口给其它微服务)
- 服务消费者: -次业务中,调用其它微服务的服务。(调用其 它微服务提供的接口)
服务A调用服务B,服务B调用服务C,那么服务B是什么角色?
一个服务既可以是消费者也可以提供者。相对于A来说B是提供者,相对于C来说B是消费者
Eureka注册中心
服务调用出现的问题:
代码硬编码


eureka的作用
消费者该如何获取服务提供者具体信息?
◆服务提供者启动时向eureka注册自己的信息
◆eureka保存这些信息
◆消费者根据服务名称向eureka拉取提供者信息
如果有多个服务提供者,消费者该如何选择?
◆服务消费者利用负载均衡算法,从服务列表中挑选一个
消费者如何感知服务提供者健康状态?
◆服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
◆eureka会更新记录服务列表信息,心跳不正常会被剔除
◆消费者就可以拉取到最新的信息

搭建EurekaServer
eureka自己也是一个服务,所以他在启动的时候也要让自己注册到服务中心eureka中。
编写一个application.yml文件,内容如下:
server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
服务注册
服务的发现
总结
Ribbon负载均衡
有瑞卡,瑞本
负载均衡流程
整体流程
详细流程
负载均衡策略
Ribbon的负载均衡规则是一个叫做lRule的接口来定义的,每一个子接口都是一种规则:
负载均衡策略默认是ZoneAvoidanceRule,即先选择地区,在对该地区的机器进行轮询。
修改/指定负载均衡策略
通过定义IRule实现可以修改负载均衡规则,有两种方式:
方式一是全局的,即不管order-service去调用哪个服务用户或商品都是随机的。
方式二是针对某个服务而言的。指定服务名称。


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