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

相关推荐
zz0723203 小时前
深入理解Seata:微服务分布式事务解决方案
微服务·seata·分布式事务
商业模式源码开发3 小时前
跨店积分抵现模式深度解析:本地生活增值闭环的商业架构与落地方法论
架构·异业联盟
这个DBA有点耶3 小时前
时序数据库深度对比:2026 年主流 TSDB 架构演进与选型指南
数据库·sql·云原生·架构·运维开发·时序数据库
卖芒果的潇洒农民4 小时前
Work FW-HW架构
架构
caimouse4 小时前
Reactos 第 5 章 进程与线程 — 5.1 概述
c语言·windows·架构
该昵称用户已存在5 小时前
能源数字化架构手记:MyEMS 数据建模引擎的模块化拆分与接口治理
架构·能源
Whoami!5 小时前
05-【园区】SDN+VXLAN 私有云安全防护架构
网络安全·架构·sdn·拓扑图
小哈里5 小时前
【K8S】OCI标准下的企业级镜像治理:Harbor+Skopeo+Trivy 最佳实践
云原生·容器·kubernetes·harbor·镜像·skopen
花间相见5 小时前
【Kubernetes02】—— 使用 kubeadm 从零搭建 K8s 集群(实操避坑版)
云原生·容器·kubernetes
2501_941982055 小时前
基于自动化控制架构的企业微信群消息管理系统设计
架构·自动化·企业微信