假设有一个Record实体,CreateRecord命令和一个RecordCreated事件。我想在一个或多个其他实体(在不同的模块中)上调用一些命令。建议的方法是什么?
我正在考虑从Record实体的ReadSide处理程序发送一条消息,该消息可以由相应的服务接收,该服务会将其转换为命令并在实体上调用。
编辑,感谢@ ignasi35:根据Message Broker API,可以使用此代码发布消息。
AggregateEventTag<RecordEvent> RECORD_EVENT_TAG = AggregateEventTag.of(RecordEvent.class);
public Topic<RecordMessage> recordsTopic() {
return TopicProducer.singleStreamWithOffset(offset -> {
return persistentEntityRegistry
.eventStream(RECORD_EVENT_TAG, offset)
.map(this::convertEventToRecordMessage);
});
}
创建记录,并保留相应的事件,但以下消费者不接收任何消息:
@Singleton
public class RecordsConsumer {
@Inject
public RecordsConsumer(RecordService recordService){
recordService.recordsTopic().subscribe()
.atLeastOnce(Flow.fromFunction(this::displayMessage));
}
}
我做错了什么?
答案 0 :(得分:0)
终于解决了它。
我最终得到了一个单独的服务,从PersistentEntityRegistry.eventStream中侦听RecordCreated事件。该服务将它们转换为RecordMessage并作为主题公开(参见上面的问题)。
没有从暴露的主题接收到任何内容的问题是缺少对kafka-broker的依赖(奇怪的是没有关于此的警告,并且主题没有暴露),在我的情况下这是:
<dependency>
<groupId>com.lightbend.lagom</groupId>
<artifactId>lagom-javadsl-kafka-broker_2.12</artifactId>
</dependency>