这里只描述了一种发布方式。还有别的办法吗?我需要使用动态主题id和自定义事件生成一个发布,而不使用persistententityregistry的示例是什么?如何使用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条答案
按热度按时间vsaztqbk1#
目前不支持此操作。您可以自己直接示例化kafka客户机(这并不难做到),以便像那样强制发布消息。
虽然将来会增加对强制发布消息的支持,但lagom还没有增加支持的一个原因是,当人们想要这样做时,他们通常会在系统中引入反模式,例如不一致的机会。例如,如果您的服务更新了某个数据库,然后向kafka发布了一条消息,那么您就遇到了一个问题,因为如果数据库更新成功,但消息发布失败,那么什么也得不到该更新,并且您的系统将处于不一致的状态。本演示文稿详细介绍了这是一个问题的原因,以及从事件日志发布事件是如何解决这个问题的。