当队列是一个传奇端点队列时,在命令和事件(如下图所示)中出现的用于存储消息的队列的ReceiveEndpoint内部配置RetryPolicy不起作用。
此配置正常(请注意端点 RegisterOrderServiceQueue ):
...
var bus = BusConfigurator.ConfigureBus((cfg, host) =>
{
cfg.ReceiveEndpoint(host, RabbitMqConstants.RegisterOrderServiceQueue, e =>
{
e.UseRetry(Retry.Except<ArgumentException>().Immediate(3));
...
在Windows服务上运行Saga状态机的...总线 RetryPolicy 配置不起作用(注意端点 SagaQueue ):
...
var bus = BusConfigurator.ConfigureBus((cfg, host) =>
{
cfg.ReceiveEndpoint(host, RabbitMqConstants.SagaQueue, e =>
{
e.UseRetry(Retry.Except<ArgumentException>().Immediate(3));
...
抛出ArgumentException的StateMachine类源代码:
...
During(Registered,
When(ApproveOrder)
.Then(context =>
{
throw new ArgumentException("Test for monitoring sagas");
context.Instance.EstimatedTime = context.Data.EstimatedTime;
context.Instance.Status = context.Data.Status;
})
.TransitionTo(Approved),
...
但是当 ApproveOrder 出现时,忽略RetryPolicy规则,并连接Sagas所连接的总线中的ConsumeObserver,ConsumeFault的方法执行5次(这是masstransit的默认行为)。 / p>
这应该有用吗?我的配置有什么误解吗?