Использование реального мира очередей JMS/message? [закрытый]

Я хотел бы остановиться на 4 пунктах в принятом ответе, надеюсь, кто-то может объяснить, почему я не прав.

  1. Почему сокрытие зависимостей в вашем коде плохо? Уже есть десятки скрытых зависимостей (вызовы времени выполнения C, вызовы API OS, вызовы глобальных функций), и одноэлементные зависимости легко найти (поиск instance ()).

    «Создание чего-то глобального, чтобы избежать его распространения, является запахом кода». Почему бы не передать что-то, чтобы не сделать это одним запахом кода?

    Если вы пропускаете объект через 10 функций в стеке вызовов только для того, чтобы избежать одиночного перехода, это так здорово?

  2. Принцип единой ответственности: я думаю, что это немного расплывчато и зависит от вашего определения ответственности. Уместным будет вопрос: почему добавление этой конкретной «ответственности» к классу имеет значение?

  3. Почему передача объекта в класс делает его более тесно связанным чем использовать этот объект в качестве синглтона из класса?

  4. Почему он меняется, как долго длится состояние? Синглтоны могут быть созданы или уничтожены вручную, поэтому элемент управления все еще там, и вы можете сделать время жизни таким же, как было бы время жизни не-одиночного объекта.

Относительно юнит-тестов:

  • не все классы должны быть юнит-тестами
  • не все классы, которые должны быть юнит-тестами, должны изменить реализацию синглтона
  • если они действительно нуждаются в модульном тестировании и действительно нуждаются в изменении реализации, легко изменить класс с использования синглтона на передачу синглтона ему посредством внедрения зависимостей.
174
задан nos 24 June 2009 в 00:31
поделиться

9 ответов

JMS (ActiveMQ - это реализация брокера JMS) может использоваться как механизм, разрешающий асинхронную обработку запросов. Возможно, вы захотите сделать это, потому что запрос занимает много времени или потому, что фактический запрос может быть интересен нескольким сторонам. Другая причина его использования - позволить нескольким клиентам (потенциально написанным на разных языках) получать доступ к информации через JMS. ActiveMQ - хороший пример здесь, потому что вы можете использовать протокол STOMP для разрешения доступа из клиента C # / Java / Ruby.

Реальным примером является веб-приложение, которое используется для размещения заказа для конкретного клиента. В рамках размещения этого заказа (и сохранения его в базе данных) вы можете выполнить ряд дополнительных задач:

  • Сохраните заказ в какой-то сторонней серверной системе (такой как SAP).
  • Отправьте электронное письмо клиенту, чтобы сообщить ему, что его заказ размещен.

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

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

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

182
ответ дан 23 November 2019 в 20:29
поделиться

Используйте их постоянно для асинхронной обработки длительных операций. Веб-пользователь не захочет ждать обработки запроса более 5 секунд. Если у вас есть один, который работает дольше этого, один из вариантов - отправить запрос в очередь и немедленно отправить обратно URL-адрес, который пользователь может проверить, чтобы увидеть, когда задание будет завершено.

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

90
ответ дан 23 November 2019 в 20:29
поделиться

У меня было так много удивительных применений JMS:

  • Общение через веб-чат для обслуживания клиентов.

  • Ведение журнала отладки на сервере. Все серверы приложений транслировали сообщения отладки на разных уровнях. Затем можно запустить клиент JMS для отслеживания сообщений отладки. Конечно, я мог бы использовать что-то вроде syslog , но это дало мне всевозможные способы фильтрации вывода на основе контекстной информации (например, по имени сервера приложения, вызову API, уровню журнала, идентификатору пользователя, типу сообщения, и т.д...). Я также раскрасил вывод.

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

  • Предупреждение. Опять же, настройка аналогична описанной выше регистрации, отслеживанию конкретных ошибок и предупреждению людей с помощью различных средств (электронная почта, текстовое сообщение, IM, всплывающее окно Growl ...)

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

  • И обычные - очереди транзакций для отложенных действий, таких как выставление счетов, обработка заказов, подготовка, создание электронной почты ...

Это замечательно везде, где вы хотите гарантировать асинхронную доставку сообщений.

