gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:04:15 25 4
gpt4 key购买 nike

我想为一些连接到 RabbitMQ 的组件设置一个小的本地测试。为此,一种解决方案似乎是 QPID In-Memory Broker,实际上在遵循 these instructions 时效果很好。 (只使用当前版本7.0.3而不是7.0.0)...

对于 Rabbit MQ,我删除了 "AMQP_1_0" 协议(protocol),只添加了 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)上监听。显然这不是自动化测试的最佳选择,因此我正在寻找以下可能性之一(或更好的可能性):

  1. 在属性中放置一个随机端口(我可以自己找到一个开放端口,没问题)或者...
  2. 告诉 QPID 使用随机(开放)端口 - 但我还需要知道实际使用了哪个端口,因为 SystemLauncher 似乎没有提供任何查询方式。

最佳答案

Apache Qpid Broker-J 的 SystemLauncher 支持 SystemLauncherListeners,它会在启动序列的不同时间点收到通知。如果您将 Broker 配置为绑定(bind)到端口 0,则将在运行时分配一个动态分配的端口。然后,您可以使用 #afterStartup() 实现来确定绑定(bind)了哪个端口。以 PortExtractingLauncherListener(测试工具代码)为例。

在 Broker-J 的模型中,object's attributes and context variables 之间有区别.如果您想为 qpid.amqp_port 提供替代,您可以通过提供上下文变量来实现。您可以像这样以编程方式这样做:

attributes.put("上下文", Collections.singletonMap("qpid.amqp_port", 0))

或者,由于上下文变量默认来自 Java 系统属性,就像在 JVM 命令行上这样 -Dqpid.amqp_port=0

关于java - 使用 Apache QPID 在本地测试 RabbitMQ - 随机端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49963910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com