MicroService-Eureka
MicroService-Eureka
KahviaEureka
微服务的注册中心。
服务端
1.添加依赖
1 | <dependency> |
2.应用启动入口标注@EnableEurekaServer
1 |
|
3.在 application.yml 中配置相关信息
1 | server: |
客户端
1.添加依赖(若是依赖管理中没有客户端的版本,则需要像下面这样手动添加,版本最好跟服务端保持一致)
1 | <dependency> |
2.在 application.yml 中配置相关信息
修改端口和应用名称,eureka的服务端地址保持不变。
远程调用
服务的远程调用包含两个客户端:调用服务的是消费者,被调用服务的是提供者。一个客户端可用同时是消费者和提供者。
远程调用服务可使用 RestTemplate 类的实例的 getObject 方法。
比如,我写一个工具类。将构建 RestTemplate 实体的工厂函数注册为 bean。
1 | package cn.kahvia.imageservice.utils; |
然后在有需要的地方自动装配一个 RestTemplate 对象,调用它的各种请求方法就行了。post示例如下。
1 | package cn.kahvia.imageservice.controller; |
负载均衡
为 RestTemplate 的工厂函数添加 @LoadBalanced注解
1 | package cn.kahvia.imageservice.utils; |
原理:远程调用其它服务端的接口时,发出的请求会被拦截,然后根据请求的地址获取主机名(如果是eureka服务获取到的就是服务名),获取到服务名后再去eureka注册中心中取得对应服务名的所有服务端地址,根据负载均衡轮询或者随机的规则选取一个合适的地址,替换请求的地址中的服务名后,再放行,从而实现负载均衡。
负载均衡的策略
- RoundRobinRule:简单的轮询。Ribbon默认策略。
- ZoneAvoidanceRule:以区域为基础,进行服务器的选择。使用Zone进行分类。
- RandomRule:随机。
- RetryRule:重连。
- AvailabilityFilteringRule,BestAvailableRule,WeightedResponseTimeRule等
全局策略
1 | //全局配置,对所有微服务有效 |
局部策略
1 | UserService: #为某个微服务配置负载均衡的规则 |
Ribbon修改饥饿加载
Ribbon默认是懒加载,也就是说,Ribbon提供的负载均衡的服务 LoadBalancerClient 并不会随着服务端启动而启动。第一次请求远程调用时,会初始化负载均衡服务,所以第一次会比较慢。
如果想要让负载均衡服务随着服务端启动而启动,就需要设置饥饿加载。在 application.yml 文件中配置饥饿加载。
1 | ribbon: |