我正在尝试将Redis持久性添加到我的传奇中,该传奇正在管理对路由清单的调用(以及根据路由清单的结果向其他使用者发送其他消息),以希望它可以解决另一个超时问题我不断得到。
但是,我收到一条错误消息,该消息进入RabbitMQ中的saga_error队列。
消息中显示的错误是:
程序集'AutomatonymousGreenPipes.DynamicInternalc83411641fad46798326d78fe60522c9,版本= 0.0.0.0,文化=中性,PublicKeyToken = null'中的类型'GreenPipes.DynamicInternal.Automatonymous.State'中的方法'Accept'没有实现
我的相关配置代码为:
edt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(YourActivity.this,"edt click", Toast.LENGTH_LONG).show();
}
});
上面的代码中的LinkId始终是唯一的Guid。
当传奇故事回读了我的路由清单发送的事件(无论是成功还是失败事件)时,似乎就出现了问题。
不起作用的示例事件接口是:
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);
});
如果我切换回InMemorySagaRepository,则一切正常(本地)。我尝试了许多不同的组合,现在碰到了墙。
我已经将所有软件包更新为最新版本。我也一直在检查我的Redis数据库,可以看到每次正确进入状态机实例。
我还看到Google网上论坛上的某个人遇到了同样的问题,但是对他们的帖子没有任何回应。
答案 0 :(得分:0)
这里的问题是请求-响应。
它是这样的:
UrlRequestId
repo.Find(x => x.UrlRequestId == message.Headers.RequestId)
查找您的实例(因此这不是真实的代码,但这会发生)您的响应相关性规范无效,因为Request
始终使用标头来查找响应所属的传奇实例。
您可以通过不使用请求响应来解决此问题,而可以使用context.Publish(new LinkCreatedEvent { ... , CorrelationId = context.Message.CorrelationId })
并使用通常的关联来发出事件。
答案 1 :(得分:0)
因此,回答我自己的问题,也许可以说明我自己的愚蠢。问题实际上是由我如何设置StateMachineInstance引起的。
而不是具有如下类型的State的CurrentState:
public State CurrentState {get; set;}
我应该将其指定为这样的字符串:
public string CurrentState { get; set;}
现在可以将其正确反序列化到对象中了。我怀疑这也可能导致我的登台服务器上的InMemorySagaRepository超时问题。