【问题标题】:C# Azure Event Grid publish EventGridTopicEventC# Azure 事件网格发布 EventGridTopicEvent
【发布时间】:2022-01-03 22:48:26
【问题描述】:

我有一个场景,我需要发布EventGridTopicEvent 数据,同时我需要将此事件信息存储在 Azure 存储表中。我想知道如果发布事件是否成功完成(任何错误),是否有任何方法可以获取信息(如 T/F),如果发布成功,那么只有我应该将数据保存到表存储中。

我需要通过 C# Event Handler(Mediator) 处理上述逻辑,我尝试使用 C#TransactionScope,但它没有像 Rollback 这样的机制。如果事件未发布,则回滚事件以及不在表存储中存储任何内容,否则我不应该调用来处理数据库事务。

我也尝试过_mediator.Publish(request).IsCompletedSuccessfully,但即使我传递了无效的请求数据,它也始终为真。

代码sn-p

public async Task<Result<Response<XYZ>>> Handle(EventGridTopicEvent request, CancellationToken cancellationToken)
{
    using TransactionScope transactionScope = new TransactionScope();
    {
        try
        {
            bool eventPublishStatus = _mediator.Publish(request).IsCompletedSuccessfully;
            if (eventPublishStatus)
            {
                //Insert request data to Table storage
            }
        }
    }
}

【问题讨论】:

  • 请包含将数据发布到事件网格的请求的处理程序。
  • 您的问题不包含您遇到的实际错误,并且缺少可用于给出结论性答案的详细信息。我确实试图提供一个,请看一下。

标签: c# azure event-handling


【解决方案1】:

我有一个场景,我需要发布“EventGridTopicEvent”数据,同时我需要将此事件信息存储在 Azure 存储表中。我想知道如果发布事件是否成功完成(任何错误),是否有任何方法可以获取信息(如 T/F),如果发布成功,那么只有我应该将数据保存到表存储中。

发布事件是否成功完成是什么意思?

  • 如果您的意思是发布到事件网格,那么很简单:当事件网格 SDK 调用无异常完成时,数据将成功发布到事件网格。
  • 如果您想知道事件的所有消费者是否确实获得了数据并成功处理了数据,那么您将面临挑战。

在您的应用程序上下文中,很难判断是否所有消费者都收到了事件并对其进行了处理,因为事件网格是一个异步事件平台。如果它未能传递事件,它将重试一段时间,然后可以将事件转移到死信存储 (see the docs)。实际上,这意味着在发布数据和使用数据之间可能存在延迟。鉴于此,您可以轻松地看到您的应用程序要知道所有数据都已成功接收和处理是多么困难。

如果您想将数据存储为某种数据成功发布到事件网格的日志,您实际上可以创建对事件网格的订阅,并使用该订阅将发布的数据存储在表存储中。

【讨论】:

    猜你喜欢
    • 2021-02-18
    • 2021-11-02
    • 2018-12-12
    • 1970-01-01
    • 2018-03-17
    • 2020-11-02
    • 2019-08-05
    • 2022-01-15
    • 2019-10-19
    相关资源
    最近更新 更多