и оповещение людей с помощью различных средств (электронная почта, текстовые сообщения, мгновенные сообщения, всплывающее окно Growl ...)

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

  • И обычные - очереди транзакций для отложенных действий, таких как выставление счетов, обработка заказов, подготовка, создание электронной почты ...

  • Это замечательно везде, где вы хотите гарантировать асинхронную доставку сообщений.

    и оповещение людей с помощью различных средств (электронная почта, текстовые сообщения, мгновенные сообщения, всплывающее окно Growl ...)

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

  • И обычные - очереди транзакций для отложенных действий, таких как выставление счетов, обработка заказов, подготовка, создание электронной почты ...

  • Это замечательно везде, где вы хотите гарантировать асинхронную доставку сообщений.

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

  • И обычные - очереди транзакций для отложенных действий, таких как выставление счетов, обработка заказов, подготовка, создание электронной почты ...

  • Это замечательно везде, где вы хотите гарантировать асинхронную доставку сообщений.

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

  • И обычные - очереди транзакций для отложенных действий, таких как выставление счетов, обработка заказов, подготовка, создание электронной почты ...

  • Это замечательно везде, где вы хотите гарантировать асинхронную доставку сообщений.

    отлично подходит везде, где вы хотите гарантировать асинхронную доставку сообщений.

    отлично подходит везде, где вы хотите гарантировать асинхронную доставку сообщений.

    74
    ответ дан 23 November 2019 в 20:29
    поделиться

    Распределенные (а) синхронные вычисления.
    Примером из реальной жизни может служить инфраструктура уведомлений для всего приложения, которая отправляет письма заинтересованным сторонам в различные моменты в ходе использования приложения. Таким образом, приложение будет действовать как Производитель , создав объект Сообщение , поместив его в конкретную Очередь и продвинувшись вперед.
    Будет набор из потребителей , которые подпишутся на рассматриваемую очередь и позаботятся об обработке отправленного сообщения . Обратите внимание, что в ходе этой транзакции источники не связаны с логикой обработки данного сообщения .
    Платформы обмена сообщениями (ActiveMQ и подобные) выступают в качестве основы для облегчения таких транзакций Message , предоставляя MessageBroker s.

    .
    19
    ответ дан 23 November 2019 в 20:29
    поделиться

    Мы используем его, чтобы инициировать асинхронную обработку, которую мы не хотим прерывать или конфликтовать с существующей транзакцией.

    Например, скажем, у вас есть дорогая и очень важная часть По такой логике, как «покупайте товары», важной частью покупки будет «уведомить магазин товаров». Мы делаем вызов уведомления асинхронным, чтобы любая логика / обработка, задействованная в вызове уведомления, не блокировала и не конкурировала с ресурсами с помощью бизнес-логики покупки. Конечный результат, покупка завершена, пользователь доволен, мы получаем свои деньги, и поскольку доставка очереди гарантирована, магазин получает уведомление, как только он открывается или как только в очереди появляется новый товар.

    8
    ответ дан 23 November 2019 в 20:29
    поделиться

    Мы использовали обмен сообщениями для создания онлайн-котировок

    4
    ответ дан 23 November 2019 в 20:29
    поделиться

    Я использовал его для отправки внутридневных сделок между различными системами управления фондами. Если вы хотите узнать больше о том, что такое отличный технологический обмен сообщениями, я могу полностью порекомендовать книгу « Корпоративные шаблоны интеграции ». Есть несколько примеров JMS для таких вещей, как запрос / ответ и публикация / подписка.

    Обмен сообщениями - отличный инструмент для интеграции.

    10
    ответ дан 23 November 2019 в 20:29
    поделиться

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

    В моем случае я использовал JMS при разработке ориентированного на сообщения промежуточного программного обеспечения (MOM) в своей диссертации, где определенные типы объектно-ориентированных объектов генерируются на одной стороне как ваш запрос, а компилируются и выполняются на другой стороне. как ваш ответ.

    6
    ответ дан 23 November 2019 в 20:29
    поделиться

    Apache Camel, используемые в сочетании с ActiveMQ, отлично подходят для корпоративных интеграционных схем

    .
    5
    ответ дан 23 November 2019 в 20:29
    поделиться
    Другие вопросы по тегам:

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