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

相关推荐
kisshuan123963 小时前
CSP-EBlock-Mamba融合架构改进YOLOv26跨阶段空洞卷积与状态空间模型协同建模
yolo·目标跟踪·架构
NAGNIP3 小时前
程序员最强AI画图工具大全!
人工智能·架构
摇滚侠3 小时前
Java 项目教程《黑马商城-MQ 篇》,分布式架构项目,从开发到部署
java·分布式·架构
C澒3 小时前
微前端容器标准化:从碎片化到统一架构的渐进式改造
前端·架构
彭于晏Yan3 小时前
Springboot实现微服务监控
spring boot·后端·微服务
小江的记录本4 小时前
【Spring Boot—— .yml(YAML)】Spring Boot中.yml文件的基础语法、高级特性、实践技巧
xml·java·spring boot·后端·spring·spring cloud·架构
小超同学你好4 小时前
Transformer 13. DeepSeek LLM 架构解析:与 LLaMA 以及 Transformer 架构对比
人工智能·语言模型·架构·transformer·llama
就叫飞六吧4 小时前
K8s 端口暴露:集群统一暴露 vs 单 Pod 暴露
云原生·容器·kubernetes
balmtv4 小时前
Grok技术架构深度拆解:从314亿MoE到多智能体内生化的演进之路
架构