.net 大众运输传奇再交付

.net 大众运输传奇再交付,.net,rabbitmq,masstransit,saga,.net,Rabbitmq,Masstransit,Saga,我想使用独立的quartz调度器为状态机saga设置消息调度重新交付。现在,它可以很好地与普通消费者,但我不能设置为传奇重新交付正确。我的传奇配置如下所示: MassTransit.Bus.Factory.CreateUsingRabbitMq(cfg => { var retryPolicy = Retry.Incremental(5, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(2));

我想使用独立的quartz调度器为状态机saga设置消息调度重新交付。现在,它可以很好地与普通消费者,但我不能设置为传奇重新交付正确。我的传奇配置如下所示:

MassTransit.Bus.Factory.CreateUsingRabbitMq(cfg =>
        {
            var retryPolicy = Retry.Incremental(5, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(2));

            cfg.UseMessageScheduler(new Uri($"rabbitmq://localhost/SchedulerQueue"));

            var host = cfg.Host(new Uri(uri), h =>
            {
                h.Username(config.RabbitMqUser);
                h.Password(config.RabbitMqPassword);
            });

            cfg.ReceiveEndpoint(host, "SagaQueue", e =>
            {
                e.Durable = true;

                e.StateMachineSaga(new MySaga(),
                    repository, c =>
                    {
                        c.UseTransaction();
                        c.Message<ISagaEvent>(y => y.UseScheduledRedelivery(retryPolicy));
                    });
            });
        });
MassTransit.Bus.Factory.CreateUsingRabbitMq(cfg=>
{
var retryPolicy=Retry.Incremental(5,TimeSpan.FromSeconds(5),TimeSpan.FromSeconds(2));
UseMessageScheduler(新Uri($)rabbitmq://localhost/SchedulerQueue"));
var host=cfg.host(新的Uri,h=>
{
h、 用户名(config.RabbitMqUser);
h、 密码(config.RabbitMqPassword);
});
ReceiveEndpoint(主机,“SagaQueue”,e=>
{
e、 持久=真实;
e、 StateMachineSaga(新MySaga(),
存储库,c=>
{
c、 使用事务();
c、 消息(y=>y.UseScheduledRedelivery(retryPolicy));
});
});
});

其中ISagaEvent是由saga处理的消息。我是否做错了什么,是否有办法为传奇配置计划的重新交付?

要在传奇中进行计划,通常最好使用实际状态机计划功能,以便更新传奇的状态以指示重新交付

本质上,如果您接收到的事件状态尚未准备就绪,请使用
Schedule()
将消息安排在将来某个时间,当事件可能处于可处理状态时

文档中有一个很好的时间表示例: