首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NServicebus saga竞争条件

NServicebus saga竞争条件
EN

Stack Overflow用户
提问于 2011-06-21 21:15:53
回答 1查看 769关注 0票数 2

我在使用NServiceBus sagas时遇到了竞争问题。

问题是-

我有一个从Saga派生的类,它实现IAmStartedByMessages并在sql server中持久化saga数据。这个saga处理传入的消息,创建一个新消息,然后将其发送到另一个服务器。此服务器处理消息并发回响应。然后,该回复消息被处理为saga处理的下一阶段。我使用saga ids来配置映射。

当紧接在saga数据被保存到数据库之前的回复消息出现问题。由于saga数据尚未保存,因此映射失败且消息丢失。

为了在下面的示例中进行说明,假设我让这些处理程序侦听不同的端点,我在持久化SagaData之前获取AnotherMessage。-

代码语言:javascript
复制
public class MySaga : Saga<SagaData>, 
                      IAmStartedByMessages<StartMesssage>
                      HandleMessage<AnotherMessage>
{

    public override void ConfigureHowToFindSaga()
    {
       ConfigureMapping<AnotherMessage>(s => s.Id, x => x.SagaId);
    }

    void Handle(StartMessage message)
    {
      var sendMsg = new SendMessage(){SagaId=this.Data.Id}
      bus.Send(sendMsg)
    }

    void Handle(AnotherMessage message)
    {
    }
}


public class NextStage : IHandleMessages<SendMessage>
{
   void Handle(SendMessage message)
   {
     var anotherMsg = new AnotherMessage() {SagaId=message.SagaId};
     bus.Send(anotherMsg);
   }
}

(顺便说一句,我使用的是Apache2.x( NServiceBus许可版)。

致以敬意,

伊利亚斯

EN

回答 1

Stack Overflow用户

发布于 2011-06-22 02:10:17

由于saga数据和bus.send的持久化将是同一事务的一部分,因此我看不到竞争条件的任何可能性。您是否100%确定在回复到达之前数据没有被删除?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6425811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档