【问题标题】:Filesystem based JMS broker implementation for testing用于测试的基于文件系统的 JMS 代理实现
【发布时间】:2012-11-19 04:44:22
【问题描述】:

我有一个 Java 应用程序,它从一个 JMS 队列中消费,进行一些处理,然后发送到一个输出队列。

在我进行测试时,为输出队列提供基于文件系统的 JMS 实现会非常方便;这样发送给它的任何消息都会被写入磁盘上的目录。

有人知道这是否存在吗?我考虑过切换到像 apache-camel 这样的集成框架,它具有基于文件的端点,但对于我现在需要的东西来说似乎有点过分了。我正在使用 activemq,是否可以配置嵌入式代理来执行此操作?

【问题讨论】:

    标签: jms activemq


    【解决方案1】:

    无论如何我都会选择 apache camel。它还为您节省了相当多的样板代码来连接到 activemq。如果您也已经在使用 spring,那么只需添加一个简单的 routebuilder 和一些 xml 配置。罐子本身相当小,因此它的开销很小,以换取很大的灵活性。

    【讨论】:

    • 不错的选择。无论如何,ActiveMQ 的标准发行版都预先配置了基本的 Camel 设置。
    【解决方案2】:

    我认为这种测试与 jms 相关的客户端代码的方法会变得非常复杂。如果您需要监视从您的应用程序发送哪些消息,请考虑使用 QueueBrowser。

    但是,接收消息的代码必须有某种副作用(否则就没有用处)。我会根据这些断言而不是检查消息队列。这应该会容易得多,并且很可能会产生更好的测试。

    【讨论】:

    • 我不确定我是否理解你的第二段,你能详细说明一下吗?只是为了增加一点色彩,这些消息的消费者目前不可用,由公司的另一个团队提供。
    • 我明白了。如果您想测试单独发送消息的代码(当然,这是一件非常有效的事情),我会设置一个进程内 AMQ 代理(通过提供像“vm://”这样的连接字符串test”到连接工厂)并在您的测试中注册一个消费者,它将接收到的所有消息放在一个列表中。然后,运行您的生产者代码并检查发送到的消息。由于 JMS 消息传递是异步运行的,您可能需要等待几毫秒才能检查消息。
    • 是的,我已经在使用嵌入式代理作为单元测试的一部分,以确保我的消息消费按预期工作。我的消息生产代码也有完整的单元测试代码覆盖率。我只是真的想要一种简单的方法让我的系统运行,使用消息,记录指标等,但生成文件而不是 JMS 消息,所以理论上我可以完全准备好,只需切换到真正的 JMS 队列准备好了。
    猜你喜欢
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2015-11-06
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多