2014-01-13 227 views
0

這裏的情景消息隊列設計

我有一個離線應用程序,當用戶按下發布我想

  • 打印2份到打印機中的
  • 打印1份到打印機B
  • 打印3份到打印機C
  • 發送txt消息給收件人A
  • 發送txt消息給收件人B
  • 將數據導出到外部系統
  • 與在線網站同步數據
  • 各種其他的工作可以被添加到列表中

那麼,我問有沒有更好的結構,我可以使用,我是希望避免一個完整的消息隊列系統,因爲這是一個獨立的桌面應用程序。

我開始爲每項任務創建一個數據庫表,並將作業號放入列表中,然後處理它,並在完成後從列表中刪除它。

雖然這可以正常工作,但是當作業失敗時,我沒有重試超時或任何事情,並且每次添加任務時(不是經常)都會出現問題,我必須添加一個新表,這是不太好。

我遇到的其他問題是所有的任務有不同的參數,我應該只是使用JSON或其他東西來存儲這些參數?目前數據庫中的每個表格都有不同的參數列

+0

這可能是Spring批處理應用程序的候選人,您可以在其中鏈接給定作業的任務?http://docs.spring.io/spring-batch/ – gsndev

回答

0

聽起來像是MQ的理想工作。發佈後,您可以使用適當的參數將作業添加到隊列中。然後,你需要10個(或其他)讀取器來讀取消息並管理打印/發短信/導出等。從你所描述的內容來看,使用數據庫來滾動你自己是沒有意義的。

超時/重試是一個業務問題,您需要了解如何提醒和解決。這不像您想象的那樣是一個技術問題。

就我個人而言,每個目標都有一個消息類型/隊列。 JSON或其他格式將取決於您的平臺。通常,只需使用平臺提供的任何機制將所有數據序列化到隊列中。最糟糕的情況是,你製作XML然後將其添加到隊列中。

0

如果您的應用程序不會跨系統擴展,我不認爲您需要MQ。消息隊列最適合分佈式系統。你已經提到它將成爲一個桌面應用程序。

在設計應用程序時,您必須根據給出的要求確定組件。你目前擁有的是一組要求。您需要將它們分解爲可重用的組件。

重試和超時是任務的參數...當您通過組件處理任務時,您可以處理它們。

您將需要一個數據庫,但不需要高比例數據庫。所有你需要一個持久性存儲。