首页 > 技术文章 > Java Spring Cloud服务间调用

CloverYou 2020-10-10 01:17 原文

A服务是用户服务,B服务某个需求需要用户信息,而B服务无法连接用户的数据库(分库),需要让A服务查询用户信息。


在B服务写一个接口去调用A服务的某个请求

/**
 * 访问A服务
 */
@FeignClient("member")
public interface RemoteMemberService {
  /**
   * 查询用户信息
   * @param memberIdAES 加密memberID
   * @return
   */
  @PostMapping("/member/queryMember")
  R queryMemberByMemberId(String memberIdAES);
}

@FeignClient("member")中需要A服务的id,这个id是在A服务的bootstrap.yml中的应用名称

spring: 
  application:
    # 应用名称
    name: member

最后需要在B服务的入口文件添加@EnableFeignClients("com.cainaer.*")注解

@EnableFeignClients("com.cainaer.*")
public class CaiNaErBlogApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(CaiNaErBlogApplication.class, args);
    }
}

最后通过 @Autowired 注入来使用这个接口

@Autowired
private RemoteMemberService remoteMemberService;
public void handler(String userId) {
    R result = remoteMemberService.queryMemberByMemberId(userId);
}

BUG修改

RemoteMemberService 接口一定要使用 @RequestParam(value = "memberIdAES", required = false)注解接收参数,否则A服务无法接收到我们传过去的参数:


/**
 * 访问A服务
 */
@FeignClient("member")
public interface RemoteMemberService {
  /**
   * 查询用户信息
   * @param userId 加密memberID
   * @return
   */
  @GetMapping(value = "member/queryMember")
  R queryMemberByMemberId(@RequestParam(value = "userId", required = false) String userId);
}

推荐阅读