当前位置: 首页 > 面试题库 >

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

归泽宇
2023-03-14
问题内容

我正在尝试将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网上论坛上的某个人也遇到了同样的问题,但是对他们的帖子没有任何回应。


问题答案:

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

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

public State CurrentState {get; set;}

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

public string CurrentState { get; set;}

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



 类似资料:
  • 我试图在Eclipse中测试我的hibernate maven应用程序,当我运行获取enttity类名称的方法时,我得到了以下异常: 这是persistence.xml: 这是使用以下方法的类: 波姆。xml: 我尝试更改持久性的版本号、更改xmlns、提供程序的名称,但仍然是例外。

  • 问题内容: 我有一个数据库视图,该视图产生的结果集没有真正的主键。我想使用Hibernate / Persistence将结果集映射到Java对象上。当然,因为没有PK,所以我不能用修饰任何字段。 部署时,Hibernate抱怨缺少该组件。我该如何解决? 问题答案: 如果存在使行唯一的列组合,请围绕列组合建模主键类。如果没有,您基本上就不走运了-但您应该重新检查视图的设计,因为它可能没有意义。 有

  • 问题内容: 我有一个数据库视图,该视图产生的结果集没有真正的主键。我想使用Hibernate / Persistence将结果集映射到Java对象上。当然,因为没有PK,所以我不能用修饰任何字段。 部署时,Hibernate抱怨缺少该组件。我该如何解决? 问题答案: 如果存在使行唯一的列组合,请围绕列组合建模主键类。如果没有,您基本上就不走运了-但您应该重新检查视图的设计,因为它可能没有意义。 有

  • 我能知道Hazelcast支持磁盘持久性吗?换句话说,我可以使用Hazelcast作为常规数据库吗?(就像apache点火一样)。

  • 调用init方法失败;嵌套的异常是javax。坚持不懈PersistenceException:[PersistenceUnit:默认值]无法生成Hibernate SessionFactory 在更换系统中的操作系统后,我遇到了这个异常。在我的应用程序运行MySQL 5.7和java 8之前。现在我把它改成了mySQL 8和java 8。代码没有任何变化。原因一定是什么?? 下面是日志:

  • 问题内容: 我正在创建一个简单的应用程序,只需使用将一行插入到表中(如果表不存在,则创建它)。 我为它的一个可运行示例附加了一些代码。 这是我得到的异常和stacktrace: 这是我的代码: 主班: 和Person类: 这是我的persistence.xml文件 -----------------------编辑-------------------------- – 我只是将提供程序更改为Ec