【问题标题】:Masstransit Saga redeliveryMasstransit Saga 重新交付
【发布时间】:2018-01-25 07:00:51
【问题描述】:

我想使用独立的石英调度程序为状态机传奇设置消息调度重新传递。现在它适用于普通消费者,但我无法正确设置重新交付传奇。我的传奇配置如下所示:

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));
                    });
            });
        });

其中 ISagaEvent 是 saga 处理的消息。我是不是做错了什么,有没有办法为 saga 配置预定的重新投递?

【问题讨论】:

    标签: .net rabbitmq masstransit saga


    【解决方案1】:

    要在 saga 中进行调度,通常最好使用实际状态机调度功能,因此会更新 saga 的状态以指示重新交付。

    本质上,如果您收到一个尚未准备好的状态的事件,请使用Schedule() 将消息安排在未来某个时间,此时该 saga 可能处于可以处理它的状态。

    文档中有一个很好的时间表示例: http://masstransit-project.com/MassTransit/advanced/sagas/automatonymous.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 2014-12-15
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多