NServicebus时间敏感的拍卖实施

时间:2011-09-06 17:24:54

标签: nservicebus

我们正在使用NServicebus来设计一个必须解决拍卖场景的系统:我们希望向可以对某个项目出价的一组公司发送消息。在我们收到所有出价后,我们要将商品发送给出价最高者。

我们最初认为这种情况非常适合NServicebus:Pub / sub用于发送消息(例如BidOnItem或ItemAvailable),消息处理程序为每个感兴趣的公司订阅该消息以及用于存储不同出价的saga我们收到了,我们已经完成了。

在正常拍卖中,我们可以在5分钟设置超时,然后根据我们收到的最高价格决定谁获得该项目。我们没有那么奢侈。我们遇到的问题是我们的特定情况有一个棘手的,不可协商的业务要求:拍卖对时间非常敏感。秒钟很重要。我们想做的是在所有公司做出回应后立即决定谁获得该项目。通常这会在几秒钟内发生。我们想要决定第二个所有订阅者都做出了回应。显然我们还会实现超时,但这将是例外而不是规则。如果我们想确定每个人是否都回复了,我们需要在订阅BidOnItem消息的所有端点上的所有处理程序列表。似乎NServicebus API不提供此信息。

我们必须实现一些未来的要求,并以数据丰富和批准/拒绝决策为中心,这将从了解发布/订阅频道上的所有处理程序是否都已响应中获益。我知道这个请求/回复的内容是NServicebus由于它引起的耦合而不鼓励但这个要求感觉就像是很多在核心总线基础设施之外很难实现的过程的基础。从这个意义上讲,它感觉很像NServicebus提供的Saga.ReplyToOriginator。

解决这个问题的“NServicebus方式”是什么?

1 个答案:

答案 0 :(得分:2)

Pub / Sub通常不是这些拍卖场景的方式。如果你的传奇会对你的投标人做出回应/回应怎么办?

S:OnAuctionCreated(带有投标人名单,或者您可以在某处获取) 事件中的foreach竞标者。竞标者   -bus.Send(RequestBidFrom(投标者)) 的setTimeout(X)

S:OnBidResponse   bids.Add(response.Bidder,response.Bid)

if(bids.Count()== Data.TotalBidders)     CompleteAuction();

S:OnTimeout   CompleteAuction()