2011-06-10 139 views
2

我正在使用ActiveMQ,Spring。跟踪处理的jms消息

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

  • 我应该使用数据库吗?
  • 有没有什么好的库,可以使这种操作简便
  • 我不想让表数据库中每一种模型对象的
+1

你需要有人来提供答案提供更多的细节。这听起来像某种类型的审计是你想要的。 'Keep Track'非常模糊。您可以将消息放入日志中。您还可以通过在每个处理阶段将有效负载或整个消息序列化到数据库字段来避免大量的数据库表。 – nsfyn55 2011-06-10 14:27:49

回答

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和。回顾队列结束。

+0

我能读取实现的所有消息吗? – Kartik 2011-06-10 14:40:52

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

卡尔蒂克,

这是一个良好的编程问题,但它更多的应该怎么计划的问题,而不是“我怎样才能做到这一点”的问题。很难回答“我应该编程的问题是什么”,因为你应该编程的东西直接取决于你需要的东西。充其量,我们只能猜测你真正需要什么。

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

假设这个日志用于查看哪些非常缓慢的进程消息仍然需要完成。然后,数据库将提供简单的搜索,只要搜索者知道SQL。但是,如果日志更多是归档文件,那么数据库只会增加整个流程的开销,结构化文件将会执行。

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

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

干杯, 埃德