RX против очередей сообщений, таких как rabbitmq или zeromq? [закрыто]

В стандартной библиотеке такой функции нет. Вы можете написать набор функций шаблона:

template <typename T1> void ParAssign(T1& Lhs_1, T1 const& Rhs1);
template <typename T1, typename T2> void ParAssign(T1& Lhs1, T2& Lhs2, T1 const& Rhs1, T2 const& Rhs2);
// etc.
ParAssign(a,b,
          b,a);

Это нетривиально, если есть псевдонимы, как в вашем примере подкачки.

24
задан Luciano 11 January 2014 в 10:29
поделиться

2 ответа

Стоит щелкнуть ссылку узнать больше на теге [system.reactive], мы поместили туда немало информации!

Из вступления вы можете видеть, что Rx не является технология очереди сообщений:

Reactive Extensions (Rx) - это библиотека для составления асинхронных и основанных на событиях программ с использованием наблюдаемых последовательностей и операторов запросов в стиле LINQ. System.Reactive - корневое пространство имен, используемое в библиотеке. Используя Rx, разработчики представляют асинхронные потоки данных, используя операторы LINQ, и параметризуют параллелизм в асинхронных потоках данных, используя планировщики. Проще говоря, Rx = Observables + LINQ + Schedulers.

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

Вы можете пойти дальше: так как Entity Framework превращает запросы IQueryable<T> в SQL, выполняемые непосредственно в базе данных, вы можете создавать провайдеров, которые превращают запросы Rx IQbservable<T> в собственные запросы - например, фильтр Where может использовать Собственная возможность фильтрации, которая существует во многих технологиях очереди сообщений, для непосредственного применения фильтров. Это довольно много работы, хотя и тяжелой.

Гораздо проще, и нередко видеть сообщения очереди сообщений, передаваемые в Rx Subject, так что входящие сообщения из очереди преобразуются в поток Rx для удобного использования на клиенте. Rx также широко используется в графических интерфейсах для работы с событиями на стороне клиента, такими как нажатия кнопок и изменения текстовых полей, чтобы значительно упростить традиционные сложные сценарии, такие как перетаскивание и автоматическое завершение текста с помощью асинхронных запросов к серверу. В лаборатории есть хорошие руки, освещающие более поздний сценарий здесь . Он был написан против раннего выпуска Rx, но все еще очень актуален.

Я рекомендую посмотреть на эту видеопрезентацию Барта де Смета для фантастического вступления: Curing Your Event обрабатывает блюз с помощью Reactive Extensions (Rx) - включая классическую демонстрацию Rx, которая записывает запрос в прямом эфире из Kinect, чтобы интерпретировать махнув рукой!

23
ответ дан Community 11 January 2014 в 10:29
поделиться

Может ли кто-нибудь объяснить различия между RX и этими другими очередями обмена сообщениями?

Rx - это просто абстракция над событиями (любое событие!). Получение сообщения из распределенной очереди является событием, и часто решениям ZeroMQ / RabbitMQ часто приходится использовать и комбинировать различные события довольно часто, что очень хорошо для Rx.

Очень часто Rx делает написание приложений ZeroMQ / RabbitMQ намного легче , чем было бы в противном случае:)

8
ответ дан Paul Betts 11 January 2014 в 10:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: