使用 Apache QPID 在本地测试 RabbitMQ - 随机端口
Posted
技术标签:
【中文标题】使用 Apache QPID 在本地测试 RabbitMQ - 随机端口【英文标题】:Testing RabbitMQ locally with Apache QPID - random port 【发布时间】:2018-10-02 11:39:09 【问题描述】:我想为连接到 RabbitMQ 的一些组件设置一个小本地测试。为此,一种解决方案似乎是 QPID In-Memory Broker,实际上在关注these instructions 时效果很好(仅使用当前版本的 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,iirc)上侦听。显然这对于自动化测试来说不是最优的,所以我正在寻找以下一种可能性(或更好的一种):
-
在属性中放一个随机端口(我自己可以找到一个开放的端口,没问题)或者...
告诉 QPID 使用随机(开放)端口 - 但我还需要知道实际使用的是哪个端口,因为
SystemLauncher
似乎没有提供任何查询方式。
【问题讨论】:
嗨弗洛里安!看来我的情况非常相似。我在这里描述了它***.com/questions/51345844/…。我怀疑我错误地使用了 qpid bloker。你能看看我的问题吗? 【参考方案1】:Apache Qpid Broker-J 的SystemLauncher
支持SystemLauncherListeners
,它会在启动序列的各个点得到通知。如果将 Broker 配置为绑定到端口 0,则会在运行时分配动态分配的端口。然后,您可以使用#afterStartup()
实现来确定绑定了哪个端口。以PortExtractingLauncherListener
(测试工具代码)为例进行学习。
在 Broker-J 的模型中,object's attributes and context variables 之间存在区别。如果你想为qpid.amqp_port
提供一个替换,你可以通过提供一个上下文变量来做到这一点。你可以这样编程:
attributes.put("context", Collections.singletonMap("qpid.amqp_port", 0))
或者,因为上下文变量是 Java 系统属性中的默认变量,就像 JVM 命令行中的这样 -Dqpid.amqp_port=0
【讨论】:
以上是关于使用 Apache QPID 在本地测试 RabbitMQ - 随机端口的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring、ActiveMQ 和 Qpid 进行集成测试