从iOS扫描兔子交换

时间:2016-10-25 18:39:29

标签: rabbitmq rmqclient

我正在尝试为我的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... {
}

但事实并非如此。如何以编程方式检查交换是否真实?或者得出那些错误?我是否需要自己的连接委托并且必须解析一堆文本?

1 个答案:

答案 0 :(得分:0)

扫描现有广告交易平台的最佳方法是使用rabbitmq management HTTP API - 它位于/api/exchanges下。

对于单个交换,您可以调用declare方法,相应地设置被动参数(引自here):

  • 用于声明方法

      

    此方法创建一个交换(如果它尚不存在),以及是否   交换存在,验证它是正确的和预期的   类。

  • 用于被动位

      

    如果已设置,服务器将回复Declare-Ok(如果已经交换)   存在具有相同名称,如果不存在则引发错误。   
    ...
      如果未设置且交换存在,则服务器必须检查现有交换是否具有类型,持久和参数字段的相同值。如果请求的交换匹配这些字段,服务器必须用Declare-Ok响应,如果没有,必须引发一个通道异常。