跟踪已处理的jms消息

时间:2011-06-10 14:20:20

标签: java spring jms activemq

我正在使用ActiveMQ,Spring。

有什么方法可以跟踪所有已处理的消息。我必须跟踪所有消息的处理过程。我还想在稍后阶段查看这些已处理的消息。

  • 我应该使用数据库吗?
  • 是否有任何可以轻松完成此操作的好库
  • 我不想在数据库中为每种模型对象制作表格

3 个答案:

答案 0 :(得分:1)

通常,我建议您将消息记录和/或记录到数据库中。如果您只是想稍后查看消息,那么简单的日志记录就足够了。如果您需要通过UI进行事务性汇总/搜索,那么数据库就更好了。

但是,您也可以使用ActiveMQ虚拟目标实现所需的功能。这样,您可以将1个目的地转发到2个其他目的地。然后,您的应用可以在1个目的地上收听,并且该消息的副本将位于另一个目的地以供您查看。例如:

  <broker persistent="false" useJmx="false" xmlns="http://activemq.apache.org/schema/core">
    <destinationInterceptors>
      <virtualDestinationInterceptor>
        <virtualDestinations>
          <compositeQueue name="MY.QUEUE">
            <forwardTo>
              <queue physicalName="MY.QUEUE.PROCESS" />
              <topic physicalName="MY.QUEUE.REVIEW" />
            </forwardTo>
          </compositeQueue>
        </virtualDestinations>
      </virtualDestinationInterceptor>
    </destinationInterceptors>

  </broker>

将定义一个队列MY.QUEUE,其中每条消息最终都会以.PROCESS和.REVIEW队列结束。

答案 1 :(得分:1)

  1. 我会使用数据库。
  2. 也许你可以使用像Hibernate这样的ORM,但是JDBC或SpringTemplates可能会更好。
  3. 不是为每个模型对象创建单独的表,而是创建“消息”表并将不常见的部分序列化为有效负载blob(或文本)。然后,您可以使用实用程序对消息进行反序列化以便稍后查看(或回放)。

答案 2 :(得分:0)

卡尔蒂克,

这是一个很好的编程问题,但更多的是我应该编写什么问题,而不是“我该怎么做”这个问题。很难回答“我该怎么编程问题”,因为你应该编程的内容直接取决于你需要什么。充其量,我们只能猜测你真正需要的是什么。

如果您需要更新已处理的JMS消息,那么数据库将使其易于更新。如果您需要证明没有人更新“已记录”条目,那么数据库可能无法完成工作。

假设此日志用于查看仍需要完成的处理消息的速度非常慢。然后,只要搜索人员知道SQL,数据库就会提供简单的搜索。但是,如果日志更像是一个存档,那么数据库只会增加整个过程的开销,结构化文件就可以了。

在Java中,有用于编写和检索数据库的JDBC,它不是一个难以使用的API。然后,还有一些不错的日志框架,当然总有FileOutputStream。在不知道如何使用这个日志的情况下,很难确定哪种技术真的过度杀伤,同样也不可能知道哪种技术不够用。

返回并查看日志的使用方式,然后评估数据库提供的功能是否过度。

干杯, 编