如果我有一个包含两种消息类型的 saga,比如由 message1 开始并由 message2 完成,如果 message2 在没有 message1 的情况下进入,我可以返回回调吗?我知道它会将它转储到错误队列中,但我希望能够向发送客户端返回一个状态,以说明由于第一条消息不存在而导致错误状态。
问问题
813 次
2 回答
3
所以我想通了,我只需要IFindSagas
为消息类型实现:
public class MySagaFinder : IFindSagas<MySagaData>.Using<Message2>
{
public ISagaPersister Persister { get; set; }
public IBus Bus { get; set; }
public MySagaFinder FindBy(Message2 message)
{
var data = Persister.Get<MySagaData>("MessageIdProperty", message.MessageIdProperty);
if (data == null)
{
Bus.Return(0);
}
return data;
}
}
我不知道这是否是正确的方法,但它有效!
于 2011-09-03T01:33:23.400 回答
0
如果您有一个可以接收两条消息的 saga,但可以按任意顺序接收消息,请确保该 saga 可以由两条消息启动。然后通过在 saga 本身中设置一些状态来验证两条消息是否都已到达。如果两条消息都已到达,则将其标记为完成。
默认 NServicebBus 行为是忽略任何没有相应 saga 的消息。例如,这是因为您可以设置超时。如果 24 小时内没有任何反应,saga 可以向自己发送超时消息。但是,如果确实发生了某些事情,并且您将 saga 标记为已完成,那么 Timeout 消息会发生什么?因此 NServiceBus 忽略它。
于 2013-05-24T13:08:29.503 回答