Как применить фильтры с qpid proton к концентраторам событий Azure

Я пытаюсь применить фильтр с qpid-proton-0.17.0 к лазурным концентраторам событий. Вот мой код фильтра:

proton::value filter_value;
proton::codec::encoder enc(filter_value);
enc << proton::codec::start::described()
    << proton::symbol("apache.org:selector-filter:string")
    << proton::binary("amqp.annotation.x-opt-offset > '100'")
    << proton::codec::finish();
proton::source::filter_map map;
proton::symbol key("apache.org:selector-filter:string");
map.put(key, filter_value);
proton::receiver_options ro;
ro.source(source_options().filters(map));

Я не получаю никаких сообщений и, в конце концов, эта ошибка:

com.microsoft:timeout: The operation did not complete within the allocated time 
00:01:00 for object attach.

Если я не применяю фильтр, я получаю нефильтрованный поток сообщений. Мне удалось заставить фильтр работать с аналогичным кодом javascript в nodejs, используя библиотеку amqp10 от noodlefrenzy. Будем признательны за любую помощь в том, как заставить мой код qpid работать.

Новое примечание: согласно ответу Синь Чена я заменил строку выше

    << proton::binary("amqp.annotation.x-opt-offset > '100'")

с

    << "amqp.annotation.x-opt-offset > 100"

И это, кажется, работает.


person Greg Clinton    schedule 21.05.2017    source источник
comment
Значение фильтра должно быть строкой. Возможно, проблема связана с введенным вами значением proton::binary.   -  person Xin Chen    schedule 24.05.2017
comment
Да, это сработало, @Xin. Большое спасибо. Удаление proton::binary из приведенного выше кода устранило мою проблему. Может быть, вы можете опубликовать как ответ. Я использовал код примера selected_recv.cpp qpid, где они использовали двоичный код, но, по-видимому, концентратор событий azure делает это по-другому.   -  person Greg Clinton    schedule 25.05.2017
comment
@GregClinton Вы также можете отредактировать и написать исправленный код. Если вы удалили бинарник, то как вы передали условие?   -  person Mert Mertce    schedule 19.09.2017


Ответы (1)


Концентраторы событий Azure используют описанную строку в качестве фильтра для указания начальной позиции. Дескриптор — это символ «apache.org:selector-filter:string», а значение — строка. Дополнительные сведения можно найти на этой странице: https://github.com/Azure/amqpnetlite/blob/master/docs/articles/azure_eventhubs.md

person Xin Chen    schedule 26.05.2017
comment
Итак, как бы вы передали такой селектор в qpid? Установка селектора вроде: amqp.annotation.x-opt-offset › 1 и передача его в качестве селектора для создания потребителя, похоже, не работает. потребитель = session.createConsumer (очередь, селектор); - person Ekkelenkamp; 23.03.2020