取消微服务架构中工作线程的最佳实践

时间:2019-05-03 17:48:57

标签: java spring-boot microservices spring-amqp

我有三项服务。

  • 第一个会在多个线程中生成一些数据,并将每个生成的数据发布到队列中。

  • 第二个正在侦听此队列,并在Spring Rabbit侦听器工作线程中处理每个接收到的数据,然后将结果发布到队列中。

  • 第三个与第二个相同。所有数据都是通过一个唯一的密钥联合在一起的,这些密钥随它们一起传播。

如果在第一个服务的某些线程中出现异常,我想取消其他正在处理给定密钥数据的其他线程中的所有工作线程。

有一些最佳做法吗?

我正在考虑在Rabbit Listeners中使用类似Future/CompletableFuture的东西。用它包装任务,通过给定的键将对它的引用保存在某些映射中,然后对其进行阻止或仅将其提交给调用。然后,如果出现一些错误,我可以发布带有数据密钥的"fail event",并在其他服务中接收此错误,请转到该地图并取消该密钥的所有工作线程。并且还会使服务将来拒绝此密钥的新接收消息。但是我不确定这是最好的解决方案。

0 个答案:

没有答案