メッセージセンターの設計と実装ロジックについてチャットする

ニュースに邪魔されるのはうんざりですが、突然の沈黙も恐れています。

1.事業背景

マイクロサービスアーキテクチャシステムには、ファイル管理、MQキュー、キャッシュメカニズム、メッセージセンターなど、ほとんどのサービスに必要な機能を提供する多くの基本サービスがあります。これらのサービスは、さまざまな再利用可能なメソッドを提供する必要があります。他のビジネスサービスをすばやく呼び出すことができるように、メッセージ通知の原理を見てみましょう。

ここでのメッセージは、SMS、電子メール、システムメッセージなど、ビジネス側の通知メカニズムを参照するMQキューとは異なります。ビジネスレベルでは多くのニーズがあり、通常、別のメッセージセンターが次のようにパッケージ化されます。通知メカニズムを提供します。

プロセスの観点から見ると、メッセージ通知は典型的な生産-消費モデルであり、ビジネス側は継続的にメッセージを生成し、メッセージセンターはメッセージを受信した後にそれらを消費し、対応するチャネルに通知をプッシュします。明らかに、このロジックには高いものがあります。再利用の程度。性別。

2.メッセージ通知

1.プロセス管理

メッセージ通知のプロセス設計は、各事業分野のメッセージセンターが提供するインターフェース方式を通じて、さまざまなシナリオのメッセージの内容をメッセージセンターに送信し、メッセージセンターが統一された保守管理を行い、対応するものを適応させます。メッセージの送信元と宛先に応じたメッセージプッシュロジック:

  • メッセージの作成:アクティビティ、マーケティングメカニズム、システム通知、ビジネスの流通、有効期限のリマインダーなど、多くのシナリオが関係しています。
  • メッセージ管理:送信済みメッセージの構造とパラメーターを確認し、メッセージプッシュ用のタスクを作成し、タスクレベルのプッシュ管理を維持し、メッセージのステータスサイクルを追跡します。
  • メッセージの消費:メッセージタスクの構造に基づいて、メッセージプッシュのメインコンテンツを構築し、複数の送信チャネルを接続して、通知の効率的な配信を実現します。
  • スケジュールされたタスク:メッセージは直接かつ即座にプッシュできますが、夜間のスケジュールされたタスクによってトリガーされた場合は、プッシュ遅延の問題を考慮する必要があり、メッセージは指定された期間に配信されます。
  • チャネルドッキング:通常、チャネルが異なれば、プッシュDingTalkの監視、アクティビティは一般的にWeChatのプッシュ、アカウントの変更はメールの送信、マーケティングはSMSを介して行われる、ビジネス通知はアプリ内にあるなど、さまざまなシナリオを意味します。

プロセス全体には多くのモジュールが含まれ、ステータスフローも非常に複雑ですが、統一された標準管理とメッセージセンターを介した流入と流出の追跡により、明確なライフサイクルの監視と保守を行うこともできます。

2.プロセスのタイミング

メッセージ通知リンク全体では、さまざまなフローノードで、すべての状態の変化(つまり、状態から状態へ)が関係します。これにより、ライフサイクル全体のビューを形成できます。

  • 初期化:ビジネス側は単純なメッセージ構造を構築し、要求がメッセージセンターに送信された後、メッセージタスクが初期化されます。
  • タスクベース:メッセージ送信要求を確認し、メッセージを標準のプッシュタスク構造に変換します。
  • 推送中:根据任务推送的时间周期类型,将任务构建成不同渠道的通知主体,从而进行渠道消息推送;
  • 已完成:根据消息在渠道推送的状态回调,更新消息中心的任务完成状态,或者失败重试;

大部分的消息通知机制都可以容忍一定的延迟性,所以消息中心完全可以解耦各个流程,引入MQ队列或者异步机制,业务方只需要将请求发送到消息中心,之后由消息中心统一调度和管理即可;

3、结构设计

这里根据系统的实现过程和经验,给出一个数据结构的设计参考,用来对业务场景做简单的维度描述:

  • 消息模板:定义通知的主体结构,基于消息的参数模型,构建推送的消息内容;
  • 消息任务:消息中心管理和维护的主体结构,以任务的模式维护消息从生产到推送完成的整个状态周期;
  • 场景记录:消息最终推送出去的内容和场景分类,也可以简单的理解为不同渠道的投递记录;
  • 交互消息:强调消息在接收方是否触达并且对消息产生了交互行为,例如会话,邮件回复,状态关联等;

三、实践总结

最后还是站在技术实现的角度,总结一下消息通知机制中的一些关键问题:

  • 生产消费:消息生产之后写入消息中心的存储容器,之后进行消费流程的管理,是业务解耦的常用手段;
  • 任务管理:以任务的模式进行消息推送的调度,通过任务状态的变化和控制,实现生命周期的管理;
  • 状态机:描述消息的流转节点和状态,在不同的事件中触发不同的状态切换和转移,并在状态变化后衔接各种业务动作;
  • 渠道对接:通常消息推送的渠道多是第三方平台,所以在消息中心会接入诸多的渠道,例如微信、钉钉、短信等;
  • 基础封装:作为分布式系统中的基础功能,在封装消息管理功能时,要考虑一定的复用性和流程的可视化呈现;

消息的本质是信息的触达和传递,但是过多的消息通知也容易让用户产生厌倦心态,所以消息内容的简洁明确,推送的间隔时段以及阅读提醒,在产品具体的实现上需要极为用心,从而让消息在业务体系中发挥更大的价值。

四、参考源码

编程文档:
https://gitee.com/cicadasmile/butte-java-note

应用仓库:
https://gitee.com/cicadasmile/butte-flyer-parent

おすすめ

転載: juejin.im/post/7118659377296310279