Azureイベントハブからデータを送信または受信しています。要件メッセージをコンシューマが順番に処理する必要があるため、私はPartitionSenderに参加し、常に同じパーティションにイベントを送信することに決めました。 https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-availability-and-consistencyで「一貫性」の下Azure EventHubの再試行ロジックPartitionedSender
それはPartitionSenderについてこう述べています。このタイプの構成では
、あなたが送信された特定のパーティションが使用できない場合、エラーが表示されますことを心に留めておく必要があります応答。比較のポイントとして、単一のパーティションに対する親和性がない場合、イベントハブサービスはイベントを次の使用可能なパーティションに送信します。
エラーが発生した場合、別のパーティションを使用して送信しようとする再試行ロジックを実装します。 (私は4)
私はこのエラーをトリガする方法がわからないので、コードでは再試行ロジックを実装する必要があります少し不明です。
私の推測では、それがスローされます「Sender.SendAsync(データ)」であり、それはここで私は再試行ロジックに
を実装する必要があります。これは、関連するコードです:私として
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)
{
}
}
私は、例外を処理する方向に傾いていて、それを別のパーティションに送信しています。それは醜いですが、それが最も簡単なようです。 –
私は[ILSpy](http://ilspy.net/)を利用してMicrosoft.ServiceBusを逆コンパイルしようとしましたが、特定のパーティションが使用できないことを示すExceptionについて何も見つかりませんでした。しかし、Messaging例外はMessagingExceptionを継承していることがわかりました。だから私はあなたのリトライロジックを実装するための回避策について[MessagingException](https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.messagingexception)を捕捉できると仮定しました。 –