Lagom与Kafka发布消息

时间:2017-12-04 11:24:10

标签: java apache-kafka publish-subscribe lagom

仅描述了一种发布方式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

1 个答案:

答案 0 :(得分:1)

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

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