3

是否有任何用 Java 编写的简单 AMQP 服务器/代理实现?

我需要将它用于本地集成测试。我想从ant/maven开始,不需要集群、持久化、性能等任何特性。只是一个模拟的类似 RabbitMQ 的实例,没有安装(就像 maven pom 的依赖项)和配置。

4

3 回答 3

3

我想说编写集成测试/端到端测试/自动化用户验收测试来测试整个应用程序是完全合法的,包括在 MQ 中完成的所有事情。您应该明智地选择触发类似这样的测试用例,因为它会大大减慢测试的反馈循环。

org.apache.qpid,您可以简单地将其作为 mvn/gradle (mvn central)依赖项包含在您的应用程序中(gradle 示例):

testCompile 'org.apache.qpid:qpid-broker:6.0.1'

然后添加一个Rule包含 a ExternalResource,在您的测试之前启动代理,有点类似于这个相当简单的设置:

@Rule
private static final ExternalResource embeddedAMQPBroker = new ExternalResource() {
    Broker broker;

    @Override
    protected void before() throws Throwable {
        BrokerOptions brokerOptions = new BrokerOptions();
        brokerOptions.setConfigProperty("qpid.amqp_port", "55672");
        broker = new Broker();
        broker.startup(brokerOptions);
    }

    @Override
    protected void after() {
        broker.shutdown();
    }
};

未经测试,因为对我来说这不起作用,因为我所有的应用程序都包含 Jetty 9 并且 QPID(仍然)需要 Jetty<9。

于 2016-04-01T22:55:09.030 回答
1

您正在寻找的是 AMQP 模拟对象。我真的不知道任何东西,并且怀疑你会找到现成的东西。
如果您使用 JUnit 作为测试,那么您就是在进行 UNIT 测试。单元测试不同于集成测试,并且不包括对队列的实际读/写。
也许在这里您可以重组您的测试甚至代码以包含除队列的读/写之外的所有内容?
另一种选择是,如果您已将 AMQP 包装到其他类中以实现可移植性,则只需模拟该对象。

于 2010-04-25T22:52:57.323 回答
1

在 2016 年发布我的答案后,我最近注意到了一个新选项:

RabbitMQ Mock ( https://github.com/fridujo/rabbitmq-mock ) 项目服务于确切目的,并且重量更轻。它仍然是一个非常年轻的项目(仅在 2018 年 5 月开始),但我自己能够将它用于集成测试。

为了验证模拟像“真实的东西”一样工作,我首先针对 RabbitMQ 实例运行我的代码,然后切换到模拟。

于 2018-10-18T12:22:08.470 回答