【问题标题】:Axon Framework Event Package RefactoringAxon 框架事件包重构
【发布时间】:2021-04-27 19:09:10
【问题描述】:

我有一组已重构到另一个包的事件。在我执行事件重播之前,这将保持原样。深入挖掘,我注意到 domainevententry 表中的有效负载类型,并且认为更改它就足够了,但遗憾的是,事件的 xml 根元素似乎也需要更改。我希望有一种简单的方法可以做到这一点。

我找不到任何关于向上转换到不同包或使用 XStream 别名的示例,因此我们将不胜感激。

谢谢

【问题讨论】:

    标签: axon axon-framework


    【解决方案1】:

    正如您所注意到的,存储在事件中的默认负载类型是完全限定的类名。这确保了开箱即用的序列化和反序列化按预期工作。但是,移动类意味着无法再找到有效负载类型,需要进行一些调整。

    您可以使用EventTypeUpcaster,如Reference Guide 中所述。 EventTypeUpcaster 专用于调整负载类型,因此也可以用于处理更改包名称。

    当使用(默认)XStreamSerializer 时,给标签添加别名确实也可以。例如如何设置别名可以看here。正如在该示例中注意到的那样,别名被添加到 XStream 实例中。 XStreamSerializer 使用 XStream 实例来支持从/到 XML 的反序列化/序列化。要调整XStream 实例,您可以简单地使用XStreamSerializer 上的构建器范例。 JavaDoc of the builder 应该足够具体,以帮助您了解如何使用它。

    【讨论】:

    • 感谢史蒂文,一如既往,您的回答中有一些真正的宝石。不知道我是如何错过 EventTypeUpcaster 的!今后肯定会这样做。
    • 很高兴听到这可以帮助您进一步 Kenneth!
    【解决方案2】:

    在这方面走了很长一段路,但它似乎奏效了。与往常一样,在执行大容量更改之前备份您的数据库。我还在完成时使用数据库重新启动了服务。不用说,我会在下次部署之前确保事件在逻辑包中:)

    数据库引擎:Postgres 10

    表格:域事件条目

        update domainevententry
        set
            payloadtype = '<new.package.Classname>',
            payload = lo_from_bytea(0, decode(REPLACE(
                subquery.output,
                '<old.package.Classname>',
                '<new.package.Classname>'
                ), 'escape'))
        from (
            SELECT eventidentifier, payloadtype, encode(lo_get(payload::oid), 'escape') as output FROM domainevententry
            WHERE eventidentifier in (
                '<event guid 1>',
                '<event guid 2>'
            )
            AND payloadtype = '<old.package.Classname>'
        ) as subquery
        where domainevententry.eventidentifier = subquery.eventidentifier;
    

    完成后,我需要更新大对象的 OWNER:

    ALTER LARGE OBJECT <LargeObjectId> OWNER TO database_role;
    

    可能不是最优雅的解决方案,但根据我的时间限制,它完成了工作。对于大型对象,此解决方案可能存在编码问题,但最终对我来说都解决了。随意分享任何使上述更合适的优化。

    启动 Axon 框架重播重建了投影,一切都排好了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多