小编典典

具有Redis持久性的MassTransit传奇赋予Method Accpet没有实现异常

redis

我正在尝试将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。

当英雄传奇回读从我的路由清单发送的事件(无论是成功还是失败事件)时,似乎会发生此问题。

无法使用的示例事件接口是:

public interface ILinkCreated
{
    Guid? CorrelationId { get; set; }
    int DatabaseId { get; set; }
    Guid LinkId { get; set; }
    string LinkName { get; set; }
}

如果我切换回InMemorySagaRepository,则一切正常(本地)。我尝试了很多不同的组合,现在碰到了砖墙。

我已经将所有软件包更新为最新版本。我也一直在检查我的redis数据库,可以看到每次正确进入状态机实例。

我还看到Google网上论坛上的某个人也遇到了同样的问题,但是对他们的帖子没有任何回应。


阅读 366

收藏
2020-06-20

共1个答案

小编典典

因此,回答我自己的问题,也许会启发我自己的愚蠢。问题实际上是由我如何设置StateMachineInstance引起的。

而不是使用State类型的CurrentState,如下所示:

public State CurrentState {get; set;}

我应该将其指定为这样的字符串:

public string CurrentState { get; set;}

现在可以将其正确反序列化到对象中。我怀疑这也可能导致我的登台服务器上的InMemorySagaRepository超时问题。

2020-06-20