消息队列设计

时间:2014-01-13 22:35:50

标签: message-queue

这是方案

我有一个离线应用程序,当用户按下发布时我想

  • 将2份副本打印到打印机A
  • 将1份副本打印到打印机B
  • 将3份副本打印到打印机C
  • 向收件人A发送短信:
  • 向收件人B发送txt讯息
  • 将数据导出到外部系统
  • 与在线网站同步数据
  • 可以在列表中添加各种其他工作

所以我要问的是我可以使用更好的结构,我希望避免使用完整的消息排队系统,因为这是一个独立的桌面应用程序。

我开始为每个任务创建一个数据库表,并将作业号放在列表中,然后对其进行处理,并在完成后从列表中删除它。

虽然这样可以正常工作,但是当作业失败,我没有重试超时或任何事情时都会出现问题,而且每次添加任务(不经常)时,我都要添加一个新表,这不是超好的。

我遇到的其他问题是所有任务都有不同的参数,我应该只使用json或其他东西来存储这些参数吗?目前,数据库中的每个表都有不同的参数列

2 个答案:

答案 0 :(得分:0)

听起来像MQ的理想工作。发布后,您可以使用适当的参数将作业添加到队列中。然后,您需要10个(或其他任何)读者来阅读消息并管理打印/发送/导出等。根据您所描述的内容,使用数据库滚动您自己没有任何意义。

超时/重试是您需要了解如何提醒和解决的业务问题。这不是你想象的技术问题。

我个人每个目标都有一个消息类型/队列。 JSON或其他格式取决于您的平台。通常,您只需使用平台提供的任何机制将包含所有数据的对象序列化到队列中。最糟糕的情况是,您创建XML然后将其添加到队列中。

答案 1 :(得分:0)

如果您的应用程序无法跨系统扩展,我认为您不需要MQ。消息队列最适合分布式系统。您已经提到它将成为桌面应用程序。

在设计应用程序时,您必须根据给定的要求识别组件。您目前拥有的是一系列要求。您需要将它们分解为可以重用的组件。

重试和超时是任务的参数...当您通过组件执行任务时,您可以处理它们。

您需要一个数据库,但不需要高扩展数据库。所有你需要一个持久性存储。