gpt4 book ai didi

c# - Azure EventHub PartitionedSender 的重试逻辑

转载 作者:行者123 更新时间:2023-11-30 18:17:46 25 4
gpt4 key购买 nike

我正在从 Azure 事件中心发送/接收数据。由于我要求消息必须由消费者按顺序处理,因此我决定使用 PartitionSender 并始终将事件发送到同一分区。

https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-availability-and-consistency 中的“一致性”下它提到了 PartitionSender:

对于这种类型的配置,您必须记住,如果您要发送到的特定分区不可用,您将收到错误响应。作为比较,如果您与单个分区没有关联,事件中心服务会将您的事件发送到下一个可用分区。

因此,如果出现错误,我想实现尝试使用另一个分区发送的重试逻辑。 (我有4个)

我不知道如何触发此错误,所以我有点不确定代码中的何处必须实现重试逻辑。

我的猜测是“Sender.SendAsync(data)”将会抛出,我应该在这里实现重试逻辑

这是相关代码:

    private EventHubSender _sender;

private EventHubSender Sender(int partitionId)
{
if (_sender == null)
{
_sender = CreatePartitionedSender(partitionId);
}
return _sender;
}

private static EventHubSender CreatePartitionedSender(int partitionId)
{
var eventHubClient = EventHubClient.CreateFromConnectionString(SnakeHubSendSas);
return eventHubClient.CreatePartitionedSender(partitionId.ToString());
}

public void SendToEventHub(string json, long sequenceNumber)
{
Console.WriteLine("");
Console.WriteLine("Sending message: sequence number '" + sequenceNumber + "'");

var data = new EventData(Encoding.UTF8.GetBytes(json));
data.Properties.Add("SequenceNumber", sequenceNumber);

try
{
Sender(1).SendAsync(data);
}
catch (Exception ex)
{

}
}

最佳答案

据我所知,您可以利用 PartitionSender 对象将有关应用程序一致性的事件发送到特定分区。此外,当您发送的特定分区不可用时,您可以捕获异常,然后将事件发送到另一个特定分区。但此时,您的辅助分区有时可能不可用,您需要添加额外的逻辑来处理来自该分区的事件。

根据我的理解,您可以利用EventHubClient.Send发送事件的方法,以便在事件中心的分区之间自动分发事件,以获得最大的正常运行时间,并使用自定义序列状态属性标记事件,以确保排序并通过处理保持事件的状态应用程序。

关于c# - Azure EventHub PartitionedSender 的重试逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42887030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com