Как отложить событие в NServiceBus 6.0?

Мы используем NserviceBus в качестве нашей инфраструктуры обмена сообщениями с RabbitMQ в качестве транспорта. Я пытаюсь перейти на версию NServiceBus 6.0 с версии 5.*. В 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", которое не может быть отложено.

Я что-то здесь упускаю? Ценю, если кто-то может помочь.

2 ответа

Решение

У меня есть ответ на другом форуме, и я думаю, что он наиболее актуален, поэтому разместите его здесь, чтобы он мог помочь кому-то в будущем. Благодаря Даниэль Марбах

https://groups.google.com/forum/

Bus.Defer в v5 всегда выполнял операцию отправки. Кажется, что отличие от 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

Некоторые изменения вступают в силу не сразу, поэтому нам придется отложить некоторые из этих событий.

Издатель не должен быть ограничен ни одним из подписчиков.

Правильно ли предположить, что система авторизации продуктов публикует ProductDataUpdate события независимо от того, когда фактическая дата вступления в силу будет иметь место? В таком случае вы уже уведомлены о принятом решении. То, что вы, как подписчик, собираетесь делать с этим, - это другое дело и полностью внутреннее.

Вы могли бы отправить команду, ради этого обсуждения назовите ее UpdateProductCost, это было бы отложенным сообщением, если EffectiveDate в будущем. В противном случае, это немедленная команда.

Другие вопросы по тегам