一、前言
记录工作中遇到的开发问题,而不是写博客凑字数。
二、微服务调用
1、通过本服务调用另外一个服务,需要定义一个接口,并用@FeignClient 注解进行注解
value = "服务名" 要调用的服务名
服务得到路径,对应的是controller的请求路径。
/tmpUser/updateUserNickName
@FeignClient(value = "服务名")
public interface BlockChainClient {
@PostMapping("/tmpUser/updateUserNickName")
ResponseData<String> updateUserNickName(@RequestBody Map<String, Object> params);
}
需要调用的服务的controller
@Slf4j
@RestController
@RequestMapping("tmpUser")
public class UserTmpController {
@Autowired
private UserService userService;
@ApiOperation(value = "更新用户昵称", notes = "更新用户昵称")
@PostMapping("updateUserNickName")
public ResponseData<String> updateUserNickName(@RequestBody Map<String, Object> param) {
try {
String phone = "";
String nickName="";
if(param.containsKey("phone")) {
phone = param.get("phone").toString();
}
if(param.containsKey("nickName")) {
nickName = param.get("nickName").toString();
}
if(!StringUtils.isEmpty(phone) && !StringUtils.isEmpty(nickName)) {
userService.updateUserNickName(phone, nickName);
}
return ResponseData.success();
} catch (Exception e) {
e.printStackTrace();
}
return ResponseData.error();
}
}
2.遇到的问题:
定义的接口传的参数类型需要和接口的参数类型一致,包括注解,否则报400错误。
比如接口是:@RequestBody 而 服务的controller是@RequestParam 就会包400错误、
----------------
feigin得到实现原理
Feign是一个声明式的REST API客户端,使得编写HTTP客户端变得更简单。使用Feign,只需创建一个接口并注解,Feign会为你生成实现。你不需要手动创建每次HTTP请求。Feign简化了与远程HTTP服务的交互,提供了简洁、强大的注解支持,并允许你定义接口和注解,以简化HTTP客户端的创建。
以下是Feign实现原理的概述,由于篇幅限制,这里无法提供5000字的详细解释,但可以为你提供一个全面的概览:
- 注解驱动:Feign使用注解来定义HTTP请求的各种参数,例如URL、HTTP方法、请求头、请求体等。通过注解,Feign可以自动生成请求的代码,用户只需编写声明式的接口即可。
- Ribbon与Hystrix集成:Feign默认集成了Ribbon和Hystrix。Ribbon是一个负载均衡器,可以根据配置自动在多个服务实例之间进行请求的分配。Hystrix则是一个容错管理工具,可以自动处理服务调用中的延迟和故障。
- 可插拔的编码器和解码器:Feign允许用户自定义请求和响应的编码器和解码器,以支持不同的数据格式和HTTP客户端库。
- 可配置的模板:Feign允许用户根据需要配置不同的HTTP模板,例如使用不同的连接池、设置不同的超时时间等。
- 适配器模式:Feign使用适配器模式来集成不同的HTTP客户端库,例如Apache HttpClient、OkHttp等。这意味着用户可以根据需要选择最适合自己的HTTP客户端库。
- Spring Cloud集成:Feign与Spring Cloud紧密集成,可以方便地与Spring Cloud的其他组件(例如Eureka、Zuul等)配合使用。
- 扩展性:Feign提供了丰富的扩展点,允许用户根据需要定制Feign的行为,例如自定义请求和响应的处理方式等。
总之,Feign的实现原理基于注解驱动、Ribbon与Hystrix集成、可插拔的编码器和解码器、可配置的模板、适配器模式、Spring Cloud集成和扩展性等方面,这些特点使得Feign成为了一个强大而灵活的REST API客户端。如需更深入了解Feign的实现原理,建议查阅官方文档或相关资料。