Asp.net MSMQ-消息队列抽象和模式

Asp.net MSMQ-消息队列抽象和模式,asp.net,vb.net,generics,design-patterns,message-queue,Asp.net,Vb.net,Generics,Design Patterns,Message Queue,让我首先定义问题以及选择messagequeue的原因。我有一个数据层,它将是事务性的,插入量非常大,而不是试图在出现这些问题时处理这些问题。我希望从根本上实现我的应用程序,并牢记这一点 我决定使用Microsoft消息队列解决这个问题,并在时间允许的情况下异步执行插入。然而,我很快就遇到了一个问题。我执行的某些插入操作可能需要立即调用(即:检索)(假设这是针对POS系统的,如果您需要调用最后一个事务(尚未插入的事务),会发生什么情况) 我决定解决这个问题的方法是将MessageQueue抽象出

让我首先定义问题以及选择messagequeue的原因。我有一个数据层,它将是事务性的,插入量非常大,而不是试图在出现这些问题时处理这些问题。我希望从根本上实现我的应用程序,并牢记这一点

我决定使用Microsoft消息队列解决这个问题,并在时间允许的情况下异步执行插入。然而,我很快就遇到了一个问题。我执行的某些插入操作可能需要立即调用(即:检索)(假设这是针对POS系统的,如果您需要调用最后一个事务(尚未插入的事务),会发生什么情况)

我决定解决这个问题的方法是将MessageQueue抽象出来,并将其合并到我的数据访问层中,从而产生一种错觉,即一组数据被返回给数据层的用户(我已经考虑了在这种情况下发生的其他问题(即:基本上是脏读等)并已得出结论(出于我的目的,我可以控制这些问题)

然而这就是事情变得有点糟糕的地方。。。我已经想出了如何把这些信息取回的办法,这是一个非常琐碎的问题,但我陷入了困境;如何创建查询消息队列的通用(或至少有点通用)方法?在这里,我可以最小化SQL查询和MessageQueue查询之间的重复。我曾考虑过使用LINQ(但对该技术的理解非常有限),还尝试过使用谓词实现,到目前为止,这些谓词相当难闻

对于这样的问题,有什么模式可以利用吗?我走错方向了吗?有没有人对我如何解决这个问题有自己的想法?有人知道我在说什么吗?:-)

我们将非常感谢并认真考虑您的任何意见

再次感谢

对任何感兴趣的人。我决定加入 结束时,只需缓存 在另一地点的交易,以及 按照预期和说明使用MSMQ 下面


如果队列上有大量消息,那么枚举这些消息将成为一个严重的瓶颈。MSMQ是为先进先出的访问方式而设计的,任何不遵循这种模式的东西都会在性能方面给你带来很多麻烦


答案在很大程度上取决于您将要执行的查询的种类,但答案可能是某种无sql数据库(CouchDB或BerkeleyDB等)

如果队列上有大量消息,那么枚举这些消息将成为一个严重的瓶颈。MSMQ是为先进先出的访问方式而设计的,任何不遵循这种模式的东西都会在性能方面给你带来很多麻烦


答案在很大程度上取决于您将要执行的查询类型,但答案可能是某种无sql数据库(CouchDB或BerkeleyDB等)

Hi Codeka,感谢您的回复。你能给“大鱼”下个定义吗?我的目的是为messagequeue运行一个单独的服务器。这会改变你的反应吗?最后,我描述的这个场景将主要运行的查询是非常简单的select语句。。从RegisterTransactionHeader内部联接RegisterTransactionDetail中选择*。。。。再次感谢,队列的位置并不会真正影响它。这主要是列举所有消息的行为。与任何与性能相关的问题一样,很难给出一个明确而快速的答案,但我想说的是,如果你有超过100条左右的消息,那么你很可能会开始注意到它。您还必须考虑到这样一个事实:当您枚举消息时,其他进程将删除消息,这也会使情况变得复杂。嗨,Codeka,谢谢您的回复。你能给“大鱼”下个定义吗?我的目的是为messagequeue运行一个单独的服务器。这会改变你的反应吗?最后,我描述的这个场景将主要运行的查询是非常简单的select语句。。从RegisterTransactionHeader内部联接RegisterTransactionDetail中选择*。。。。再次感谢,队列的位置并不会真正影响它。这主要是列举所有消息的行为。与任何与性能相关的问题一样,很难给出一个明确而快速的答案,但我想说的是,如果你有超过100条左右的消息,那么你很可能会开始注意到它。您还必须考虑这样一个事实,即在枚举消息时,其他进程将删除消息,这也会使情况变得复杂。