私は既存のアプリケーションにMQTT
を統合しています。組み込みMQTTブローカーを実行するためにこれを使用しました https://github.com/chkr1011/MQTTnet ライブラリ。
現在、ブローカーの起動には次の方法が使用されています。
public async Task StarBrokerAsync()
{
var optionsBuilder = new MqttServerOptionsBuilder()
.WithConnectionBacklog(ConnectionBacklog)
.WithDefaultEndpointPort(Port);
MqttServer = new MqttFactory().CreateMqttServer();
await MqttServer.StartAsync(optionsBuilder.Build());
}
私が欲しいのは、せいぜい別のクライアントを作成することなく、特定のトピックのメッセージをリッスンすることです。ライブラリのドキュメントや同様の質問は見つかりませんでした。
問題の解決策はありますか?
サーバーインスタンス内で実行できることがわかっている限り、IMqttApplicationMessageReceivedHandler
インターフェースの実装を提供する必要があります。
簡単な実装を考えてみましょう:
public class MessageHandler: IMqttApplicationMessageReceivedHandler
{
public Task HandleApplicationMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs eventArgs)
{
if (eventArgs.ApplicationMessage.Topic == "name_of_desired_topic")
{
// Handle event
}
}
}
そして、このハンドラのインスタンスをMqttServer
に次のように提供できます。
public async Task StarBrokerAsync()
{
// Start broker ...
MqttServer.ApplicationMessageReceivedHandler = new MessageHandler();
}
その場合、特定のトピックからのメッセージのみが表示されます。または、MqttClient
接続のインスタンスを作成してブローカーにサブスクライブすることもできます。
お役に立てば幸いです。