Здравствуйте.
Мы с Тамарой работаем вместе над текущей задачей, так что я не буду создавать новый топик и продолжу обсуждение проблемы здесь.
Я написал тестовую прогу на C# для получения списка каналов из wb-mqtt-db согласно вашей документации ссылка. И она не выдаёт результат. Каждый шаг, как то соединение, подписка на очередь с ответом и публикация запроса проходят нормально, ошибок нет, статусы я проверяю, но результат в reply очередь не посылается. Прога просто висит минуту и закрывается. В логах wb-mqtt-db на самом контроллере вообще ничего, никаких признаков того, что кто-то пытался пообщаться с wb-mqtt-db. Что я делаю не так?
using MQTTnet.Client;
using MQTTnet;
using MQTTnet.Protocol;
string broker = "192.168.0.1";
int port = 1883;
string clientId = Guid.NewGuid().ToString();
string getChannelsRequestTopic = $"/rpc/v1/db_logger/history/get-channels/{clientId}";
string getChannelsResponseTopic = getChannelsRequestTopic + "/reply";
// Create a MQTT client factory
var factory = new MqttFactory();
// Create a MQTT client instance
using var mqttClient = factory.CreateMqttClient();
// Create MQTT client options
var options = new MqttClientOptionsBuilder()
.WithTcpServer(broker, port) // MQTT broker address and port
.WithClientId(clientId)
.WithCleanSession()
.Build();
var result = await mqttClient.ConnectAsync(options);
if(result.ResultCode != MqttClientConnectResultCode.Success)
{
Console.WriteLine("Unable to connect to queue");
return 1;
}
var subResult = await mqttClient.SubscribeAsync(getChannelsResponseTopic).ConfigureAwait(false);
if(subResult.Items.First().ResultCode != MqttClientSubscribeResultCode.GrantedQoS0)
{
Console.WriteLine("Unable to subscribe");
return 3;
}
mqttClient.ApplicationMessageReceivedAsync += e =>
{
Console.WriteLine("received");
return Task.CompletedTask;
};
var payload = "{\"id\": \"2730b391-d1ac-4041-888a-1cb05940c03d\", \"params\": { } }";
var message = new MqttApplicationMessageBuilder()
.WithTopic(getChannelsRequestTopic)
.WithPayload(payload)
.WithQualityOfServiceLevel(MqttQualityOfServiceLevel.ExactlyOnce)
.Build();
var publishResult = await mqttClient.PublishAsync(message).ConfigureAwait(false);
if(publishResult.IsSuccess == false)
{
Console.WriteLine("Unable to send message");
return 2;
}
await Task.Delay(TimeSpan.FromMinutes(1)).ConfigureAwait(false);
await mqttClient.UnsubscribeAsync(getChannelsResponseTopic).ConfigureAwait(false);
await mqttClient.DisconnectAsync().ConfigureAwait(false);
return 0;