【问题标题】:Lagom Publish message with KafkaLagom 使用 Kafka 发布消息
【发布时间】:2018-05-17 20:28:39
【问题描述】:

here 仅描述了一种发布方式。 还有另一种方法吗? 我需要在没有persistentEntityRegistry的情况下使用动态主题ID和自定义事件进行发布的示例? 以及如何使用 eventId 发布事件?

 @Override
  default Descriptor descriptor() {
    return named("helloservice").withCalls(
        pathCall("/api/hello/:id",  this::hello),
        pathCall("/api/event/:id", this::pushEventWithId) // id - eventId
      )
      .withTopics(
        topic(GREETINGS_TOPIC, this::greetingsTopic)
      )
      .withAutoAcl(true);
  }

处理请求。

public ServiceCall<RequestMessage, NotUsed> pushEventWithId(String eventId) {
    return message -> {
        // Here I need push this message to kafka with eventId. Another service should be subscribed on this eventId

    }
}

Lagom 版本:1.3.10

【问题讨论】:

    标签: java apache-kafka publish-subscribe lagom


    【解决方案1】:

    目前不支持此功能。你可以做的是直接自己实例化 Kafka 客户端(这并不难),以像这样命令式地发布消息。

    虽然将来会添加对强制发布消息的支持,但 Lagom 尚未添加支持的一个原因是,当人们想要这样做时,他们实际上是在他们的系统中引入了反模式,例如不一致的机会。例如,如果您有更新某个数据库的服务,然后向 Kafka 发布一条消息,那么您就有问题了,因为如果数据库更新成功,但消息发布失败,那么什么都不会获得该更新,并且您的系统将处于不一致的状态。 this presentation 详细了解为什么会出现这个问题,以及从事件日志中发布事件如何解决它。

    【讨论】:

    • 非常感谢您的回答。我是直接用 Kafka 客户端做的。
    • @VasiliyKomarov,您能分享一些如何在 Lagom 中获取 Kafka 客户端的示例吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    相关资源
    最近更新 更多