【问题标题】:JMS architectural problem?JMS 架构问题?
【发布时间】:2010-12-02 05:15:22
【问题描述】:

您好,

在我正在处理的应用程序中,我有一个长期运行的过程(DNA 分析)。用户可以发送请求,我正在考虑将请求排队到 JMS 队列中,然后相应地处理队列中的请求。然后,将结果通过电子邮件发送给特定用户。

但是,管理员应该能够更改请求的顺序/优先级。我想知道是否可以更改 JMS 队列的顺序。我可以使用什么技术?我可以为此使用 ActiveMQ 吗?

PS:这个“DNA 分析”过程是一个通过 JNI 访问的资源匮乏过程。一次只能运行一个(或有限的)进程。

【问题讨论】:

  • 您所描述的机制通常称为“批处理”。也许这个额外的关键字可以帮助您找到一些东西。我猜网格社区有适合你的东西。如果只需要维护一个队列,也许 JMS 有点矫枉过正,任何持久化后端都可以?
  • 是的,任何持久性后端都可以,但我希望使用基于 Spring 的开发。 Spring JMS,Hibernate 用于持久性。Wicket 用于视图层。

标签: java jms message-queue


【解决方案1】:

下面是一些想到的想法:

  • AFAIK,JMS 消息的正文是不可变的,因此如果您想修改正文的内容,您必须使用 JMS 消息的修改版本并将其重新发送到队列中。

  • 另一种选择是在 JMS 客户端级别实施某种过滤,为管理员提供一种控制下一条要使用的消息的方法。

  • 您可以使用 JMS 消息来创建 Quartz 作业并管理 Quartz 作业队列(在这种情况下,您还需要 JMS 吗?)。

【讨论】:

    【解决方案2】:

    如果您的进程长时间运行(并且您没有任何其他适合消息传递域的要求),您可以简单地轮询数据库表以查找新作业(按优先级排序)。 Spring JDBC 抽象应该足以让您入门。如果您使用的是 Oracle DBMS,您可以通过订阅、使用触发器和 AQ 来替换轮询 - 这也可以在普通 SQL 中完成。

    如果没有其他要求,您将不需要 ORM 或 JMS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 2011-02-14
      • 2012-11-25
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多