Flo*_*etz 2 java testing rabbitmq qpid
我想为连接到RabbitMQ的某些组件设置一些本地测试。为此,一种解决方案似乎是QPID内存代理,并且在遵循这些说明时(仅使用当前版本的7.0.3而不是7.0.0)实际上非常有效。
对于Rabbit MQ,我删除了"AMQP_1_0"
协议,仅添加了qpid- broker-plugins-amqp-0-8-protocol
dependency。我也用替换Authenticationprovider
了PLAIN
。这足以使我的RabbitMQ
组件正常工作并通过该组件发送/接收消息Broker
。
但是问题是这条线...
"port" : "${qpid.amqp_port}",
Run Code Online (Sandbox Code Playgroud)
据我了解,这应该允许我通过在调用时设置此属性来定义代理正在侦听的端口systemLauncher.startup
。
attributes.put("qpid.amqp_port", 12345);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,并且代理总是在默认端口(5672,iirc)上侦听。显然,这对于自动化测试不是最佳选择,因此我正在寻找以下一种可能性(或更好的一种):
SystemLauncher
似乎没有提供任何查询方式。Apache Qpid Broker-J的SystemLauncher
支持SystemLauncherListeners
通过启动顺序在各个时间点得到通知。如果将代理配置为绑定到端口0,则会在运行时分配动态分配的端口。然后,您可以使用#afterStartup()
实现来确定绑定了哪个端口。以PortExtractingLauncherListener
(测试工具代码)为例。
在Broker-J的模型中,对象的属性和上下文变量之间存在区别。如果要替换,qpid.amqp_port
请提供一个上下文变量。您可以这样以编程方式像这样:
attributes.put("context", Collections.singletonMap("qpid.amqp_port", 0))
或者,因为上下文变量是Java系统属性中的默认值,例如JVM命令行上的 -Dqpid.amqp_port=0