绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
支持MapDB的Eventstore
2022-06-22 14:53:27

背景:现在微服务大行其道,虽然微服务开山鼻祖是不建议在微服务下做分布式事务,领域驱动设计早已阐明,具有强一致性要求的一组业务概念,属于同一个聚合,不建议拆到不同服务中,从而尽可能避免分布式强事务一致性的处理。但是不可避免我们没有真的按照DDD领域驱动设计,那么微服务如何保持事务一致性呢?

我们这里采用的EventStore的方式,有基于memory、jpa、jdbc等方式,我今天采用了MapDB framework的方式,MapDB提供多种多样方式的数据结构有link、set、map、queue等。

EventMessage

  1. public interface Message<T> extends Serializable {
  2. String getIdentifier();
  3. MetaData getMetaData();
  4. T getPayload();
  5. Class<T> getPayloadType();
  6. Message<T> withMetaData(Map<String, ?> metaData);
  7. Message<T> andMetaData(Map<String, ?> metaData);
  8. }

 MapDB eventStore

  1. /**
  2. * Created by Young on 2017/4/11.
  3. */
  4. public class MapDBEventStorageEngine implements EventStorageEngine {
  5. private final DB db = DBMaker.memoryDB().make();
  6. private static final String ORDER_LINK_LIST = "ORDER_LINK_LIST";
  7. private final Lock lock = new ReentrantLock();
  8. private final Condition dataAvailableCondition = lock.newCondition();
  9. @Override
  10. public void appendEvents(List<? extends EventMessage<?>> events) {
  11. lock.lock();
  12. try {
  13. IndexTreeList<Object> hs = db.indexTreeList(ORDER_LINK_LIST).createOrOpen();
  14. hs.addAll(events);
  15. } finally {
  16. lock.unlock();
  17. }
  18. }
  19. @Override
  20. public void storeSnapshot(DomainEventMessage<?> snapshot) {
  21. }
  22. @Override
  23. public Stream<? extends TrackedEventMessage<?>> readEvents(TrackingToken trackingToken, boolean mayBlock) {
  24. return null;
  25. }
  26. @Override
  27. public DomainEventStream readEvents(String aggregateIdentifier, long firstSequenceNumber) {
  28. return null;
  29. }
  30. @Override
  31. public Optional<DomainEventMessage<?>> readSnapshot(String aggregateIdentifier) {
  32. return null;
  33. }
  34. }

 

分享好友

分享这个小栈给你的朋友们,一起进步吧。

MapDB
创建时间:2022-04-13 17:18:51
MapDB
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • LCR_
    专家
戳我,来吐槽~