当前位置: 首页 > news >正文

一文学习nacos和openFeign

目录

  • 为什么需要nacos
  • 注册中心原理
  • nacos注册中心
    • nacos安装
    • 服务注册/调用
  • openFeign远程调用

为什么需要nacos

微服务架构是目前流行的企业技术架构,多个服务由之前部署在一个服务器,开发在同一个程序中,到目前各自部署到不同的服务器中,每个微服务与其他微服务解耦,微服务之间互相调用构成企业技术架构,协同完成企业业务需求;
那具体怎么调用是关键,某些微服务比较核心,比如支付服务,访问量很大,为了避免服务器负载过大夯机,一般会把服务部署在多台服务器实例中,那其他微服务调用时应该调用哪个实例?这是个问题
在这里插入图片描述

注册中心原理

为了解决这个问题,方便微服务之间互相调用,注册中心应运而生,简单来说注册中心就是微服务启动之后把服务名、服务器实例IP和端口注册到注册中心,其他服务调用时直接通过被调用的微服务名称从注册中心拿到被调用微服务的所有实例,然后通过负载均衡算法从其中选择一个实例去调用,就是这么简单。
在这里插入图片描述

  1. 服务提供者:提供接口供其它微服务访问
  2. 服务消费者:调用其它微服务提供的接口
  • 服务提供者会定期向注册中心发送请求,报告自己的健康状态(心跳请求)
  • 当注册中心长时间收不到提供者的心跳时,会认为该实例宕机,将其从服务的实例列表中剔除
  • 当服务有新实例启动时,会发送注册服务请求,其信息会被记录在注册中心的服务实例列表
  • 当注册中心服务列表变更时,会主动通知微服务,更新本地服务列表

nacos注册中心

注册中心的产品有很多,目前国内用nacos还是多一些,nacos是阿里的产品,中文文档会多一些。

nacos安装

建议使用docker安装

  1. docker pull nacos 下载nacos镜像
  2. 创建挂载目录
  3. docker run 创建容器,部署应用
  4. 配置mysql数据库,更改nacos配置,走配置的mysql数据库
  5. 重启nacos

服务注册/调用

nacos使用起来很简单,只要导入起步依赖,配置nacos地址即可

  1. 导入依赖
<!--nacos 服务注册发现-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 在yaml配置文件配置nacos地址
spring:application:name: item-service # 服务名称cloud:nacos:server-addr: 192.168.150.101:8848 # nacos地址
  1. 在不用openFeign之前,spring cloud会自动为容器自动装配服务发现组件DiscoveryClient,我们通过这个组件和服务名称就能从nacos中找到这个服务的所有实例,然后通过
  2. 均衡算法,确定一个实例,发送请求即可。
    在这里插入图片描述

openFeign远程调用

上面这种方式虽然可行,但是实现方式比较繁琐,openFeign提供了一种更为简便的方式实现服务间远程调用,简单说就是写openFeign接口,将http协议最重要的请求方式、URL、请求参数、响应体类型写到接口上,然后基于动态代理将代理对象注册到IOC容器中,直接调用openfeign代理对象方法即可实现远程调用。
1. 引入依赖

  <!--openFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--负载均衡器--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>

2. 定义openfeign客户端接口

package com.hmall.cart.client;import com.hmall.cart.domain.dto.ItemDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;import java.util.List;@FeignClient("item-service")
public interface ItemClient {@GetMapping("/items")List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);
}
  1. @FeignClient("item-service") :声明服务名称
  2. @GetMapping("/items") :声明请求方式和请求路径
  3. @RequestParam("ids") Collection<Long> ids :声明请求参数
  4. List<ItemDTO> :响应体解析类型

3. 使用openfeign客户端

public class Service{@Autowiredprivate ItemClient itemClient;public void test(){List<Long> items = Arrays.asList(1l,2l);List<ItemDTO> res = itemClient.queryItemByIds(items);} 
}

4. 日志管理
只有包的日志级别是debug时,openFeign的日志才会生效 ,此外,还需要单独配置openFeign的日志级别,openFeign的日志级别有4级,Feign默认的日志级别就是NONE,所以默认我们看不到请求日志。

  • NONE:不记录任何日志信息,这是默认值。
  • BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
  • HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
  • FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
//1.定义openFeign配置类
import feign.Logger;
import org.springframework.context.annotation.Bean;public class DefaultFeignConfig {@Beanpublic Logger.Level feignLogLevel(){return Logger.Level.FULL;}
}// 单独配置到某个feignclient接口,或者全局配置
@FeignClient(value = "item-service", configuration = DefaultFeignConfig.class)
//全局配置
@EnableFeignClients(defaultConfiguration = DefaultFeignConfig.class)
http://www.lryc.cn/news/616177.html

相关文章:

  • MariaDB 数据库管理
  • 【牛客刷题】小红的项链(字节跳动面试题)
  • Graham 算法求二维凸包
  • OpenEnler等Linux系统中安装git工具的方法
  • WGS84 与 ITRF 坐标系的差异及转换算法详解
  • Linux | i.MX6ULL移植 ssh 服务到开发板(第十五章)
  • 苍穹外卖-Day1 | 环境搭建、nginx、git、令牌、登录加密、接口文档、Swagger
  • 攻击实验(ARP欺骗、MAC洪范、TCP SYN Flood攻击、DHCP欺骗、DHCP饿死)
  • 【接口自动化】初识pytest,一文讲解pytest的安装,识别规则以及配置文件的使用
  • YOLOv11 模型轻量化挑战:突破边缘计算与实时应用的枷锁
  • Ollama+Deepseek+Docker+RAGFlow打造自己的私人AI知识库
  • C语言深度剖析
  • Docker 详细介绍及使用方法
  • 【东枫科技】 FR2 Massive MIMO 原型验证与开发平台,8*8通道
  • DBSACN算法的一些应用
  • 力扣-20.有效的括号
  • Design Compiler:布图规划探索(ICC II)
  • 【FPGA】初识FPGA
  • Jotai:React轻量级状态管理新选择
  • 密码学的数学基础2-Paillier为什么产生密钥对比RSA慢
  • 重学React(四):状态管理二
  • 机器学习第八课之K-means聚类算法
  • 编程基础之多维数组——计算鞍点
  • 【Docker实战】将Django应用容器化的完整指南
  • 【代码随想录day 15】 力扣 257. 二叉树的所有路径
  • [FOC电机控制] 电压频谱图
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘ray’问题
  • Redis一站式指南一:从MySQL事务到Redis持久化及事务实现
  • 【每天一个知识点】深度领域对抗神经网络
  • MACBOOK M1安装达梦8数据库