Axon参考指南 - 聚合事件回放

1.配置Repository


    @Bean
    public Cache cache() {
        return new WeakReferenceCache();
    }

    @Bean
    public Repository<OrderAggregate> orderAggregateRepository(EventStore eventStore, Cache cache) {
        return EventSourcingRepository.builder(OrderAggregate.class)
                .cache(cache)
                .eventStore(eventStore)
                .build();
    }

2.找到聚合id

自己设计处理

3.repository.load



    @Autowired
    private Repository<OrderAggregate> repository;

...
        // 1.找到聚合
        String aggregateIdentifier = "856bcb33-7e47-4159-8e68-c4feaea86dc6";
        Aggregate<OrderAggregate> load = repository.load(aggregateIdentifier);
...

保留测试代码,方便以后查看…

 @QueryHandler
    public List<OrderedProduct> handle(FindAllOrderedProductsQuery query) throws Exception {
        System.out.println("查询~");


        // 1.找到聚合
        String aggregateIdentifier = "856bcb33-7e47-4159-8e68-c4feaea86dc6";
        Aggregate<OrderAggregate> load = repository.load(aggregateIdentifier);


        System.out.println("聚合:\n" + load.identifierAsString() + "\n" + load.type() + "\n" + load.isDeleted() + "\n" + load.version());
//
//        PlaceOrderCommand command = new PlaceOrderCommand(load.identifierAsString(), null);
//        CommandMessage<Object> message = GenericCommandMessage.asCommandMessage(command);
//
//
//        //  2.根据聚合标识找到 DomainEventEntry
//
//        DomainEventEntry eventEntry = null;
//
//        EntityManager entityManager = entityManagerProvider.getEntityManager();

        // aggregateIdentifier
//        String jpql = "select de from DomainEventEntry de where de.aggregateIdentifier =:aggregateIdentifier";
//        TypedQuery<DomainEventEntry> query1 = entityManager.createQuery(jpql, DomainEventEntry.class);
//        query1.setParameter("aggregateIdentifier", load.identifierAsString());
//        Optional<DomainEventEntry> domainEventEntry = query1.getResultStream().findAny();
//
//
//        if (domainEventEntry.isPresent()) {
//            eventEntry = domainEventEntry.get();
//        }

//        byte[] data = eventEntry.getPayload().getData();
//
//        ByteArrayInputStream bis = new ByteArrayInputStream(data);
//
//        ObjectInputStream ois = new ObjectInputStream(bis);
//
//        Object o = ois.readObject();


        // 3.拿到payload中的事件,在此聚合内再次执行(回放)

//        OrderPlacedEvent event = new OrderPlacedEvent();
//        EventMessage<Object> objectEventMessage = GenericEventMessage.asEventMessage(event);
//
//        Object handle = load.handle(objectEventMessage);

        return new ArrayList<>(orderedProducts.values());
    }

4. 回放操作

聚合内的 @EventSourcingHandler 注解的方法被触发,更改聚合为当初状态。
在这里插入图片描述
只能回放一次,重启服务后可继续回放。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值