SpringCloud微服务之间调用 Feign
-
前情提要:需要在zuul-gateway服务调用login-module服务的login方法, 用来判断用户登录是否成功, 以及取得用户Id
- 加入依赖架包
// https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-feign compile group: org.springframework.cloud, name: spring-cloud-starter-feign, version: 1.4.6.RELEASE
- 在zuul-gateway服务主方法类上加@EnableFeignClients注解
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) @EnableZuulProxy @EnableFeignClients public class GatewayServiceZuulApplication { public static void main(String[] args) { SpringApplication.run(GatewayServiceZuulApplication.class, args); } }
- 在zuul-gateway服务里增加一个接口, 用来指向将要调用的服务
@FeignClient(value = "login-module") public interface UserLoginService { @PostMapping("/user/login") ResultWrapper login(UserEntity user); }
@FeignClient(value = "login-module")注解value值是login-module服务注册名称 @PostMapping("/user/login")是被调用服务的Http方法及url
- 在zuul-gateway服务的SimpleRealm中调用login服务
@Component public class SimpleRealm { // 用刚定义好的接口创建一个对象 @Resource private UserLoginService userLoginService; @Override public void others() { // 调用UserLoginService接口的方法login, 就相当于调用login-module服务中的userLogin(). ResultWrapper wrapper = userLoginService.login(user); } }
- login-module服务
@RestController @RequestMapping("/user") public class UserInfoController{ @Resource private UserInfoService userInfoService; @PostMapping("/login") public ResultWrapper userLogin(UserEntity user) { return userInfoService.findUserByUsername(user); } }
温馨提示: 在被调用的服务login-module里, 不需要添加和Feign相关的代码, 跨服务调用主要是通过发起者zuul-gateway完成的.
上一篇:
初学者怎么学习java编程