【问题标题】:MSMQ - Message Queue Abstraction and PatternMSMQ - 消息队列抽象和模式
【发布时间】:2010-05-05 05:40:57
【问题描述】:

让我首先定义问题以及选择消息队列的原因。我有一个数据层,它将是事务性的,并且会大量插入,而不是在这些问题发生时尝试处理它们。我希望从头开始实现我的应用程序。

我决定通过使用 Microsoft 消息队列来解决这个问题,并在时间允许的情况下异步执行插入。但是我很快就遇到了问题。我执行的某些插入可能需要立即召回(即:检索)(想象这是针对 POS 系统的,如果您需要召回最后一笔交易会发生什么 - 一个仍未插入的交易)。

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

然而,这就是事情变得有点糟糕的地方......我已经弄清楚了如何取回消息等等(足够微不足道的问题),但我被卡住的地方是;如何创建查询我的消息队列的通用(或至少有些通用)方式?我可以最大限度地减少 SQL 查询和 MessageQueue 查询之间的重复。我考虑过使用 LINQ(但对该技术的了解非常有限),并且还尝试了使用 Predicates 的实现,但到目前为止还很臭。

对于这样的问题,我可以利用任何模式吗?我会以错误的方式解决这个问题吗?有没有人对我如何解决这个问题有任何自己的想法?有人甚至明白我在说什么吗? :-)

任何和所有的输入都将受到高度赞赏和认真考虑......

再次感谢。

对于任何有兴趣的人。我决定在 最后简单地缓存 在另一个地点进行交易和 按照预期和描述使用 MSMQ 下面。

【问题讨论】:

    标签: asp.net vb.net generics design-patterns message-queue


    【解决方案1】:

    如果队列上有大量消息,那么枚举这些消息将成为严重的瓶颈。 MSMQ 专为先进先出类型的访问而设计,任何不遵循该模式的东西都可能在性能方面给您带来极大的麻烦。

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

    【讨论】:

    • 您好 Codeka,感谢您的回复。你能定义“大型”吗?我的意图是为消息队列运行一个单独的服务器。这会以任何方式改变你的反应吗?最后,我正在描述的这个场景将主要运行的查询是非常简单的选择语句,类似于.. SELECT * FROM RegisterTransactionHeader INNER JOIN RegisterTransactionDetail .... 再次感谢
    • 队列的位置并没有真正影响它。它主要是枚举所有消息的行为。与任何与性能相关的事情一样,很难给出一个硬性的答案,但我会说如果你有超过 100 条左右的消息,那么你很可能会开始注意到它。您还必须考虑这样一个事实,即在您枚举消息时,其他进程将取消消息,这也会使情况复杂化。
    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 2012-12-28
    • 2017-06-29
    • 2012-03-27
    • 1970-01-01
    • 2011-05-01
    • 2012-02-12
    • 2012-09-23
    相关资源
    最近更新 更多