我正在尝试为连接到 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/