我有三项服务。
第一个会在多个线程中生成一些数据,并将每个生成的数据发布到队列中。
第二个正在侦听此队列,并在Spring Rabbit侦听器工作线程中处理每个接收到的数据,然后将结果发布到队列中。
第三个与第二个相同。所有数据都是通过一个唯一的密钥联合在一起的,这些密钥随它们一起传播。
如果在第一个服务的某些线程中出现异常,我想取消其他正在处理给定密钥数据的其他线程中的所有工作线程。
有一些最佳做法吗?
我正在考虑在Rabbit Listeners中使用类似Future/CompletableFuture
的东西。用它包装任务,通过给定的键将对它的引用保存在某些映射中,然后对其进行阻止或仅将其提交给调用。然后,如果出现一些错误,我可以发布带有数据密钥的"fail event"
,并在其他服务中接收此错误,请转到该地图并取消该密钥的所有工作线程。并且还会使服务将来拒绝此密钥的新接收消息。但是我不确定这是最好的解决方案。