快捷搜索: 王者荣耀 脱发

SpringCloud微服务之间调用 Feign

    前情提要:需要在zuul-gateway服务调用login-module服务的login方法, 用来判断用户登录是否成功, 以及取得用户Id
  1. 加入依赖架包
// 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
  1. 在zuul-gateway服务主方法类上加@EnableFeignClients注解
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableZuulProxy
@EnableFeignClients
public class GatewayServiceZuulApplication {
          
   
    public static void main(String[] args) {
          
   
        SpringApplication.run(GatewayServiceZuulApplication.class, args);
    }
}
  1. 在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

  1. 在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);
    }
}
  1. 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完成的.

经验分享 程序员 微信小程序 职场和发展