目录
1、什么是OpenFeign
1、Feign是什么??http请求
Feign是集成了负载均衡、熔断机制、Http请求管理等功能的框架,作用是做微服务通信。Feign目前已经停止维护了,被Spring的OpenFeign接替实现后续功能。
负载均衡:服务器承担的压力就是负载,压力越大负载越大;均衡就是降低服务器承担的压力。
熔断机制:微服务之间通信的时候,A微服务给B微服务发送请求来获得B微服务里的数据。如果B微服务处于宕机状态,这样当A给B发请 求的时候,A会一直处于等待状态,等待B给出响应。这样对客户来说就不友好了。 熔断机制就是A给B发请求,过了一会没有 响应,于是A就自动切断了这一次请求,马上给客户一个响应。【熔断后面会详细学习,今天不做过多解释。】
http请求管理:就是A 的Controller 给 B 的Controller 发送了一个Http请求。
2、OpenFeign是什么
OpenFeign是SpringCloud下的一个框架,用于做微服务通信的,采用RESTFull风格做服务直接通信。实现方式也是通过发送http请求进行通信的,但是OpenFeign是在Spring环境下实现的,天然支持Spring的思想和注解,让开发变得更简单。
3、Feign和openFeign有什么区别
Feign对HTTP进行了封装,实现的微服务通信,OpenFeign是在Spring环境下对Feign进行的二次升级,让OpenFeign框架更简单,更贴近Spring,开发者在使用时减少了很多障碍。
官方文档: Spring Cloud OpenFeign
2、应用
1、 需要开启nacos 和redis
2、准备工作
【0.使用SpringSession共享例子】
下面图片是微服务SpringSession解析部署使用全流程-优快云博客中创建出来的
在此基础上做改动。具体可了解此地址博客
改动后
【1.对springsession做改动】
#1.添加实体类 Score
package com.jr.entry;
import lombok.Data;
@Data
public class Score {
private String name;
private Double score;
}
#2.添加实体类 UserDto
package com.jr.entry;
import lombok.Data;
import java.util.List;
@Data
public class UserDto {
private String id;
private String name;
private String password;
private List<Score> scoreList;
}
#3.添加接口 IUserService
package com.jr.servie;
import com.jr.entry.UserDto;
public interface IUserService {
public UserDto info();
}
#4.添加接口实现类 UserServiceImpl
package com.jr.servie.impl;
import com.jr.entry.UserDto;
import com.jr.servie.IUserService;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements IUserService {
@Override
public UserDto info() {
return new UserDto();
}
}
#5.添加 UserController 类
报红等后面的工具类配置完在引包
package com.jr.controller;
import com.jr.entry.UserDto;
import com.jr.servie.IUserService;
import com.jr.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
@GetMapping
public Result info(){
UserDto userDto=userService.info();
return Result.ok().put("data",userDto);
}
}
#6.添加枚举 ResultCode
package com.jr.util;
public enum ResultCode {
SUCCESS(0, "请求成功"),
ERROR(1, "请求失败"),
;
private