Nservicebus延迟发布事件

Nservicebus延迟发布事件,nservicebus,azureservicebus,Nservicebus,Azureservicebus,我在nservicebus主机4.7.5上有一个azure worker角色。此主机将azure servicebus传输上的事件发送到主题。是否有办法延迟事件的发送或设置某些属性以确保消息在主题订阅延迟后显示?主机在注意到主数据库中的更改后发送事件。主数据写入复制到几个辅助数据库中。接收者也是azure工作角色,使用nservicebus主机并订阅主题 当接收者收到消息时,由于复制延迟,二级机可能有不同步的数据 一种选择是使用主数据库进行读取,但这是我不想采用的路线。是否可能在订阅端点的早期失

我在nservicebus主机4.7.5上有一个azure worker角色。此主机将azure servicebus传输上的事件发送到主题。是否有办法延迟事件的发送或设置某些属性以确保消息在主题订阅延迟后显示?主机在注意到主数据库中的更改后发送事件。主数据写入复制到几个辅助数据库中。接收者也是azure工作角色,使用nservicebus主机并订阅主题

当接收者收到消息时,由于复制延迟,二级机可能有不同步的数据


一种选择是使用主数据库进行读取,但这是我不想采用的路线。

是否可能在订阅端点的早期失败,并让重试处理?您可以微调重试时间/延迟,以确保在重试消息之前更新辅助数据库

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

从辅助数据库读取数据的端点可能具有如下事件处理程序:

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
    }
}
公共类CustomerCreationHandler:iHandleMessage { 公共无效句柄(CustomerCreated@event) { var customer=Database.Load(@event.CustomerId); 如果(客户==null) { 抛出新CustomerNotFoundException(“未找到客户”); } //你的商业逻辑在这里 } } 您可以控制事件处理程序将重试的次数以及每次尝试之间的延迟时间。在这种情况下,消息将由第一级重试重试,然后移交给下面配置的第二级重试

class ProvideConfiguration :
    IProvideConfiguration<SecondLevelRetriesConfig>
{
    public SecondLevelRetriesConfig GetConfiguration()
    {
        return new SecondLevelRetriesConfig
        {
            Enabled = true,
            NumberOfRetries = 2,
            TimeIncrease = TimeSpan.FromSeconds(10)
        };
    }
}
类提供配置:
IPD配置
{
公共二级检索配置GetConfiguration()
{
返回新的二级检索配置
{
启用=真,
NumberOfRetries=2,
时间增加=从秒开始的时间跨度(10)
};
}
}
或者,不只是发布事件,您可以向同一端点发送延迟消息,在经过一定时间后发布实际事件