RocketMQ-(9-1)-MQTT-EventBridge の概要

RocketMQ MQTT の概要

従来のメッセージキュー MQ は、主に電子商取引分野におけるトランザクションメッセージ、支払いメッセージ、物流メッセージなどのサービス (エンド) 間のメッセージ通信に使用されます。ただし、メッセージの一般的なカテゴリの下には、IoT 端末デバイス メッセージという別の非常に重要で共通のメッセージ フィールドがあります。近年、スマートホームや産業相互接続に伴って登場したIoTデバイスに関するニュースが爆発的に成長しているのを見てきましたが、10年以上開発されてきたモバイルインターネットモバイルAPPのニュースは依然として桁違いに巨大です。端末デバイス向けのメッセージの規模は、従来のサーバーのメッセージよりもはるかに大きく、依然として急速に増加しています。

マルチシナリオ コンピューティング (ストリーム、イベントなど) とマルチシナリオ (IoT、APP) アクセスを提供するユニファイド メッセージング システム (製品) があれば、メッセージも重要なデータであるため、実際には非常に価値があります。データを 1 つのシステムのみに存在させることで、ストレージ コストを最小限に抑え、異なるシステム間のデータ同期によって生じる一貫性の問題や課題を効果的に回避できます。

画像

これに基づいて、IoT デバイスおよびサーバーからのメッセージへの RocketMQ の統合アクセスを実現し、統合されたメッセージ ストレージと相互運用機能を提供する RocketMQ-MQTT 拡張プロジェクトを導入しました。

MQTTプロトコル

IoT 端末シナリオでは、MQTT プロトコルが現在業界で広く使用されており、OASIS Alliance によって定義された IoT シナリオ由来の標準オープン プロトコルです。IoT デバイスには多くの種類があり、動作環境も異なるため、標準のアクセス プロトコルが特に重要です。

MQTT プロトコルは、RocketMQ に似た Pub/Sub 通信モデルを定義しますが、そのサブスクリプション方法はより柔軟で、マルチレベルのトピック サブスクリプション (「/t/t1/t2」など)、さらにはワイルドカード サブスクリプション ( 「/t/t1/+」など)。

モデル紹介

キューストレージモデル

画像

多次元分散トピック キュー モデルを設計しました。上の図に示すように、メッセージはさまざまなアクセス シナリオ (サーバー上の MQ/AMQP、クライアント上の MQTT など) から来る可能性がありますが、コピーは 1 つだけ書き込まれ、コミットログに保存されます。複数の需要シナリオのキュー インデックス (ConsumerQueue) を配布します。たとえば、サーバー シナリオ (MQ/AMQP) は、第 1 レベルのトピック キューに従って従来のサーバー消費を実行できます。クライアント MQTT シナリオは、MQTT に従って消費できます。マルチレベルのトピックとワイルドカードのサブスクリプション情報。

このようなキュー モデルは、サーバーと端末のシナリオでのアクセスとメッセージの送受信を同時にサポートし、統合の目標を達成します。

プッシュプルモデル

画像

上図はプッシュプルモデルを示しており、図中のPノードはプロトコルゲートウェイまたはブローカープラグインであり、端末装置はMQTTプロトコルを介してこのゲートウェイノードに接続されます。メッセージはさまざまなシナリオ (MQ/AMQP/MQTT) から送信できます。トピック キューに保存された後、この新しいメッセージの到着をリアルタイムで検出する通知ロジック モジュールが存在し、メッセージ イベント ( (メッセージのトピック名) が生成されます。イベントはゲートウェイ ノードにプッシュされます。ゲートウェイ ノードは、接続されている端末デバイスのサブスクリプション ステータスに基づいて内部マッチングを実行し、どの端末デバイスが一致できるかを見つけます。その後、イベントをトリガーします。ストレージ層にプルリクエストを送信してメッセージを読み取り、それを端末デバイスにプッシュします。

アーキテクチャの概要

画像

 私たちの目標は、RocketMQ に基づいた統合と自己閉ループを実現することですが、ブローカーがこれ以上のシナリオ ロジックに侵入されることは望ましくありません。プロトコル コンピューティング層を抽象化しました。このコンピューティング層は、ゲートウェイまたはブローカー プラグインにすることができます。で。Broker は、キューの問題を解決し、上記のコンピューティング ニーズを満たすためにキュー ストレージの適応または変換を行うことに重点を置いています。プロトコル コンピューティング層はプロトコル アクセスを担当し、展開のためにプラグイン可能である必要があります。

RocketMQ MQTT クイック スタート

システム要件

  • 64 ビット オペレーティング システム、Linux/Unix/macOS を推奨
  • 64 ビット JDK 1.8 以降

導入手順

RocketMQ-MQTT プロジェクトは RocketMQ の基礎となるマルチキュー ディストリビューションに依存しているため、RocketMQ はバージョン 4.9.3 以降でこの機能をサポートするため、RocketMQ のバージョンが 4.9.3 以降にアップグレードされていることを確認し、次のことを確認する必要があります。次の設定項目が有効になります。

enableLmq = true 
enableMultiDispatch = true

RocketMQ-MQTT のデプロイメントについては、プロジェクトの説明を参照するか、プロジェクトのリリース バージョンをダウンロードするか、ソース コードから直接ビルドします。

git clone https://github.com/apache/rocketmq-mqtt
cd rocketmq-mqtt 
mvn -Prelease-all -DskipTests clean install -U 
cd distribution/target/ 
cd bin
sh mqtt.sh start

設定手順

username=xxx    // 权限验证账户配置
secretKey=xxx    // 权限验证账户配置
NAMESRV_ADDR=xxx  //namesrv接入点
eventNotifyRetryTopic=xx   //notify重试topic,提前创建
clientRetryTopic=xx  //客户端消息重试topic,提前创建

その他の起動構成リファレンス プロジェクトREADME.md

説明

RocketMQ-MQTT プロジェクトのエンジニアリング コードには、基本的なサンプルコードが含まれています。詳細については、コード サンプルを参照してください。

MqttConsumer.java  // MQTT客户端启动订阅消息
MqttProducer.java   // MQTT客户端启动发布消息
RocketMQConsumer.java //RocketMQ客户端启动订阅消息
RocketMQProducer.java  // RocketMQ客户端启动发布消息

おすすめ

転載: blog.csdn.net/qq827245563/article/details/131896194