2017-06-26 7 views
0

私は、メッセージングプラットフォーム内のユーザーに納品書と領収書を表示したいと考えています。私はブローカーとしてMosquittoと共にEclipseのPahoライブラリを使用しています。 MQTTブローカーMosquittoで配信済みおよび受信確認を表示する方法は?

    1. にMosquittoは、メッセージを保存しないため、最善の方法/プラグインである表示 領収書をお届け - これを行うにはQoS2確認の領収書を使用する方法? 開封確認
    2. ディスプレイ - 私のユーザーが自分のチャット履歴を表示できるようにメッセージを保存するためにどのようにこの
    3. を行う方法を提案しますか? mysqlのアーキテクチャ上の洞察は非常に役に立ちます。
  • 答えて

    2

    ご質問に迅速に答え:

    1. 高いQoS(1/2)配信確認をエンドツーエンドではない、それは、ブローカとクライアント間の確認のみです。例えばパブリッシャーはQOS 2でパブリッシャーとブローカーの間でのみ確認を行い、その後はサブスクライバー(別のQOSでサブスクライブすることができます)にはパブリッシャーはいません。これを行う唯一の方法は、受信側から別のメッセージを送信者に送り返すことです。また、どのトピックにも複数のサブスクライバが存在する可能性があるので、これがどのように機能するか考える必要があります。メッセージはあなたが自分でこれを実装する必要があります

    2. を読んでいるとき

    3. 繰り返しますが、これを行うための唯一の方法は、送信された個別のメッセージです。役に立つかもしれない唯一のものは、いくつかのブローカーに存在するデータベースにメッセージを格納するための組み込みのサポートのようなものです(これは仕様の一部ではないため、実装に完全にpropitiatoryです)。 hivemq

    +0

    各パートの明確な回答をありがとう。もう1つのこと - ユーザーに配信する前にメッセージを処理するプラグインを追加することはできますか(スラングを確認するなど)?私はこれが推奨されないことを知っています。これはブローカーの減速につながりますが、私はそれを逃す前に傍受して処理する以外の方法はないと思います。 –

    +0

    Mosquittoはオープンソースのソフトウェアです。あなたが望むことは何でもできます。しかし、他のブローカーの中には、その物のスーツにもっと適しているものがあるかもしれません。 – hardillb

    +0

    フロントエンドで変更を加えるために正しいIDでメッセージを公開できるように、固有のメッセージID(クライアントとブローカーを問わず) –

    1

    Hardlibの回答は100%対象ですが、実装についていくつかの考えを追加します。

    私は、MQTTとの間違いは実際にはM2M(machine-to-machine)プロトコルであり、ユーザー間でメッセージをやりとりするシステムではないと考えています。それはあなたがメッセージングに使うことはできないと言っているわけではありませんが(facebook did)、それはMQTTの上のレイヤーに存在します。言い換えれば、MQTTは、メッセージの内容を気にせずにマシン間でメッセージをルーティングするように設計されています。つまり、ユーザーレベルの細かい点(配送の確認など)はMQTTの上に実装するものではなく、MQTTの上に実装するものです。

    だからここにあなたがMQTTの上に提案するものを実装する方法についていくつかの考えです:

    はあなたが両方とも同じブローカーへのアクセス権を持っている2つのクライアント(X & Z)を持っている状況を考えてみましょう(Y) 。クライアントXがクライアントZからメッセージを受信したことをクライアントXに確認させるには、単にクライアントXがクライアントZが購読しているトピック(確認/ zと言う)にメッセージを送信させます。これは、Pythonなどでアプリケーションを作成するのは簡単ではありません(たとえば、私はブローカの往復時間を測定するために基本的な手順を使用します)。

    ただし、QoSによってブローカクライアントZがメッセージを受信した時刻をクライアントZが正確に知っていることが重要でない限り、これが本当に必要かどうか質問します。

    必要に応じて、トピックの履歴を提供する方法はいくつでもあります。 MySQLの詳細については、hereおよびhereの回答を参照してください。ただし、チャットのローカル履歴やいくつかのトピックのアクティビティの記録が必要な場合は、タイムスタンプ付きのペイロードをテキストファイルまたはJSONに出力するだけで十分です。 MySQLは大量のメッセージを処理したり、複雑なクエリを作成したりする必要がある場合を除いて、過剰な使い方をしています。

    関連する問題