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完成的.

你可能感兴趣的:(软件开发)