我正在使用wso2 cep 4.1 我创建了接收器以从我的源中捕获一些json数据。然后我在内部处理这些数据,并应该给响应提供额外的数据。我的回答应该与数据进入CEP的时间相同。这是经典的休息API。它有可能,我该怎么做? 或者,我需要websocket(websocket-local)用于类似目的?
答案 0 :(得分:1)
希望您仍在尝试了解WSO2 CEP的功能。在解决您的问题之前,让我解释一下CEP的基本概述。如果你看下面的图表,你将了解在高层次下发生的事情。 。我将解释这些组件在事件处理的上下文中应该做些什么。
根据您的要求,您应该有HTTP接收器以及HTTP发布者,接收者从第三方API接收请求并将消息传递给事件处理器,以便执行一些预定义的任务。这可能与几个事件流和执行计划。处理完成后,可以使用事件发布者将结果发布到所需的第三方API。
OOB CEP提供HTTP接收器和HTTP发布者适配器[1-2],您可以尝试它。有一些限制可能不适合您的场景。您需要实现自己的自定义HTTP接收器和发布者[3-4],它可以完成您的预期工作。
由于您需要发布对差异端点的响应,您可以实现此定义REST API端点,用户凭据(如果需要)和HTTP谓词以及需要在事件流[5]中作为元发送消息的其他信息信息。然后,您可以从流本身读取该信息,并根据需要推送到所需的第三方API。
出于类似目的,我需要websocket(websocket-local)吗?
目前尚不清楚到底要做什么。请提出另一个问题然后再问一遍。
答案 1 :(得分:0)
您正在寻找的功能并非来自OEPB与CEP。但是,您可以尝试类似下面的内容;
实施REST API。可能使用Apache CXF,因为默认情况下,WSO2服务器中存在CXF依赖项。如果您使用基于swagger的方法来开发REST API,则可以关注this guide。
在该自定义REST实现中,您需要读取HTTP请求,将其发送到CEP(步骤3),等待CEP的输出(步骤4),然后将该详细信息作为HTTP响应发送回来表示您的操作的方法。
要向CEP发送活动,您可以使用WSO2 Event receiver。在CEP侧创建接收器,然后使用DataPublisher client将事件发送到接收器。确保您具有在DataPublisher.publish()方法中的CEP接收器中设置的相同流定义,并且您发送的对象数组遵循该定义。此外,您可能需要在此处设置truststore和keystore参数。
成功发布事件后,您需要阻止请求线程,直到您收到CEP的回复。为此,您可以使用CountDownLatch之类的java对象。
要接收响应,您需要使用EventStreamService消耗事件。为此,您需要为EventStreamService实现WSO2EventConsumer和subscribe。成功订阅后,您的活动消费者中提到的流ID的事件将被转发到您的消费者的接收方法。从那里,您可以提取结果,取消阻止初始请求线程并返回这些结果。要从您的网络应用中访问EventStreamService,您可以使用下面的代码段。
EventStreamService eventStreamService = (EventStreamService) PrivilegedCarbonContext.getThreadLocalCarbonContext().getOSGiService(EventStreamService.class, null);
希望这会有所帮助。