仅描述了一种发布方式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
答案 0 :(得分:1)
目前不支持此功能。你可以做的是直接自己实例化Kafka客户端(这并不难),像这样强制发布消息。
虽然将来会增加对发布消息的支持,但Lagom还没有增加支持的一个原因是,当人们想要这样做时,他们实际上会在他们的系统中引入反模式,例如不一致的机会。例如,如果您有更新某个数据库的服务,然后向Kafka发布消息,那么您就会遇到问题,因为如果数据库更新成功,但是消息发布失败,则没有任何内容可以获得该更新,并且您的系统将处于不一致状态。 this presentation详细了解这是一个问题的原因,以及如何从事件日志中发布事件来解决问题。