我正在使用ActiveMQ,Spring。
有什么方法可以跟踪所有已处理的消息。我必须跟踪所有消息的处理过程。我还想在稍后阶段查看这些已处理的消息。
答案 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)
答案 2 :(得分:0)
卡尔蒂克,
这是一个很好的编程问题,但更多的是我应该编写什么问题,而不是“我该怎么做”这个问题。很难回答“我该怎么编程问题”,因为你应该编程的内容直接取决于你需要什么。充其量,我们只能猜测你真正需要的是什么。
如果您需要更新已处理的JMS消息,那么数据库将使其易于更新。如果您需要证明没有人更新“已记录”条目,那么数据库可能无法完成工作。
假设此日志用于查看仍需要完成的处理消息的速度非常慢。然后,只要搜索人员知道SQL,数据库就会提供简单的搜索。但是,如果日志更像是一个存档,那么数据库只会增加整个过程的开销,结构化文件就可以了。
在Java中,有用于编写和检索数据库的JDBC,它不是一个难以使用的API。然后,还有一些不错的日志框架,当然总有FileOutputStream。在不知道如何使用这个日志的情况下,很难确定哪种技术真的过度杀伤,同样也不可能知道哪种技术不够用。
返回并查看日志的使用方式,然后评估数据库提供的功能是否过度。
干杯, 编