微服务,拆分原则,远程调用,服务治理,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: 记录所有请求的响应的明细,包括头信息,请求体,元数据

相关推荐
塔望品牌咨询20 分钟前
烙印营销的“系统工程”:从“散点式”到“系统式”的十要务架构
架构·消费品·消费战略·塔望消费战略·消费品战略
毛骗导演29 分钟前
OpenClaw 沙箱执行系统深度解析:一条 exec 命令背后的安全长城
前端·架构
文心快码BaiduComate1 小时前
Comate搭载GLM-5.1:长程8H,对齐Opus 4.6
前端·后端·架构
毛骗导演1 小时前
OpenClaw Pi Agent 深度解析:嵌入式 Agent 运行时的架构设计与实现
前端·架构
前进的李工2 小时前
MySQL用户管理与权限控制指南(含底层架构说明)
开发语言·数据库·sql·mysql·架构
飞Link2 小时前
LangGraph 核心架构解析:节点 (Nodes) 与边 (Edges) 的工作机制及实战指南
java·开发语言·python·算法·架构
步步为营DotNet2 小时前
深度探索.NET Aspire在云原生应用性能与安全加固的创新实践
安全·云原生·.net
程序消消乐3 小时前
第一章:Claude Code 记忆系统——架构总览与四种记忆类型
大数据·架构·agent·claude code
阿里云云原生3 小时前
企业数据如何被 AI Agent 调用?EventHouse 打造 AI-Ready 数据底座
云原生
Agent产品评测局3 小时前
企业预算管理自动化落地,编制管控全流程实现方案 —— 2026企业级智能体选型与架构深度解析
运维·人工智能·ai·架构·自动化