当前位置: 首页 > 知识库问答 >
问题:

使用Axon跨不同JVM的多个SAGA(相同类型)

吕皓
2023-03-14

这个应用程序的每个JVM应该使用相同的数据库吗?否则跟踪令牌不会在同一个应用程序中“共享”?

如何在运行传奇的相同应用程序中拆分事件?一个saga类型或saga实例是否总是在同一个应用程序上处理(直到它被关闭,所以另一个实例负责它)?

还是每个JVM都接收事件,并且每个相同类型的传奇都将运行?(并导致发送重复命令和错误)

等。还有很多问题。

共有1个答案

何承
2023-03-14

Axon术语中的Saga只不过是一种特定类型的事件处理程序。因此,Axon将使用事件处理器为Saga实例提供事件。

事件处理器有两种类型:

  1. SubscribingEventProcessor
  2. TrackingEventProcessor

相反,强烈建议使用TrackingEventProcessor作为特定Saga实例的事件源。在这样做时,任何负载分担都来自这样一个要求,即TrackingToken必须由这样的处理器声明,以便能够执行任何工作(也就是处理事件)。因此,要分担从事件存储向Axon中的Saga实例提供事件的工作负载,您必须执行以下操作:

  1. 为所述saga类型设置TrackingEventProcessor
  2. 设置tokenstore,其中底层存储机制在所有应用程序实例之间共享
  3. [可选]如果希望并行处理事件流,则必须为给定的saga类型分段TrackingToken。[编辑]除此之外,sagastore使用的saga_entry表还应该在所有运行给定Saga类型的应用程序实例中共享saga_entry

希望这个答案能满足你@yoann的“更多问题”!

 类似资料:
  • 我使用一个Android库,它要求我创建两个类,每个类继承自不同的类 (具有公共基类) 现在我有这个代码: 我必须复制这个类来创建一个扩展,即使我的两个类共享完全相同的代码。 我简化了示例的代码,但重复可能很重要 我决定将代码放在这两个类之外的静态方法中,并在类重写的方法中调用它们,但我认为必须有一种更干净的方法来做到这一点。 你能帮我解决这个问题吗? 和都继承自。

  • 我有一个需要分解的spark数据帧,格式如下。我检查其他解决方案,比如这个。但是,在我的例子中,之前的之后的 或“after”。 我可以在两个单独的爆炸中执行此操作,其中我在每个爆炸中创建列,然后创建。 但是,我想知道是否有更优雅的方式来做到这一点。谢谢

  • 问题内容: 考虑以下代码: 这会导致以下错误: 类型B和A不兼容;都定义了another(),但是返回类型不相关 我已经看到了这样的问题,并按照公认的答案中的不兼容示例进行操作-即 但是,在那种情况下,返回类型确实是不兼容的-返回类型不能同时为void和布尔值。而在上面的示例中,返回类型是an 和a ,因此可以实现两个扩展接口。 此外,在查看了JLS(8.4.8、8.4.8.3、8.4.8.4)之

  • 我需要编写一个java方法来从一个对象中获取特定的信息。但是,该对象可以是A类型的,也可以是B类型的。下面是我的代码的一部分: 当我这样写它时,它会引发一个错误,说“重复方法”。我怎么才能让这个起作用?

  • 问题内容: 如何跨JVM同步方法? 我的示例是一个Web应用程序,该应用程序限制一个用户名不能多次登录(换句话说,第一个用户可以登录,但是如果另一个用户使用相同的用户名登录,他将被拒绝)。 该Web应用程序部署在多个服务器上,因此有多个JVM,并且用户可以尝试使用不同的服务器进行登录,具体取决于负载平衡器。 这是该方法的外观 由于采用了同步方法,因此它可以在1个应用服务器上正常工作,但是可以跨多个

  • 我有一个我们部署在集群上的应用程序。根据环境,集群可能有2或4个JVM。该应用程序具有相同的CamelContext,我们正在所有JVM上部署该CamelContext。因此,所有JVM都具有相同的路由。对于FTP路由,这很好,因为它使它具有竞争力,而且只有一个JVM获得文件。然而,当使用基于计时器的操作从DB取数时,我看到所有JVM读取相同的记录集并执行相同的工作。我想要的是,如果一条路捡到了,