我正在寻找一种用于ServiceClient.GetFeedbackReceiver()
接收来自带有 Azure IoT SDK 的设备的确认的良好做法。
我有两个IEventProcessor
处理来自 IoT HUB 的消息的实例——一个用于冷路径,另一个用于热路径。如果需要更多数据,每个 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);
}
问题是:
- 当我在两个事件处理器(热和冷)中运行此代码时,我得到反馈响应(ack)是完全随机的!
- 两个 EventProcessor 是分开的,所以我不能只将收到的 ACK 从一个传递到另一个;
我需要的:
- 我需要 ACK 来返回消息来源的 EventProcessor
- 或解决问题的其他常见的、良好的做法、规范的解决方案;