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

相关推荐
AI产品测评官7 小时前
突破系统割裂困局:2026企业级AI招聘架构如何迈向“原生全流程”?
大数据·微服务·架构
寒草8 小时前
【寒草呈献】当巴菲特走进 AI 投研助手
人工智能·架构
ltl8 小时前
推理服务化:Triton、Ray Serve、KServe 与 PD 分离
架构
@insist1238 小时前
系统集成项目管理工程师-安全架构与云原生架构
云原生·架构·软考·安全架构·系统集成项目管理工程师·软考中项·软件水平考试
Java成神之路-9 小时前
集群架构 vs 分布式微服务架构:核心区别通俗拆解
分布式·微服务·架构
ltqvibe10 小时前
企业数智化中台的五层架构——AI框架为什么需要纵向贯通
大数据·人工智能·架构
9523612 小时前
Spring-cloud配置中心
java·spring·spring cloud·微服务
物质波波波12 小时前
WS-RPE:面向边缘物理AI实时特征值计算的硬件工作窃取调度器与冗余PE激活架构
人工智能·fpga开发·架构·系统架构·硬件架构
阿里云云原生12 小时前
一张告警卡片到一键 RCA:塔斯汀万店连锁的智能运维闭环实践
云原生