Подходит ли Reactive Extensions для автобуса?

Я немного раньше использовал Rx для создания шины событий (например, CQRS/ES) в одном приложении, и она, кажется, отлично работает. Тем не менее, после изучения множества различных сред Event Sourcing, я не видел, чтобы Rx использовался один раз. Похоже, что это действительно хорошо подходит в отличие от диспетчера, основанного на отражении / контейнере, но, возможно, я кое-что упускаю Я бы предпочел не тратить кучу времени на что-то, что демонстрирует 3 месяца. Есть ли причина, по которой Rx не подходит?

Спасибо эрик

4 ответа

Решение

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

Область, в которой вы можете бороться в будущем, - это если ваши системы выходят за рамки одного приложения. Rx очень прост в одном приложении, но требует определенных усилий, как только вам нужно добавить "инфраструктуру" между вашими приложениями. Не то чтобы это не сработало! Это так, как вы в разных источниках для вашего Subject а также IObservable случаи - это просто необходимо сделать вручную в некоторых случаях, в то время как другие фреймворки "источник событий" (что вы имели в виду?) могут иметь больший диапазон внешних "адаптеров".

О том, что Rx используется таким образом в целом (то есть в Интернете). Во-первых, помните, что есть много других платформ, кроме.NET, и Rx не будет отображаться ни на одной из них. Реактивный стиль, возможно, под другим именем.

Во-вторых, вы не одиноки. Включая кого-то, кому так нравится Rx для CQRS, они хотят сделать это в Scala и JVM!

Вот пример сообщения шины в Rx

Если вы хотите использовать RX между двумя процессами, проверьте:

  • https://github.com/NetMQ/NetMQ.ReactiveExtensions. Это оболочка RX, которая использует ZeroMQ для передачи сообщений по сети.
  • Обвс.
  • Любая RX-оболочка поверх Кафки.
  • Любая оболочка RX поверх любой системы обмена сообщениями между процессами, такой как RabbitMQ.

Все эти библиотеки делают одно и то же: они реализуют интерфейсы IObservable и IObserver от Microsoft.

Если вы хотите использовать шину In-Memory, которая поддерживает Rx в.NET, вам следует проверить MemBus.

Альтернативой является использование MessageBus от ReactiveUI. Но поскольку он не поставляется в выделенной библиотеке, вам придется установить всю библиотеку ReactiveUI, которая имеет смысл только в приложении WPF, а не в устаревших проектах WinForms.

Другие вопросы по тегам