Feign项目实操

94 阅读1分钟

业务描述

管理员模块调用用户模块的相关信息,使用feign后,流程可看作为:

graph TD
Admin --> Feign --> User

相关代码

被调用者业务:User

前台将会传入分页信息,根据分页信息查询用户列表

@RestController  
public class RealNameClient implements WmUserClient {  
  
@Autowired  
private ApUserRealnameService apUserRealnameService;  
  
/**  
* 获取用户列表信息  
* @param dto  
* @return  
*/  
@Override  
@PostMapping("/user/api/v1/auth/list")  
public ResponseResult getUserList(@RequestBody WmPageDto dto) {  
    return apUserRealnameService.getUserList(dto);  
    }  
}

中介转发业务:Feign

@FeignClient("leadnews-user")  
public interface WmUserClient {  
  
@PostMapping("/user/api/v1/auth/list")  
ResponseResult getUserList(@RequestBody WmPageDto dto);  
  
}

需要注意的是@FeignClient("leadnews-user") 中的参数为被调用者spring.application.name的值

image.png

调用者业务:Admin

直接调用中介Feign的相关方法,而不是User的

@RequestMapping("/api/v1/auth")  
@RestController  
public class AuthFeign implements WmUserClient{  
  
@Resource  
private WmUserClient wmUserClient;  
  
@PostMapping("/list")  
@Override  
public ResponseResult getUserList(WmPageDto dto) {  
    return wmUserClient.getUserList(dto);  
}  
}

启动类添加注解@EnableFeignClients(clients = WmUserClient.class)

@ConditionalOnNacosDiscoveryEnabled  
@MapperScan("com.heima.admin.mapper")  
@SpringBootApplication  
@EnableFeignClients(clients = WmUserClient.class)  
public class AdminApplication {  
  
public static void main(String[] args) {  
SpringApplication.run(AdminApplication.class, args);  
}  
  
}

测试

使用admin查询user信息成功

image.png

小结

feign 定义为接口,可以将调用者和被调用者implements实现对应的方法