Nservicebus推迟发布活动

时间:2016-10-27 19:13:30

标签: nservicebus azureservicebus

我有一个nurevicebus主机4.7.5的天蓝色工作者角色。该主机在azure servicebus传输和主题上发送事件。有没有办法延迟发送事件或设置一些属性,以确保在主题订阅延迟后出现消息?主机在注意到主数据库发生更改后发送事件。有几个辅助数据库,主要数据写入被复制到其中。接收器也是使用nservicebus主机并订阅主题的azure worker角色。

当接收方收到消息时,由于复制滞后,辅助节点可能会出现不同步数据。

一个选项是使用主数据库来读取,但这是我不想采取的路线。

1 个答案:

答案 0 :(得分:3)

是否有可能在订阅终端中提前失败并让重试处理它?您可以微调重试次数/延迟,以确保在重试消息之前更新辅助数据库。

您仍然需要找到从数据库中查找数据的最佳方法,以及区分事件版本的方法。您可以在更新时使用版本号或上次更新日期,或者只在创建时使用标识符进行查找。

从辅助数据库读取数据的端点可能有一个这样的事件处理程序:

public class CustomerCreationHandler : IHandlesMessage<CustomerCreated> 
{
    public void Handle(CustomerCreated @event) 
    { 
        var customer = Database.Load(@event.CustomerId);
        if(customer == null) 
        { 
            throw new CustomerNotFoundException("Customer was not found.");
        }

        //Your business logic goes here
    }
}

您可以控制事件处理程序重试的次数以及每次尝试之间的延迟时间。在这种情况下,将通过第一级重试重试该消息,然后将其移交给下面配置的第二级重试。

class ProvideConfiguration :
    IProvideConfiguration<SecondLevelRetriesConfig>
{
    public SecondLevelRetriesConfig GetConfiguration()
    {
        return new SecondLevelRetriesConfig
        {
            Enabled = true,
            NumberOfRetries = 2,
            TimeIncrease = TimeSpan.FromSeconds(10)
        };
    }
}

或者,您可以将延迟消息发送到同一端点,然后在经过一定时间后发布实际事件,而不是仅发布事件。

相关问题