我在用轴突事件跟踪处理器。有时事件需要10秒才能处理。
这似乎导致消息再次被处理,并出现在日志“释放令牌X/0的声明失败。它由另一个节点拥有”中。
如果我增加段数,它不会记录此事件,但事件仍被处理两次,所以我认为这可能会引起误解。
(我想我搞错了)
我已经尝试调整fetchDelay、cleanupDelay和TokenClaimInterval。没有一个解决了这个问题。我是不是缺了什么东西?
编辑
超过10秒的场景是向外部服务发出HTTP请求。
标记[event-processor-name]/[segment-id]的释放声明失败。它属于另一个节点。
消息只能在三种情况下出现:
TrackingEventProcessor
的主事件处理循环停止,但是释放令牌声明失败,因为另一个线程已经声明了令牌。异常
,使其以指数级后退重试,并尝试释放声明(对于给定的消息,声明可能会失败)。我猜这不是选项1和2,所以这将留给我们选项3。这也意味着您看到了其他警告级别的消息,例如:
明显不受欢迎的行为和我们应该为你解决的事情。我想请你回答我在这个问题下的评论,因为现在我没有什么要说的了。让我们来解决这个问题@Dan!
更新
感谢更新您的问题@Dan,这很有帮助。从您所分享的内容来看,我很有信心这两个实例都在相互窃取令牌。但这确实取决于两者是否对token_entry
表使用相同的数据库(尽管我假设它们是)。
我可以在Axon中顺序处理的两个事件之间放置一个序列(或以一定的时间间隔执行)。这两个事件同时创建。下面是示例事件。 因为我的第二个事件取决于第一个事件的执行结果。我正在使用RabbitMq发布消息。
我在我的Spring启动(2.3.0)应用程序中使用Axon框架(4.3),并且我通过jpa将Postgres(9)db设置为事件存储。数据库仅用作事件存储,并且不存在其他关系。数据库也部署在专用 VM 中。 在应用程序上线一年后,我开始注意到事件处理级别极度缓慢(减慢了整个应用程序的速度)。 正在分派事件,需要一些时间来处理。 应用程序部署在4个实例中,并在我们进行部署时定期重新启动。事件存储在
这里是我的application.yml的相关部分 从文档中,我发现应该创建一个SpringAMQPMessageSource bean: 如果我从rabbitmq管理面板向队列发送消息,我会看到日志: SpringAMQPMessageSource的JavaDoc是这样说的: 但到现在我都找不到在哪里注册,也找不到怎么注册。 配置中的Axon.EventHandling条目和聚合中的@Proce
当我切换到XStream作为事件序列化器时,一切都很好。不执行额外的偶数实例,在命令处理程序中创建的事件与在EventHandler中处理的事件相同。 这是怎么回事?
我们有一个使用Disruptor框架的系统,它有五个注册阶段来实现EvenetHandler。 阶段按顺序工作,因此请求只能在第一阶段完成时移动到第二阶段,该移动由Disruptor内部维护。 我们对第三阶段有问题,这是瓶颈,需要大量时间,因为它进行不同的HTTP调用并将响应存储在请求对象中。 因此,我们希望在第三阶段花了一段时间之后,将请求(无论有什么响应)提前到第四和第五阶段。 如何超时任何特
我们需要在constructor中对于事件与对应的handler函数进行绑定. 大多数时候我们在发出DOM事件的组件内部写我们的handler函数. 在下面的例子中,我们在组件内部创建了一个click handler, 因为我们想所有的Swithcer Component当被点击时,做出同样的响应. class Switcher extends React.Component { render