Двунаправленный REST API WSO2 CEP

Я использую wso2 cep 4.1. Я создал приемник для получения некоторых данных json из моего источника. Затем я обрабатываю эти данные внутри себя и должен дать ответ с дополнительными данными. Мой ответ должен быть через тот же момент, когда данные поступают в CEP. Это классический rest API. Возможно ли это и как я могу это сделать? Или мне нужен websocket (websocket-local) для аналогичных целей?


person Alex B    schedule 03.10.2016    source источник


Ответы (2)


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

  • Приемники событий. Приемники событий получают события, поступающие на CEP. WSO2 CEP по умолчанию поддерживает наиболее распространенные реализации адаптеров. Для конкретных случаев использования вы также можете подключить пользовательские адаптеры. Дополнительные сведения см. в разделе Настройка приемников событий.
  • Потоки событий. Потоки событий содержат уникальные наборы атрибутов определенных типов, которые обеспечивают структуру, на основе которой выбираются события, обрабатываемые соответствующим потоком событий. Потоки событий хранятся как определения потоков в файловой системе через хранилище определений потоков моста данных.
  • Процессоры событий: - Процессор событий обрабатывает фактическую обработку событий. Это основной блок обработки событий CEP. Он управляет различными планами выполнения и обрабатывает события на основе логики с помощью различных запросов Siddhi. Обработчик событий получает набор потоков событий от диспетчера потоков событий, обрабатывает их с помощью механизма Siddhi и инициирует новые события в разных потоках событий обратно в диспетчер потоков событий. Дополнительные сведения см. в разделе Создание автономного плана выполнения. .
  • Издатели событий Издатели событий: публикуют события во внешних системах и сохраняют данные в базах данных для будущего анализа. Как и приемники событий, этот компонент также имеет различные реализации адаптера. Наиболее распространенные из них доступны по умолчанию в CEP. Вы можете реализовать пользовательские адаптеры для конкретных случаев использования. Дополнительные сведения см. в разделе Настройка CEP для создания предупреждений. .

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

OOB CEP предоставляет адаптеры HTTP-приемника и HTTP-издателя [1-2], которые вы можете попробовать. Существуют некоторые ограничения, которые могут не подходить для вашего сценария. Вам необходимо реализовать свой собственный HTTP-приемник и издатель[3-4], которые делают то, что вы намеревались сделать.

Поскольку вам необходимо опубликовать ответ на различные конечные точки, вы можете добиться этого, определяя конечную точку REST API, учетные данные пользователя (если требуется) и глаголы HTTP, а также другую информацию, которая требуется для отправки сообщения в потоке событий [5] в качестве метаинформации. Затем эту информацию вы можете прочитать из самого потока и передать желаемому стороннему API по мере необходимости.

Мне нужен веб-сокет (websocket-local) для аналогичных целей?

Непонятно, что именно нужно делать. Пожалуйста, поднимите еще один вопрос и задайте его снова.

  1. https://docs.wso2.com/display/CEP410/HTTP+Event+Receiver
  2. https://docs.wso2.com/display/CEP410/HTTP+Event+Publisher
  3. https://docs.wso2.com/display/CEP410/Building+Custom+Event+Receivers
  4. https://docs.wso2.com/display/CEP410/Building+Custom+Event+Publishers
  5. https://docs.wso2.com/display/CEP410/Understanding+Event+Streams
person GPrathap    schedule 04.10.2016
comment
Привет @GPratap! Спасибо за объяснение! Можно ли создать службу REST через WSO2 API Manager или WSO2 ESB и направить сообщения в/из CEP для одного и того же ввода. Что-то вроде этого: 1) ввод в конечную точку REST API из стороннего приложения 2) ESB отправляет сообщение в CEP 3) CEP обрабатывает его 4) CEP возвращает обработанные данные в ESB 5) ESB отправляет сообщение в конечную точку REST API XXX (то же самое конечная точка как начальная) 6) стороннее приложение получает ответ от этого REST API. - person Alex B; 04.10.2016

Функция, которую вы ищете, не поставляется OOTB с CEP. Однако вы можете попробовать что-то похожее на приведенное ниже;

  1. Реализовать REST API. Вероятно, используется Apache CXF, поскольку зависимости CXF присутствуют на серверах WSO2 по умолчанию. Вы можете следить за это руководство, если вы используете подход, основанный на swagger, для разработки REST API.

  2. В этой настраиваемой реализации REST вам нужно прочитать HTTP-запрос, отправить его в CEP (шаг 3), дождаться вывода из CEP (шаг 4), а затем отправить эти данные обратно в виде HTTP-ответа внутри метода, который представляет вашу операцию.

  3. Чтобы отправить событие в CEP, вы можете использовать приемник событий WSO2. Создайте приемник на стороне CEP, а затем отправьте события приемнику, используя клиент DataPublisher. Убедитесь, что у вас есть то же определение потока, которое вы установили в приемнике CEP в методе DataPublisher.publish(), и массив объектов, который вы отправляете, соответствует этому определению. Кроме того, вам может потребоваться установить здесь параметры хранилища доверенных сертификатов и хранилища ключей.

  4. После успешной публикации событий вам необходимо заблокировать поток запросов, пока вы не получите ответ от CEP. Вы можете использовать объект Java, например CountDownLatch для этой цели.

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

EventStreamService eventStreamService = (EventStreamService) PrivilegedCarbonContext.getThreadLocalCarbonContext().getOSGiService(EventStreamService.class, null);

Надеюсь, это помогло.

person Grainier    schedule 04.10.2016