Настоящая библиотека представляет собой обертку библиотеки AMQP-CPP с реализацией асинхронного ввода/вывода средствами Boost::asio.
Приложение, которому необходимо обмениваться сообщениями по протоколу AMQP, создает объект класса amqp::Connector настоящей библиотеки, содержащий все необходимое для взаимодействия с виртуальным хостом брокера AMQP. Если приложение взаимодействует с несколькими виртуальными хостами и/или брокерами, создается нужное число объектов. Далее amqp::Connector создает несколько объектов-приемопередатчиков, которые абстрагируют работу приложения с точками обмена (exchange point) протокола AMQP. С каждой точкой обмена связывается один канал AMQP, который может использоваться и как передачик (publisher), и как приемник (consumer) сообщений. Прием сообщений может выполняться как через именованную очередь, так и через очередь со случайным уникальным именем, генерируемым брокером.
На основные события, возникающие в цикле работы с брокером (установление или разрыв соединения, готовность/отключение приемопередатчика, поступление входящего сообщения и т.д.), приложение назначает функции обратного вызова. С их помощью реализуется логика работы с сообщениями AMQP.
Библиотека содержит класс amqp::ConnectionHandler, реализующий интерфейс ввода/вывода AMQP::ConnectionHandler библиотеки AMQP-CPP на основе средств асинхронного ввода/вывода библиотеки Boost::asio. Экземплярами этого класса владеют и управляют экземпляры amqp::Connector. Кроме того, в библиотеке имеются вспомогательные функции извлечения из AMQP-сообщений данных в формате JSON и формирования из таких объектов сообщений. Для работы с JSON используется библиотека RapidJSON.
Таким образом, amqpasio предоставляет приложениям законченное решение для организации межпрограммного взаимодействия посредством протокола AMQP на базе средств библиотек AMQP-CPP, boost::asio и RapidJSON.
В данный момент не поддерживаются:
- собственная обработка heartbeats (используется обработка по умолчанию из AMQP-CPP);
- точки обмена, по типу отличные от "topic";
- флаги при создании очередей (см. Transceiver::ExchangeCreationFlags) и публикации сообщений (не поддерживается флаг "immediate");
- дополнительные опции (таблицы) при создании очередей;
- транзакции при публикации сообщений;
- подтверждения для публикатора (publisher confirms).