SpringCloud怎么调用多个服务的信息

时间:2022-6-2    作者:老大夫    分类: JAVA


例如: 查询小明借阅的图书列表
借阅信息数据库为
id:1 uid: 1 bid:1
id:2 uid: 1 bid:3
我们需要把
uid的1 变成小明
bid的1和3 变成两本书籍的信息

这就需要 template 来进行远程调用

后面使用OpenFeign会更加简单(类似mybatis配置使用),这里是template的使用

User user = template.getForObject("http://localhost:8101/user/"+uid, User.class);

这样就可以远程调用接收User对象了

List<Book> bookList = borrow
                .stream()
                .map(b -> template.getForObject("http://localhost:8201/book/"+b.getBid(), Book.class))
                .collect(Collectors.toList());

这样就可以获取书籍的list集合了

return new UserBorrowDetail(user, bookList);

然后返回数据就可以了
实体类是这样的:

@Data
@AllArgsConstructor
public class UserBorrowDetail {
    User user;
    List<Book> bookList;
}

关于template的完整代码,template可以配置在config包中

@Configuration
public class BeanConfig {
    @Bean
    //可以给template类配制负载均衡
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

在ServiceImpl中具体使用

@Service
public class BorrowServiceImpl implements BorrowService {
    @Resource
    BorrowMapper mapper;

    @Autowired
    RestTemplate template;

    @Override
    public UserBorrowDetail getUserBorrowDetailByUid(int uid) {
        List<Borrow> borrow = mapper.getBorrowsByUid(uid);
        //RestTemplate支持多种方式的远程调用
        //这里通过调用getForObject来请求其他服务,并将结果自动进行封装
        //获取User信息
        User user = template.getForObject("http://userservice/user/"+uid, User.class);
        //获取每一本书的详细信息
        List<Book> bookList = borrow
                .stream()
                .map(b -> template.getForObject("http://bookservice/book/"+b.getBid(), Book.class))
                .collect(Collectors.toList());
        return new UserBorrowDetail(user, bookList);

    }
}

标签: spring springcloud


扫描二维码,在手机上阅读

推荐阅读: