1

プロジェクトのRabbitMQを使用してMassTransitを評価していますが、メッセージの処理を特定の時間まで遅らせることができるようにしたいと考えています。

目的は次のとおりです。

  • ユーザーが他のユーザーに影響を与えるいくつかのことを行う
  • 影響を受けるユーザーに1時間後に通知するメッセージがバスに送信されます
  • ユーザーはより多くのことを行い、より多くの通知を送信します
  • 1時間が経過し、次のようになります。
    • 最後の要約から1時間以上経過しています。メッセージが処理され、各ユーザーの保留中の通知がすべて収集され、少なくとも1つある場合は要約が送信されます。
    • 最後の要約から1時間未満です。メッセージは処理されず、さらに1時間キューに入れられます。

重要なのは、多くのことを通知できるので、すぐに送信するのではなく、後で要約することです。これはMassTransitとRabbitMQで実行できますか?

4

2 に答える 2

3

これは古い投稿だと思いますが、この問題の解決策を探している人は、https://github.com/MassTransit/MassTransit-Quartzをチェックしてください。

基本的に、遅延メッセージをバスに再公開する必要がある時間とともに公開します。Quartzサービス(プロジェクトで提供)がメッセージを一時ストアに永続化し、時間になると公開します。

于 2013-11-15T17:27:36.320 に答える
0

これを2つの段階に分割して、メッセージが到着したときに処理されますが、必要になるまで処理されないようにすることをお勧めします。

  1. MassTransitプロセスはメッセージを受信し、ある種のデータストアに通知を保持します。

  2. また、時折実行される要約プロセスがあり、データストアを調べて未処理のものを確認し、最後の要約から1時間以上経過している場合は、要約された通知をユーザーに送信します。

編集:これを行うためにRabbitMQをハックすることが可能かもしれません。http: //www.javacodegeeks.com/2012/04/rabbitmq-scheduled-message-delivery.htmlを参照してください。

于 2012-05-31T14:21:12.137 に答える