ServiceClient.GetFeedbackReceiver()
Azure IoT SDK を使用してデバイスから確認応答を受信するために使用するための良い方法を探しています。
IoT HUB からのメッセージを処理するインスタンスが 2 つありますIEventProcessor
。1 つはコールド パス用で、もう 1 つはホット パス用です。さらにデータが必要な場合、各 EventProcessor はデバイスにメッセージを送信できます。
メッセージを送信したデバイスからの ACK を処理する必要があります。したがって、次のような「スタブコード」があります。
var sc = ServiceClient.CreateFromConnectionString(connectionString);
var fr = sc.GetFeedbackReceiver();
while (true)
{
var feedbackBatch = await fr.ReceiveAsync();
if (feedbackBatch == null) continue;
var myName = GetType().Name;
Console.WriteLine(myName +": ack list: {0}", string.Join(", ", feedbackBatch.Records.Select(f => f.StatusCode + " for " + f.OriginalMessageId + ";")));
await fr.CompleteAsync(feedbackBatch);
}
問題は:
- このコードを両方の EventProcessor (ホットとコールド) で実行すると、フィードバック応答 (ack) が得られるのは完全にランダムです!
- 両方の EventProcessor が分離されているため、受信した ACK を一方から他方に渡すことはできません。
必要なもの:
- メッセージの発信元である EventProcessor に戻るには ACK が必要です
- または、問題を解決するためのその他の一般的で優れた慣行、標準的な解決策。