Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

送信データ取得の実装 #12

Closed
2 tasks done
Tracked by #9
TodorokiKohei opened this issue Jul 3, 2023 · 3 comments · Fixed by #16
Closed
2 tasks done
Tracked by #9

送信データ取得の実装 #12

TodorokiKohei opened this issue Jul 3, 2023 · 3 comments · Fixed by #16

Comments

@TodorokiKohei
Copy link
Owner

TodorokiKohei commented Jul 3, 2023

  • キュー内のメッセージ数とメッセージ処理時間を取得する手段を実装
  • PINGREQのペイロードに上記2つのデータをJSON形式で設定して送信する処理を実装
@TodorokiKohei
Copy link
Owner Author

TodorokiKohei commented Jul 11, 2023

キュー内のメッセージについて

キューサイズの変更

受信した未処理のメッセージが挿入されるキューはCommsCallbackクラスのmessageQueueフィールドである。このキューのサイズは10で固定されている。このサイズが小さいままではメッセージ処理を詰まると、メッセージ受信の処理が滞ってしまう(参照)ため、可変にする必要がある。

今回はMqttAsyncClientクライアントにリサイズメソッドを実装して内部のCommsCallbackまで伝搬させる。キューのリサイズはRecieverが実行状態になる前のみ受け付ける。

flowchart TB
  MqttAsyncClient.resizeReceiverQueueSize --> ClientComms.resizeReceiverQueueSize --> CommsCallback.resizeReceiverQueueSize

キュー内のメッセージ数の取得

PingSenderClientCommsにしかアクセスできないため、ClientComms経由でCommsCallbackのキュー内のメッセージ数を取得する。

flowchart TB
ClientComms.getNumberOfMsgsUnprocessed --> CommsCallback.getNumberOfMsgsInQueue

@TodorokiKohei
Copy link
Owner Author

TodorokiKohei commented Jul 11, 2023

メッセージ処理時間について

メッセージ処理時間の計測方法には以下の2種類がある。

  1. 内部(CommsCallback.run)でキューからメッセージを取り出し、処理完了までの時間を計測
  2. アプリケーション実装者がMqttCallback.messageArrivedでメッセージ処理時間を計測

今回は2つ目で計測を行い、PingSenderに処理時間を渡す。

@TodorokiKohei
Copy link
Owner Author

TodorokiKohei commented Jul 11, 2023

上記2つのデータを送信するPingSenderの実装

ExtendedPingSenderを継承したStatusPingSenderを実装した。このクラスは以下の2つのデータをJSON形式にして送信する。

  • CommsCallbackのキュー内のメッセージ
  • バッファした100個のメッセージ処理時間の平均

以下のような実行結果になっている。
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant