我正在从 Azure 事件中心发送/接收数据。由于我要求消息必须由消费者按顺序处理,因此我决定使用 PartitionSender 并始终将事件发送到同一个分区。
在https://docs.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)
{
}
}