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

我有大量的任务和几个工作服务器。我想将这些任务平均分配给这些工作人员,即使工作人员服务器出现故障也是如此。

我的想法是将任务分成几个碎片,然后将每个碎片发送给MQ。每个服务器读取一个MessageQueue。我希望尽快处理任务。但是,如果服务器发生故障,无法及时消耗其MessageQueue中的任务,该如何处理呢?

顺便说一句,是否有任何JAVA框架可以帮助解决这种情况?


qq_遁去的一_1
浏览 433回答 1
1回答

DIEA

您所描述的是具有共享消息队列的群集。正如Thomas Timbul所说,所有服务器都应从同一消息队列中读取。如果使用的是IBM MQ,则理想情况下应将队列管理器安装在单独的系统上,并使服务器连接,这样一台服务器宕机不会影响其他服务器。每个服务器都会从队列中拉出一条消息,并按需对其进行处理。使用J2EE服务器,可以指定每台服务器上读取队列的线程数(MDB数)。例如,在WebSphere中,它是maxSessions端口侦听器上的设置。如果一台服务器在处理消息时发生故障,则事务管理器应回滚该事务,并且该消息将返回到队列中,以供另一台服务器读取。如果服务器以不同的速率处理消息,则无所谓,因为每台服务器仅在需要时才将消息从队列中拉出。小心无法处理的消息,因为它们可能导致队列被阻塞。您需要有一个重试计数和一个返回队列,如果错误消息超出了重试计数,则将错误消息发送到该队列。这些被称为“毒药”消息,并且是Stackoverflow和其他地方上其他问题的主题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java