怎么拆分:
从拆分目标来说,要做到:
高内聚:每个微服务的职责尽量单一,包含的业务相互关联度高,完整度高
低耦合:每个微服务的功能要相互独立,尽量减少对其他微服务的依赖
从拆分方式来说,一般包含两种方式:
纵向拆分:按照业务模块拆分
横向拆分:抽取公共服务,提高复用性
拆分服务:
工程结构有两种:
1.独立Project
2.Maven聚合
远程调用
Spring给我们提供了一个RestTemplate工具,可以方便的实现Http请求的发生。使用步骤如下:
- 注入RestTemplate到Spring容器
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
发动远程调用
public<T> ResponseEntity<T>exchange(
String url, // 请求路径
HttpMethod method, //请求方式
@Nullable HttpEntity<?> requestEntity, //请求实体
Class<T>responseType, //返回值类型
Map<String,?> urlVariables; //请求参数
)

注册中心原理

服务注册步骤如下:
引入nacos discovery 依赖:
<dependency>
<groupId>com.alibaba.cloud</groupid>
<artifactId>spring-cloud-start-alibaba-nacos-discovery</artifactId>
</dependency>
配置Nacos地址
spring:
application:
name: item-service #服务名称
server-addr: 192.168.64.150:8848 #nacos地址
private final DiscoveryClient discoveryClient;private void handleCartItems(List<CartVO>vos){
//1.根据微服务名称,拉取服务的实例列表
List<ServiceInstance>instances=discoveryClient.getInstances("item-service");
// 2.负载均衡,挑选一个实例
ServiceInstance instance = instances.get(Randomutil.randomInt(instances.size()))
// 3. 获取实例的IP和端口
URI uri = instance.getUrl();
}
但是我们发现上面太麻烦了,有没有简化的?
OpenFeign
- 引入依赖,包括OpenFeign和负载均衡组件SpringCloudLoadBalancer
<dependency>
<groupId>org.springframework.cloud</groupid>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<grouId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
- 通过@EnabkeFeignClients注解,启用OpenFeign功能
@EnabkeFeignClients
- 编写FeignClient
@FeignClient(value = "item-service")
public interface ItemClient{
@GetMapping("/items")
List<ItemDTO>queryItemByIds(@RequestParam("ids") Collection<Long>ids);
}
- 使用FeignClient,实现远程调用
List<ItemDTO> items=itemClient.queryItemByIds(List.of(1,2,3));
日志
NONE: 不记录任何日志信息,这是默认值
BASIC: 仅记录请求的方法·,URL以响应码和执行时间
HEADERS: 在BASIC的基础上,额外记录了请求和响应的头信息
FULL: 记录所有请求的响应的明细,包括头信息,请求体,元数据