微服务 feign-gateway

早期微服务跨集群调用 使用的是Eureka 和RestTemplate,这种写法虽然可以解决服务之间的调用问题 ,但是随着服务的增多,实例变动,早期的写法相当于把请求方式,请求地址,参数写死了,耦合度太高,参数非常多的情况使用起来不方便。

Feign

Feign是一种声明式的 ,模板客户端,可以使用类似于SpringMvc风格的注解,更加方便的实现服务之间 的调用。

如何使用?

首先你肯定需要导入依赖 这里直接去导入SpringCloud的起步依赖

<dependency> 
<groupId>org.springframework.cloud</groupId>  
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

然后在服务调用者的启动类上开启Feign

会发现它是基于接口的 风格和以SpringMVC的风格相似

那么你只需要通过Feign客户端调用方法 他就可以返回对应的返回值类型 非常方便

如何配置Feign 这里只给出

日志的配置

日志级别

  1. NONE:没有日志记录

  2. BASIC:记录请求方法、URL以及响应状态代码和执行时间

  3. HEADERS:记录基本信息以及请求和响应头信息

  4. FULL:记录基本信息以及请求和响应头信息、请求和响应体信息

Feign性能优化:

1.Feign使用的是默认的UrlConection

可以修改为 连接池 Apache提供的HttpClient,或者是OKHttp

2.修改日志级别,因为日志也是比较消耗性能,如果日志级别是Full,那就输出全部日志信息,修改为None又不太合适,什么都不输出还要日志干什么。所以推荐使用的是Basic.

Feign最佳实践方案:

经过市场的实践与检验,给出了两种最佳实践。

1.继承

通过定义统一Api接口 服务的调用者Feign客户端可以继承api类,但是无法继承接口的参数,需要自己重新写。

服务的提供者可以实现接口,重写业务逻辑。

但是这样会造成紧耦合。

并且官方也不推荐这样做。

2.方式二(抽取):将FeignClient抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用,

GateWay网关

利用nacos实现了微服务的配置 注册发现 解决了服务间的统一调度,利用Feign实现了服务调用,但是对于客户端请求,以及服务响应就必须使用网关。

SpringCloud实现网关的方式有

zuul gateway

Zuul使用的是阻塞式编程,学过Io流,大家应该知道,阻塞式编程,就是等待请求的过程中,程序会一直等待直到完成,等待过程中不做任何事。

GateWay使用响应式编程,性能更好。

网关路由配置:

server:
  port: 10010
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: nacos:8848 # nacos地址
    gateway:
      routes:
        - id: user-service # 路由标示,必须唯一
          uri: lb://userservice # 路由的目标地址
          predicates: # 路由断言,判断请求是否符合规则
            - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**
      default-filters:
        - AddRequestHeader=Truth,hhhhhhhhhhhhhh!

过滤器:

GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:

单个路由下都可以配置自己的filter,也可以配置Defaultfilter为所有路由配置

或者是配置全局路由,需实现路由接口。

网关跨域配置

相关推荐
计算机学长felix1 小时前
基于SpringBoot的“交流互动系统”的设计与实现(源码+数据库+文档+PPT)
spring boot·毕业设计
.生产的驴1 小时前
SpringBoot 对接第三方登录 手机号登录 手机号验证 微信小程序登录 结合Redis SaToken
java·spring boot·redis·后端·缓存·微信小程序·maven
顽疲1 小时前
springboot vue 会员收银系统 含源码 开发流程
vue.js·spring boot·后端
撒呼呼1 小时前
# 起步专用 - 哔哩哔哩全模块超还原设计!(内含接口文档、数据库设计)
数据库·spring boot·spring·mvc·springboot
因我你好久不见2 小时前
springboot java ffmpeg 视频压缩、提取视频帧图片、获取视频分辨率
java·spring boot·ffmpeg
Yvemil72 小时前
《开启微服务之旅:Spring Boot Web开发》(二)
前端·spring boot·微服务
维李设论2 小时前
Node.js的Web服务在Nacos中的实践
前端·spring cloud·微服务·eureka·nacos·node.js·express
计算机学长felix2 小时前
基于SpringBoot的“旅游管理系统”的设计与实现(源码+数据库+文档+PPT)
spring boot·毕业设计
苹果醋33 小时前
SpringBoot快速入门
java·运维·spring boot·mysql·nginx
皓木.4 小时前
(自用)配置文件优先级、SpringBoot原理、Maven私服
java·spring boot·后端