为了账号安全,请及时绑定邮箱和手机立即绑定

如何在分布式系统中分配任务?

如何在分布式系统中分配任务?

qq_遁去的一_1 2021-04-01 14:15:54
我有大量的任务和几个工作服务器。我想将这些任务平均分配给这些工作人员,即使工作人员服务器出现故障也是如此。我的想法是将任务分成几个碎片,然后将每个碎片发送给MQ。每个服务器读取一个MessageQueue。我希望尽快处理任务。但是,如果服务器发生故障,无法及时消耗其MessageQueue中的任务,该如何处理呢?顺便说一句,是否有任何JAVA框架可以帮助解决这种情况?
查看完整描述

1 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

您所描述的是具有共享消息队列的群集。正如Thomas Timbul所说,所有服务器都应从同一消息队列中读取。如果使用的是IBM MQ,则理想情况下应将队列管理器安装在单独的系统上,并使服务器连接,这样一台服务器宕机不会影响其他服务器。

每个服务器都会从队列中拉出一条消息,并按需对其进行处理。使用J2EE服务器,可以指定每台服务器上读取队列的线程数(MDB数)。例如,在WebSphere中,它是maxSessions端口侦听器上的设置。

如果一台服务器在处理消息时发生故障,则事务管理器应回滚该事务,并且该消息将返回到队列中,以供另一台服务器读取。

如果服务器以不同的速率处理消息,则无所谓,因为每台服务器仅在需要时才将消息从队列中拉出。

小心无法处理的消息,因为它们可能导致队列被阻塞。您需要有一个重试计数和一个返回队列,如果错误消息超出了重试计数,则将错误消息发送到该队列。这些被称为“毒药”消息,并且是Stackoverflow和其他地方上其他问题的主题。


查看完整回答
反对 回复 2021-04-21
  • 1 回答
  • 0 关注
  • 432 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信