任务池的搭建与使用
任务池是后端应用程序发布任务和云计算服务软件领取任务的地方,对应的,需要在RabbitMQ中创建一个消息队列作为任务池。后端应用程序发布任务时,通过默认交换机和任务消息名称,把任务发送到指定的任务消息队列中。
多个云计算服务软件同时监听任务消息队列,同一任务只会被一个云计算服务软件获取。后端应用程序发布任务和云计算服务软件领取任务的流程如图5.25所示。需要注意的是,如果有多种任务和多种与之匹配的云计算服务软件,则需要创建多个任务消息队列。
图5.25 后端应用程序发布任务和云计算服务软件领取任务的流程
除了以上介绍的任务发布与任务领取流程以外,一般来说,任务消息队列还需要关注以下3个细节:
任务消息队列需要被设置成持久化,避免由于RabbitMQ服务重启而导致任务消息丢失。
云计算服务软件在监听任务消息队列前,需要设置为手动确认消息,这样即使云计算服务软件在执行任务过程中异常退出(未确认任务消息),任务消息仍会被其他云计算服务软件获取并执行。
云计算服务软件在监听任务消息队列前,需要设置为在没确认消息之前不接收新消息,确保任务消息不会积压在少数几个云计算服务软件当中。
任务池搭建与使用的相关代码如代码5.15所示,其中,示例代码是使用C++编写的,而后端应用程序一般是使用Java等开发语言编写的,所以在实际编码中,后端应用程序发送任务消息部分的编码可能会有所区别。
代码5.15 任务池搭建与使用的相关代码
任务消息一般为JSON格式,这样能做到灵活配置。后端应用程序在发送任务时,需要把任务消息转换成字符串。而云计算服务在获取到任务消息后,需要把字符串转成JSON格式。任务消息一般包含任务标识、任务ID、任务参数、任务开始时回调后端应用程序的RESTful API地址及任务结束时回调后端应用程序的RESTful API地址等,如代码5.16所示。
代码5.16 任务消息示例
本文给大家讲解的内容是云计算服务架构任务池的搭建和使用
下篇文章给大家讲解的内容是大型网站架构的技术细节:云计算服务架构指令池的搭建和使用
感谢大家的支持
领取专属 10元无门槛券
私享最新 技术干货