微服务,拆分原则,远程调用,服务治理,OpenFeign

怎么拆分:

从拆分目标来说,要做到:

高内聚:每个微服务的职责尽量单一,包含的业务相互关联度高,完整度高

低耦合:每个微服务的功能要相互独立,尽量减少对其他微服务的依赖

从拆分方式来说,一般包含两种方式:

纵向拆分:按照业务模块拆分

横向拆分:抽取公共服务,提高复用性

拆分服务:

工程结构有两种:

1.独立Project

2.Maven聚合

远程调用

Spring给我们提供了一个RestTemplate工具,可以方便的实现Http请求的发生。使用步骤如下:

  1. 注入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

  1. 引入依赖,包括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>

  1. 通过@EnabkeFeignClients注解,启用OpenFeign功能

@EnabkeFeignClients

  1. 编写FeignClient

@FeignClient(value = "item-service")

public interface ItemClient{

@GetMapping("/items")

List<ItemDTO>queryItemByIds(@RequestParam("ids") Collection<Long>ids);

}

  1. 使用FeignClient,实现远程调用

List<ItemDTO> items=itemClient.queryItemByIds(List.of(1,2,3));

日志

NONE: 不记录任何日志信息,这是默认值

BASIC: 仅记录请求的方法·,URL以响应码和执行时间

HEADERS: 在BASIC的基础上,额外记录了请求和响应的头信息

FULL: 记录所有请求的响应的明细,包括头信息,请求体,元数据

相关推荐
咩咩啃树皮5 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
Linux-18746 小时前
分布式链路追踪系统之docker-compose安装skywalking
云原生·docker-compose·skywalking·分布式链路追踪系统·应用程序性能监控
CS创新实验室8 小时前
量子计算机的操作系统:原理、实践与经典架构之对比
架构·操作系统·量子计算
人间凡尔赛8 小时前
WAIC 2026 落幕,AI Agent 开发已进入 Harness 架构时代
人工智能·架构
极客侃科技8 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
晏宁科技YaningAI9 小时前
VoIP系统的工程实现模型:从信令控制到媒体传输的完整架构解析
网络·人工智能·架构·系统架构·信息与通信
剑之所向9 小时前
前后端分离架构
架构
延凡科技10 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
隔窗听雨眠12 小时前
Spring Boot在云原生时代的编程范式革新研究
spring boot·后端·云原生
Hui Baby13 小时前
K8S使用CRD和控制器简单应用
云原生·容器·kubernetes