首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Zio-Kafka:向主题生成消息

Zio-Kafka:向主题生成消息
EN

Stack Overflow用户
提问于 2021-08-07 12:26:43
回答 1查看 107关注 0票数 0

我正在尝试使用0.15.0版本的库zio-kafka向Kafka主题生成一些消息。

显然,我对ZIO生态系统的理解是次优的,因为我不能产生一个简单的消息。我的程序如下:

代码语言:javascript
运行
复制
object KafkaProducerExample extends zio.App {

  val producerSettings: ProducerSettings = ProducerSettings(List("localhost:9092"))

  val producer: ZLayer[Blocking, Throwable, Producer[Nothing, String, String]] =
    ZLayer.fromManaged(Producer.make(producerSettings, Serde.string, Serde.string))

  val effect: RIO[Nothing with Producer[Nothing, String, String], RecordMetadata] =
    Producer.produce("topic", "key", "value")

  override def run(args: List[String]): URIO[zio.ZEnv, ExitCode] = {
    effect.provideSomeLayer(producer).exitCode
  }
}

编译器给出以下错误:

代码语言:javascript
运行
复制
[error] KafkaProducerExample.scala:19:28: Cannot prove that zio.blocking.Blocking with zio.Has[zio.kafka.producer.Producer.Service[Nothing,String,String]] <:< Nothing with zio.kafka.producer.Producer[Nothing,String,String].
[error]     effect.provideSomeLayer(producer).exitCode
[error]                            ^
[error] one error found

有人能帮我理解一下发生了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-07 13:13:36

在创建producer层的过程中,ZIO需要一些关于类型的提示:

代码语言:javascript
运行
复制
val producer: ZLayer[Blocking, Throwable, Producer[Any, String, String]] =
    ZLayer.fromManaged(Producer.make[Any, String, String](producerSettings, Serde.string, Serde.string))

在调用make智能构造函数时,我们必须为他提供我们想要使用的类型。第一个表示构建键和值序列化程序所需的环境,后两个是消息的键和值的类型。

在这种情况下,我们根本不需要环境来构建两个序列化程序,所以我们传递Any

最后,Producer.produce函数还需要一些类型提示:

代码语言:javascript
运行
复制
val effect: RIO[Producer[Any, String, String], RecordMetadata] =
    Producer.produce[Any, String, String]("topic", "key", "value")

完成上述更改后,类型完全对齐,编译器再次满意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68692354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档