Occcurrent:JVM事件溯源工具庫包

banq發表於2022-02-08

Occcurrent 是一個事件溯源庫,它是一組用於 JVM 的事件溯源實用程式,由Johan Haleby建立。

能夠在不依賴Occurrent或任何其他庫的情況下設計你的領域模型。你的領域模型可以用返回事件的純函式來表達。使用Occurrent來儲存這些事件。

使用Occurrent元件作為樂高積木來組成你自己的管道。元件被設計得很小,所以如果需要,你可以根據自己的需要重新編寫。在Occurrent之上編寫你自己的特定問題/領域層。

領域事件在資料庫中是作為雲事件儲存的,你可以利用資料庫的優勢。例如,你可以建立自定義索引,用於直接在一個事件流(甚至多個流)上進行快速和完全一致的領域查詢。

雲事件是一個CNCF規範,用於以通用方式描述事件資料。雲事件旨在極大地簡化跨服務、跨平臺和跨領域的事件宣告和交付。

支援(如Spring @Transactional)以事務性方式編寫預測和事件。

程式碼案例:

public class ApplicationService {

    private final EventStore eventStore;
    private final Converter converter;

    public ApplicationService(EventStore eventStore, Converter converter) {
        this.eventStore = eventStore;
        this.converter = converter;
    }

    public void execute(String streamId, Function<Stream<DomainEvent>, Stream<DomainEvent>> functionThatCallsDomainModel) {
        // Read all events from the event store for a particular stream
        EventStream<CloudEvent> eventStream = eventStore.read(streamId.toString());
        // Convert the cloud events into domain events
        Stream<DomainEvent> persistedDomainEvents = eventStream.events().map(converter::toDomainEvent);

        // Call a pure function from the domain model which returns a Stream of domain events  
        Stream<DomainEvent> newDomainEvents = functionThatCallsDomainModel.apply(persistedDomainEvents);

        // Convert domain events to cloud events and write them to the event store  
        eventStore.write(streamId, eventStream.version(), newDomainEvents.map(converter::toCloudEvent));
    }
}

Occcurrent 沒有任何用於建立檢視/投影的特殊元件。相反,您只需建立一個訂閱,您可以在其中建立和儲存您認為合適的檢視。

相關文章