使用Apache QPID在本地测试RabbitMQ - 随机端口

3
我想为一些连接到RabbitMQ的组件设置一个本地测试。为此,一种解决方案似乎是使用QPID In-Memory Broker,当按照这些说明(只使用当前版本7.0.3而不是7.0.0)操作时,实际上它可以很好地工作...
对于Rabbit MQ,我删除了"AMQP_1_0"协议,只添加了qpid-broker-plugins-amqp-0-8-protocol依赖项。同时,我用PLAIN替换了Authenticationprovider。这足以让我的RabbitMQ组件工作,并通过该Broker发送/接收消息。
但问题是这一行...
"port" : "${qpid.amqp_port}",

据我理解,这应该允许我在调用systemLauncher.startup时通过设置此属性来定义代理监听的端口。
attributes.put("qpid.amqp_port", 12345);

很不幸,这并不起作用,Broker总是侦听默认端口(5672,如果我没记错的话)。显然,这对于自动化测试来说并不理想,因此我正在寻找以下可能性(或更好的可能性):
1. 在属性中放置一个随机端口(我可以自己找到一个空闲端口,没有问题)或... 2. 告诉QPID使用随机(开放)端口-但是我还需要知道实际使用的端口,因为SystemLauncher似乎没有提供任何查询的方法。

嗨,弗洛里安!看起来我有一个非常相似的情况。我在这里描述了它 https://stackoverflow.com/questions/51345844/integration-tests-with-rabbitmq。我怀疑我正在错误地使用qpid bloker。你能看一下我的问题吗? - user1053031
1个回答

9
Apache Qpid Broker-J的SystemLauncher支持SystemLauncherListeners,它们会在启动序列的各个点通知。如果您将Broker配置为绑定到端口0,则会在运行时分配动态分配的端口。然后,您可以使用#afterStartup()实现来确定已绑定的端口。请参考PortExtractingLauncherListener(测试工具代码)作为示例。
在Broker-J的模型中,对象属性和上下文变量之间有区别。如果要为qpid.amqp_port提供替换,可以通过提供上下文变量来完成。您可以像这样以编程方式完成此操作:
attributes.put("context", Collections.singletonMap("qpid.amqp_port", 0))
或者,由于上下文变量是从Java系统属性默认设置的,因此可以在JVM命令行上像这样设置:-Dqpid.amqp_port=0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接