私のドメインイベントを私のdbに永続化しています。私はこれらのイベントを読み込んで適切なキュー/トピックに転送し、そのメッセージをdb内のIsForwardedとしてマークするWebジョブを持っています。Azureサービスバスが仲介メッセージを受信したことをどのように知っていますか?
TopicClient.Send()とQueueClient.Send()は配信を保証します。配信に失敗した場合、Webjob転送イベントがdbを更新しないように例外が保証されますか?本質的に、私はメッセージがサービスバスによって受信されることをどのように保証できるかを知りたい。
キュー/トピックにメッセージを送る私の現在の方法は次のとおりです。
private void PublishMessage(MessageQueue message, string queueName)
{
this.InitializeEventQueue(queueName, null);
var client = TopicClient.CreateFromConnectionString(_connectionString, queueName);
var brokeredMessage = this.CreateBrokeredMessage(message, message.MessageId.ToString());
client.Send(brokeredMessage);
client.Close();
}
Webjob:Send
呼び出しは(例外なく)正常に完了した場合
var groups = this.GetNewMessages()
.GroupBy(a => new { a.DuplicationDetectionId, a.TypeName });
foreach (var group in groups)
{
//get the most recent message, which would be the last one of the group
var message = group.OrderBy(a => a.CreateDate).Last();
var queueName = this.GetQueueName(message.TypeName);
this._messagingService.PublishMessage(message, queueName, 0);
message.MarkAsForwarded();
this._dbContext.Entry(message).State = EntityState.Modified;
//mark as forwarded
foreach (var storedEvent in group.Where(a => !a.IsForwarded))
storedEvent.Delete();
this._dbContext.SaveChanges();
}