我正在尝试将 Redis 持久性添加到我的传奇中,它正在管理对路由单的调用(以及根据路由单的结果向其他消费者发送的附加消息),希望它能解决我不断收到的另一个超时问题.
但是,我收到一条错误消息,该消息进入 RabbitMQ 中的 saga_error 队列。
消息中显示的错误是:
来自程序集“AutomatonymousGreenPipes.DynamicInternalc83411641fad46798326d78fe60522c9, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”的“GreenPipes.DynamicInternal.Automatonymous.State”类型中的方法“Accept”没有实现
我的相关配置代码是:
InstanceState(s => s.CurrentState);
Event(() => RequestLinkEvent, x => x.CorrelateById(context => context.Message.LinkId).SelectId(y => y.Message.LinkId));
Event(() => LinkCreatedEvent, x => x.CorrelateById(context => context.Message.LinkId));
Event(() => CreateLinkGroupFailedEvent, x => x.CorrelateById(context => context.Message.LinkId));
Event(() => CreateLinkFailedEvent, x => x.CorrelateById(context => context.Message.LinkId));
Event(() => RequestLinkFailedEvent, x => x.CorrelateById(context => context.Message.LinkId));
Request(() => LinkRequest, x => x.UrlRequestId, cfg =>
{
cfg.ServiceAddress = new Uri($"{hostAddress}/{nameof(SelectUrlByPublicId)}");
cfg.SchedulingServiceAddress = new Uri($"{hostAddress}/{nameof(SelectUrlByPublicId)}");
cfg.Timeout = TimeSpan.FromSeconds(30);
});
上述代码中的 LinkId 始终是唯一的 Guid。
当 saga 正在读回从我的路由单发送的事件(无论是成功还是失败事件)时,问题似乎就会发生。
一个不工作的示例事件接口是:
public interface ILinkCreated
{
Guid? CorrelationId { get; set; }
int DatabaseId { get; set; }
Guid LinkId { get; set; }
string LinkName { get; set; }
}
如果我切换回 InMemorySagaRepository 一切正常(本地)。我已经尝试了很多不同的组合,现在已经碰壁了。
我已将所有软件包更新到最新版本。我也一直在检查我的 redis 数据库,并且可以看到状态机实例每次都正确进入。
我还看到 Google 群组中的某个人遇到了同样的问题,但他们的帖子没有回复。