我正在尝试为我的iOS应用程序编写一些内容,使用RMQClient
扫描rabbitmq服务器上的现有交换。到目前为止我想出了这个。
class AMQPExchangeScanner {
static func scan() {
let connection:RMQConnection = RMQConnection(uri: "amqp://user:user@abc.def.com:5672", delegate: RMQConnectionDelegateLogger())
connection.start()
for exchangeName in Foo.pastExchanges() {
let channel = connection.createChannel()
let exchange = channel.fanout(exchangeName, options: .passive)
"scan \(exchangeName) \(exchange)".print()
channel.close()
}
}
}
我不知道如何确定交换是否确实存在。 print()语句打印交换对象。我在控制台中得到了一大堆输出。我本来希望我能找回一个可选项,所以我可以做一些像
这样的事情if let exchange... {
}
但事实并非如此。如何以编程方式检查交换是否真实?或者得出那些错误?我是否需要自己的连接委托并且必须解析一堆文本?
答案 0 :(得分:0)
扫描现有广告交易平台的最佳方法是使用rabbitmq management HTTP API - 它位于/api/exchanges
下。
对于单个交换,您可以调用declare方法,相应地设置被动参数(引自here):
用于声明方法
此方法创建一个交换(如果它尚不存在),以及是否 交换存在,验证它是正确的和预期的 类。
用于被动位
如果已设置,服务器将回复Declare-Ok(如果已经交换) 存在具有相同名称,如果不存在则引发错误。
...
如果未设置且交换存在,则服务器必须检查现有交换是否具有类型,持久和参数字段的相同值。如果请求的交换匹配这些字段,服务器必须用Declare-Ok响应,如果没有,必须引发一个通道异常。