2016-11-04 9 views
1

問題集約通知Microservice

当社は現在、当社の新しい通知Microserviceを設計するが、集約された電子メールを処理する方法に問題があります。私たちが行う必要があるのは、実行されるすべてのアクション(20分〜数分)を電子メールで送信するのではなく、完了したすべてのアクションをまとめた1時間後に電子メールを送信することです。我々が持っているもの

は、これまで

私たちは、これまでのところ、我々はクライアントサービスは、当社のクラスタ内のいずれかのサービスであり、Messagebotは、私たちの通知Microserviceあるメッセージングパターン、このタイプのを持っていることを提案します。

  1. クライアントサービスは、そのデータベースに将来
  2. Messagebot店で詳細を何かを送信する必要があることMessagebotする通知を送信
  3. Messagebotは、定期的に送信する必要がある何のためにそのデータベースをチェック
  4. MessagebotはAPI経由で別のサービス(クライアントサービスの可能性があります)からのデータを取得します
  5. Messagebotは#3のデータとHTMLテンプレートを使用してメールを送信します

送信する必要があるデータについてはディベート

、我々はあまり確かであり、それは我々が助けを必要とするものです。これまでのところ、我々は、これが通知サービスへのクライアントサービスからJSONの構造であるべきだと思う(ステップ#1):

{ 
    template_id: SOME_TEMPLATE_ID, 
    user_id: SOME_USER_ID, 
    objectid: SOME_OBJECT_ID 
} 

または

{ 
    template_id: SOME_TEMPLATE_ID, 
    user_id: SOME_USER_ID, 
    required_objects: { task_id: SOME_TASK_ID, document_id: SOME_DOCUMENT_ID } 
} 

TASK_IDとDOCUMENT_IDは単なる一例であり、それが変わってしまいますテンプレートに基づいて別のテンプレートの場合は同じように簡単に{product_id: SOME_PRODUCT_ID}にすることができます。データのソースは、(ENVのVARのような)オブジェクトに暗示されることになるので、我々は唯一のTEMPLATE_IDが必要

  1. はなぜディベート

    は、私たちの考えはこれまでということです。たとえば、タスクオブジェクトはhttp://taskservice/:idになります。それ以外の場合は、将来、APIの不具合やURLの切り替えに問題が生じる可能性があります。

  2. 電子メールと名前のペアが複数のメッセージにマッチしないという問題を回避するため、電子メールと名前の代わりにuseridを使用する必要があります
  3. オブジェクトについては、依然として懐疑的です。クライアントアプリケーションサービスMessagebotの内部動作の知識はありますが、単一のオブジェクトIDはあまり拡張できないかもしれません。 2つ以上のオブジェクトを必要とする多くのメッセージを簡単に想像できます。結論

お読みいただきありがとうございました。このサービスの設計は、組織全体にとって重要なものであるため、重要です。

私たちの状況でJSON構造を議論したのはどれですか?また、私たちの要件を知って、このタイプのサービスのための適切なセットアップは何ですか? (別名。私たちは、他の仮定で正しいですか?)

+0

template_id、task_id、およびdocument_idは何かについてもう少し詳しく知ることなく、クエリに対処するのは難しいですか?また、Messagebotを各イベントで仕事をするために必要なすべてのデータを送信するという選択肢は考慮していませんか? –

答えて

1

だからあなたmessagebotが

  1. ストア通知
  2. ます
  3. 他のサービスからのデータがデータから電子メールをコンパイル取得し、
  4. を送りますコンパイル済みメール

私の意見では、あなたのメッセージボットにはあまりにも多くのタスクが与えられていました。私がシステムを設計していたなら、私はメッセージボットをもっとシンプルに保つつもりです。サービスは、電子メールをコンパイルするための知識をカプセル化する必要があります。それ自身のテンプレートなどを管理します。サービスは、コンパイルされた電子メールをキューにプッシュして、メッセージボックスが受信して送信できるようにします。メッセージボットの唯一のロジックは、キューから電子メールを取り出して送信することです。このようにして、将来どのくらいサービスを増やしても問題はありません。メッセージボットは素敵でシンプルな状態に保たれます。

+1

メールが届くまでにデータが古くならない限り、完全に同意します。 –

+0

これは私たちのケースで懸念される – Rob

+0

メッセージボックスの背後にあるデータベースに電子メール(他のすべてのサービスによって公開されている)を保管し、その時にそれらを送信することを検討することができます。明らかに、送信された電子メールのバックログを空にする必要があります。 –