java - Lagom 使用 Kafka 发布消息

标签 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

最佳答案

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

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

关于java - Lagom 使用 Kafka 发布消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47632257/

相关文章:

java - KafkaProducer 连接被拒绝

java - 如何关闭 eclipse 中某些文件夹(如 node_modules)的 javascript 验证(包括 tern/lint/jshint)?

java - Maven 对使用 JRE 感到困惑

java - 生产者无法将消息分发给多个消费者?

scala - 无法使用Zookeeper启动kafka(kafka.common.InconsistentClusterIdException)

python - 在 ROS - Python 中使用来自多个主题的数据

transactions - 使用 MassTransit 进行交易和错误处理的发布/订阅

angularjs - $rootScope.$broadcast in factory 不能改变其他 $scope 中的值

java - 运行时出现空指针异常的原因是什么?

java - 在包含 ListView (Android) 的 View 中滚动