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);
}