1

我们使用 NserviceBus 作为我们的消息传递基础设施,使用 RabbitMQ 作为传输。我正在尝试从 5.* 版本升级到 NServiceBus 6.0。在 5.0 中,我们可以使用“Bus.Defer()”来延迟事件。但似乎在 6.0 中我们只能推迟消息但不能推迟事件?

如果我使用下面的代码并将消息作为“事件”,我会收到一条错误消息,指出应该发布事件。

        var sendOptions = new SendOptions();
        sendOptions.DoNotDeliverBefore(DateTimeOffset.Now.AddMinutes(30));
        sendOptions.RouteToThisEndpoint();
        return context.Send(message, sendOptions);

但是context.Publish(message, new PublishOptions())方法采用“PublishOptions”,它没有延迟选项。

我在这里错过了什么吗?感谢有人可以提供帮助。

4

2 回答 2

1

有些更改不会立即生效,因此我们将不得不推迟其中一些事件。

发布者不应受到任何订阅者的约束。

ProductDataUpdate无论实际生效日期何时发生,假设产品创作系统都会发布事件是否正确?在这种情况下,您已收到有关已做出决定的通知。作为订阅者,您将如何处理它是另一回事,完全是内部的。

你可以发送一个命令,为了这个讨论,调用它,如果是在将来UpdateProductCost,那将是一个延迟的消息。EffectiveDate否则,它是一个立即命令。

于 2017-09-20T19:26:09.487 回答
1

我在另一个论坛上得到了答案,我认为它是最相关的,所以在这里发布它以便将来可以帮助某人。感谢丹尼尔马尔巴赫

https://groups.google.com/forum/#!topic/particularsoftware/ivy1wdsycT8

v5 中的 Bus.Defer 始终在内部执行发送操作。似乎与 v6 的区别在于它自动禁用了消息传递最佳实践。您可以通过调用来实现相同的目的

        var sendOptions = new SendOptions();
        sendOptions.DoNotDeliverBefore(DateTimeOffset.Now.AddMinutes(30));
        sendOptions.RouteToThisEndpoint();
        sendOptions.DoNotEnforceBestPractices();
        return context.Send(message, sendOptions);

https://docs.particular.net/nservicebus/messaging/best-practice-enforcement

于 2017-09-20T19:34:46.467 回答