2016-09-28 77 views
3

我需要這種能力來發送移動應用中的操作的推送通知,但等待用戶撤消操作,直到說出10秒。處理延遲消息並在處理前刪除

是否有可能將發佈在主題中的消息處理延遲10秒?然後(有時候,如果用戶撤消)在10秒之前刪除消息,如果它不需要處理?

+0

你的意思是說你想延遲發佈一條消息並且可能根本沒有發佈它,或者你的意思是說,在訂閱接收到消息後,你發送一個通知並且可能想要做一些與消息不同的事情收到的訂閱是基於某人對通知的反應? –

+0

@凱馬爾,我的意思是後者。發佈消息 - >延遲發送訂閱10秒 - >在這10秒內,我希望能夠從隊列中刪除消息(如果用戶按下撤消,通常在10秒內) - >如果我不刪除,消息被傳送給訂戶。我可以通過本地隊列機制手動構建延遲交付,但我想知道是否google-pubsub可以做到這一點。 – iPhoney

+0

結果AWS SQS具有延遲隊列的概念:http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html – iPhoney

回答

4

取決於如果你寫的用戶以及與否:

你可以控制你的用戶代碼:

  1. 在你PubSub的消息添加一個時間戳,當你想要的 消息是處理。
  2. 在您的客戶(訂戶)中,只有在達到處理消息 的時間戳時, 纔會確認消息。
  3. PubSub的本身將重新嘗試提供的消息,直到 它的確認(或10天)

如果你沒有在你的用戶控制你可以有我的話題和我的延遲話題。人們可以發佈到前一個主題,該主題將只有一個用戶,你會實現:

  1. 公共消息像以前到我的話題。
  2. 會有專門的話題,可以做同樣的限制,如上圖所示用戶:
  3. 如果該消息的時間已經達到了您的處理器將發佈/轉發該消息給我的延遲話題。

您也可以使用task-queue + pubsub-topic而不是pubsub-topic + pubsub-topic來實現上述邏輯。

+1

感謝加百列,認爲我理解儘管模糊不清。我還沒有使用pubsub,如果我延遲確認,重試的頻率如何?另一部分是我可以使用句柄/標識符刪除消息,如果它在閾值時間之前未被清除。 – iPhoney

+0

這將取決於它是一個拉或推的話題。一般來說,它會持續7天。重試的時間間隔爲:「任何以下HTTP狀態代碼都被Pub/Sub系統解釋爲成功:200,201,204或102。如果您的服務返回任何其他代碼,則Google Cloud Pub/Sub會使用指數退避算法(最長爲10秒)重試最多7天。默認情況下,確認期限爲10秒,但您可以在代碼中更改它。請參閱此部分:https://cloud.google.com/pubsub/docs/subscriber#ack_deadline –

+0

再次感謝您分享如何使用pubsub工作。我的2美分隨着平臺的成熟可能對揭露作爲單獨的產品排隊,並具有延遲交付或在PubSub中構建相同功能的功能。 – iPhoney