java - 嵌入式 AMQP Java 代理

标签 java rabbitmq automated-tests integration-testing amqp

我正在尝试为连接到 RabbitMQ 代理的 Scala/Java 应用程序创建集成测试。为了实现这一点,我想要一个嵌入式代理,它会在每次测试之前启动和停止说 AMQP。最初我试图将 ActiveMQ 作为带有 AMQP 的嵌入式代理引入,但是该应用程序使用 RabbitMQ,因此只支持 AMQP 0.9.3 版,而 ActiveMQ 需要 AMQP 1.0 版。

我可以使用其他嵌入式代理来代替 ActiveMQ 吗?

最佳答案

一个完全在内存中的解决方案。根据需要替换 spring.* 属性。

<dependency>
  <groupId>org.apache.qpid</groupId>
  <artifactId>qpid-broker</artifactId>
  <version>6.1.1</version>
  <scope>test</scope>
</dependency>
public class EmbeddedBroker {
  public void start() {
    Broker broker = new Broker();
    BrokerOptions brokerOptions = new BrokerOptions();
    brokerOptions.setConfigProperty("qpid.amqp_port", environment.getProperty("spring.rabbitmq.port"));
    brokerOptions.setConfigProperty("qpid.broker.defaultPreferenceStoreAttributes", "{\"type\": \"Noop\"}");
    brokerOptions.setConfigProperty("qpid.vhost", environment.getProperty("spring.rabbitmq.virtual-host"));
    brokerOptions.setConfigurationStoreType("Memory");
    brokerOptions.setStartupLoggedToSystemOut(false);
    broker.startup(brokerOptions);
  }
}

添加 initial-config.json 作为资源:

{
  "name": "Embedded Test Broker",
  "modelVersion": "6.1",
  "authenticationproviders" : [{
    "name": "password",
    "type": "Plain",
    "secureOnlyMechanisms": [],
    "users": [{"name": "guest", "password": "guest", "type": "managed"}]
  }],
  "ports": [{
    "name": "AMQP",
    "port": "${qpid.amqp_port}",
    "authenticationProvider": "password",
    "protocols": [ "AMQP_0_9_1" ],
    "transports": [ "TCP" ],
    "virtualhostaliases": [{
      "name": "${qpid.vhost}",
      "type": "nameAlias"
    }]
  }],
  "virtualhostnodes" : [{
    "name": "${qpid.vhost}",
    "type": "Memory",
    "virtualHostInitialConfiguration": "{ \"type\": \"Memory\" }"
  }]
}

关于java - 嵌入式 AMQP Java 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30918557/

相关文章:

java - 用户单击通知时如何启动 Activity ?

c# - 我应该如何在 RabbitMQ header 中传递字符串值

testing - 无法在 Sahi 中生成 junit 报告

testing - 如何自动测试离线模式是否在 Web 应用程序中工作

automated-tests - 通过 Octopus Tentacle 编码的 UI 自动化测试用例

java - 错误 :Exception in thread "main" java. lang.ArrayIndexOutOfBoundsException:0

java - 如何在 Zookeeper/Curator 中进行 upsert?

java - 如何获取 Windows 版 IcedTea 浏览器插件(OpenJDK 浏览器 java 插件)?

rabbitmq - RabbitMQ 是否保证已发布消息确认传送回客户端的顺序?

c# - RabbitMQ C# API 中的消息接收事件