- 前情提要:需要在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完成的.