1、不单一职责:同微服务,不要重复开发相同业务
2、数据分离:微服务数据治理,不要访问其他微服务的数据库
3、接口暴露:微服务可以将自己的业务暴露为借口,供其他微服务调用
服务调用关系:
- 服务提供者:暴露接口给其他微服务调用
- 服务消费者:调用其他微服务提供的接口
- 提供者与消费者角色是相对的
- 一个服务可以是消费者或提供者
1、Eureka
问题引出
- 服务消费者如何动态获得服务提供者的地址信息
- 如果有多个服务提供者,消费者该如何选择
- 消费者如何知道提供者的健康状态
解决
1、
- 服务提供者启动时向eureka注册自己的信息
- eureka保存这些信息
- 消费者根据服务名称向eureka拉去提供者信息
2、
- 负载均衡
3、
- 维持心跳
- 即使更新
步骤
1、搭建EurekaServe
- 引入Eureka-server依赖
- 引入@EnableEurekaServer注解
- 在application.yml中配置eureka地址
2、服务注册
- 引入eureka-client依赖
- 在application.yml中配置eureka地址
3、服务发现
- 引入Eureka-client 依赖
- 在application.yml中配置eureka地址
- 在Restemplate中添加@LoadBalanced注解
- 用服务提供者的服务名称远程调用
2、Ribbon负载均衡
负载均衡策略
1、代码方式:
在oreder-service中的OrederApplication类中,定义一个新的Rule:
@Bean
public IRule randomRule(){
return new RandomRule();
}
Oreder访问任何服务都依赖于此
2、配置文件
userservice:
ribbon:
饥饿加载
Ribbo默认采用的是懒加载,第一次访问会创建LoadBalancedClient,请求会很长。 而饥饿加载会在启动时创建,降低第一次访问时间
ribbon:
eager-load:
enable: true
clients: #集合
-
、