2017-07-12 64 views
3

我們已請求在我們的新系統中使用Amazon SQS。我們的業務依賴於從客戶端向我們的支持代理提出一些任務/請求,並且一旦客戶端提交了他的任務/請求,它應該在我的SQL Server數據庫中排隊,並且所有排隊的任務應該分配給非忙碌代理因爲流程表示代理可以同時處理或處理一個任務/請求,所以,如果我有10個任務/請求到達我的系統,則應該排隊,然後系統應該將任務轉發給代理現在是免費的,一旦代理人解決任務,他應該得到下一個任務,否則,系統應該等待任何代理人,直到完成他當前的任務來分配一個新的任務,並且當然,不應該有任何重複在任務/請求處理中......等等。使用C#和SQL Server的Amazon SQS

現在我需要什麼?

  • 簡單的參考,可以澄清什麼是亞馬遜SQS,因爲這是我第一次使用排隊服務?

  • 如何在C#和SQL Server中使用相同的方法?我已閱讀this topic,但我仍然覺得有些東西因爲我無法啓動而發生混亂。我只是瞄準我可以在運行時處理任務的方式,並將其分配給代理,然後關閉它並獲得一個新的,如上所述。

回答

2

要求我們設計一個基於散文段落的系統是一個相當高的命令。
SQS只是一個雲端隊列系統。根據你的描述,我不確定它會讓你的系統更好。

首先,您已經將所有內容都存儲在數據庫中,那麼爲什麼還需要將內容存儲在隊列中呢?如果你想在你的數據庫中存儲東西時擁有隊列語義,你可以考慮支持SQL中的隊列的SQL Server Service Broker(https://technet.microsoft.com/en-us/library/ms345108(v=sql.90).aspx#sqlsvcbr_topic2)。另外,除非你的規模很高(可能每秒超過100個任務),你可以在表格中查詢需要提取的任務。

其次,聽起來好像你可能有一個圍繞任務的工作流程,這些工作可能會擴展到不止一個隊列中,以便代理可以選擇它們。例如,你有沒有跟進任務(通過電子郵件向客戶詢問他們的服務是什麼,在客戶回到你之前暫停任務等)?如果是這樣,你可能想看看簡單工作流服務(https://aws.amazon.com/swf/),或者因爲你已經在微軟的堆棧缺省情況下可以看一下Windows工作流(https://msdn.microsoft.com/en-us/library/ee342461.aspx

BTW,SQS不保證「只有一個」傳遞,所以如果重複對您來說是一個大問題,那麼您將必須自己執行重複數據刪除或使用支持重複數據刪除的FIFO隊列(http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html),但限制爲每秒300個事務(又名:大約100條消息/秒發送 - >接收 - >刪除APIs。使用批處理顯然這個數字可能會高得多,但考慮到你的用例,聽起來你不會在沒有很多工作的情況下使用批處理)。