scala - 如何在 ZStream (ZIO) 的帮助下构建批处理请求并理解响应?
问题描述
我有 api 得到这样的请求:
case class UsersRequest(ids: List[Long])
并返回这样的响应:
case class UsersInfoResponse(info: List[Info])
case class Info(userId: Long, info: String)
另外,我有发送此请求并创建用户的方法:
def createUser(id: Long): IO[Throwable, User] = {
getUserInfo(id)
.map(info => User(id, info))
}
def getUserInfo(id:Long): IO[Throwable, String] = {
here i call grpc service
service.getUserInfo(UsersRequest(List(id)))
}
我想:
- 编写创建 ids 批处理的 ZStream
- 每 1 秒需要 10 个 id 并创建 UsersRequest
- 获取用户信息响应
- 使用 id 了解必须获取的信息
- 返回信息
所以我可以做到这一点,我应该创建类似的东西:
def getUserInfo(id:Long): IO[Throwable, String] = {
Stream
.fromQueue()
.groupedWithin(10, Duration.Zero)
.????
.runDrain
.forkManaged
AND
p <- Promise.make[Throwable, String]
interrupted <- Promise.make[Nothing, Unit]
env <- ZIO.environment[R]
}
我不知道我怎么能做到。如何构建批处理并发送请求并在匹配后通过 id 获得结果?
解决方案
推荐阅读
- python - 层次结构中的 Django 相关对象
- react-native - 从嵌套平面列表更新嵌套对象并限制选中的复选框数量
- python - 警告 - 函数 make_blob 已弃用
- javascript - Naker.back 与 React
- ruby - net/http gem 不在 Ruby 的默认库中吗?
- reactjs - 使用 Babel 配置 webpack 以使用 TypeScript
- node.js - 由于未解析的别名,无法启动节点服务器
- c# - 如果电子邮件是使用桌面版 MS Outlook 发送的,为什么重新发送电子邮件不会将副本保存到 Exchange Online 中的 SentItems?
- facebook - 从另一个页面自动分享 Facebook 页面上的帖子
- java - FirebaseRecycleAdapter 仅显示一个结果