WSO2 CEP双向REST API

时间:2016-10-03 12:49:58

标签: rest websocket wso2 complex-event-processing wso2cep

我正在使用wso2 cep 4.1 我创建了接收器以从我的源中捕获一些json数据。然后我在内部处理这些数据,并应该给响应提供额外的数据。我的回答应该与数据进入CEP的时间相同。这是经典的休息API。它有可能,我该怎么做? 或者,我需要websocket(websocket-local)用于类似目的?

2 个答案:

答案 0 :(得分:1)

希望您仍在尝试了解WSO2 CEP的功能。在解决您的问题之前,让我解释一下CEP的基本概述。如果你看下面的图表,你将了解在高层次下发生的事情。 enter image description here。我将解释这些组件在事件处理的上下文中应该做些什么。

  • 活动接收者: - 事件接收器接收进入CEP的事件。 WSO2 CEP默认支持最常见的适配器实现。对于特定用例,您还可以插入自定义适配器。有关详细信息,请参阅Configuring Event Receivers
  • 活动流: - 事件流包含特定类型的唯一属性集,这些属性提供基于其选择由相关事件流处理的事件的结构。事件流通过数据桥流定义存储作为流定义存储在文件系统中。
  • 活动处理器: - 事件处理器处理实际事件处理。它是CEP的核心事件处理单元。它在不同的Siddhi查询的帮助下管理不同的执行计划并基于逻辑处理事件。事件处理器从事件流管理器获取一组事件流,使用Siddhi引擎处理它们,并将不同事件流上的新事件触发回事件流管理器。有关详细信息,请参阅Creating a Standalone Execution Plan
  • 活动发布商 事件发布者: - 将事件发布到外部系统并将数据存储到数据库以供将来分析。与事件接收器一样,该组件也具有不同的适配器实现。最常见的是在CEP中默认可用。您可以为特定用例实现自定义适配器。有关详细信息,请参阅Configuring CEP to Create Alerts

根据您的要求,您应该有HTTP接收器以及HTTP发布者,接收者从第三方API接收请求并将消息传递给事件处理器,以便执行一些预定义的任务。这可能与几个事件流和执行计划。处理完成后,可以使用事件发布者将结果发布到所需的第三方API。

OOB CEP提供HTTP接收器和HTTP发布者适配器[1-2],您可以尝试它。有一些限制可能不适合您的场景。您需要实现自己的自定义HTTP接收器和发布者[3-4],它可以完成您的预期工作。

由于您需要发布对差异端点的响应,您可以实现此定义REST API端点,用户凭据(如果需要)和HTTP谓词以及需要在事件流[5]中作为元发送消息的其他信息信息。然后,您可以从流本身读取该信息,并根据需要推送到所需的第三方API。

  

出于类似目的,我需要websocket(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

答案 1 :(得分:0)

您正在寻找的功能并非来自OEPB与CEP。但是,您可以尝试类似下面的内容;​​

  1. 实施REST API。可能使用Apache CXF,因为默认情况下,WSO2服务器中存在CXF依赖项。如果您使用基于swagger的方法来开发REST API,则可以关注this guide

  2. 在该自定义REST实现中,您需要读取HTTP请求,将其发送到CEP(步骤3),等待CEP的输出(步骤4),然后将该详细信息作为HTTP响应发送回来表示您的操作的方法。

  3. 要向CEP发送活动,您可以使用WSO2 Event receiver。在CEP侧创建接收器,然后使用DataPublisher client将事件发送到接收器。确保您具有在DataPublisher.publish()方法中的CEP接收器中设置的相同流定义,并且您发送的对象数组遵循该定义。此外,您可能需要在此处设置truststore和keystore参数。

  4. 成功发布事件后,您需要阻止请求线程,直到您收到CEP的回复。为此,您可以使用CountDownLatch之类的java对象。

  5. 要接收响应,您需要使用EventStreamService消耗事件。为此,您需要为EventStreamService实现WSO2EventConsumersubscribe。成功订阅后,您的活动消费者中提到的流ID的事件将被转发到您的消费者的接收方法。从那里,您可以提取结果,取消阻止初始请求线程并返回这些结果。要从您的网络应用中访问EventStreamService,您可以使用下面的代码段。

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

    希望这会有所帮助。