В чем разница между MQ (RabbitMQ, ActiveMQ) и сетевой библиотекой (ACE, Asio, libevent)?

В настоящее время мы планируем обновить наш продукт, чтобы использовать MQ (RabbitMQ или ActiveMQ) для передачи сообщений между сервером и клиентом. И теперь мы используем для этого сетевую библиотеку (evpp).

Поскольку я не использовал MQ раньше, поэтому, за исключением множества новых функций MQ, я не могу понять существенную разницу между ними и не знаю точно, когда и где мы должны использовать MQ или просто использовать сетевую библиотеку. Это хорошо.

И цель, которую мы хотим использовать MQ, заключается в том, что мы хотим решить проблему ненадежности связи, такую ​​как потеря сообщений или другие проблемы, вызванные нестабильной сетевой средой.

Надеюсь, что кто-то, знакомый с ними обоими, может освободить мое замешательство. Спасибо за аванс.


person Phymin    schedule 21.05.2020    source источник


Ответы (2)


Как и в любом сетевом программировании, когда клиент отправляет запрос серверу, сервер отвечает ответом. Но для этого должны быть соблюдены следующие условия

  1. Сервер должен быть запущен и работать
  2. Клиент должен иметь возможность установить какую-то связь между ними.
  3. Соединение не должно прерываться, пока сервер отправляет ответ клиенту или наоборот.

Но в случае очереди сообщений, что бы сервер ни хотел сообщить клиенту, сообщение помещается в очередь сообщений, т. е. отдельный сервер/экземпляр. Клиент прослушивает очередь сообщений и обрабатывает сообщение. При положительном подтверждении от клиента сообщение удаляется из очереди сообщений. Очевидно, сервер должен установить соединение, чтобы отправить сообщение в экземпляр очереди сообщений. Даже если клиент не работает, сообщение остается в очереди.

person bumblebee    schedule 21.05.2020
comment
Спасибо за ваш ответ, и из вашего объяснения я думаю, что MQ может убедиться в правильности сообщений в нестабильной сетевой среде, не так ли? - person Phymin; 22.05.2020
comment
Да, если клиент, подключенный к MQ, отключится, сообщение останется в MQ. - person bumblebee; 22.05.2020

Системы очередей сообщений (MQ, Qpid, RabbitMQ, Kafka и т. д.) — это системы более высокого уровня, специально созданные для надежной и гибкой обработки сообщений.

Библиотеки/фреймворки для сетевого программирования (ACE, asio и т. д.) являются полезными инструментами для создания систем очередей сообщений (и многих других типов).

Обратите внимание, что в случае с ACE, который включает в себя гораздо больше, чем просто сеть, вы можете использовать систему очередей сообщений, подобную приведенной выше, и управлять ею с помощью программы, которая также использует классы ACE для управления потоками, абстракции ОС, обработки событий и т. д.

person Steve Huston    schedule 21.05.2020
comment
Спасибо за ответ, теперь мне стало понятнее. - person Phymin; 22.05.2020
comment
Извините, но я могу только пометить ответ как принятый. И ваш ответ также очень полезен на более высоком уровне. Еще раз спасибо! - person Phymin; 25.05.2020