WSO2 CEP - 自定义接收器适配器:事件格式

WSO2 CEP - Custom Receiver Adapter: Event Formats

我正在尝试构建自定义接收器适配器。它将从 CSV 文件中读取并将事件推送到流中。 据我了解,我们必须遵循任何 WSO2 标准格式(TEXT、XML 或 JSON)将数据推送到流中。

问题是,CSV 文件与上述任何标准格式都不匹配。我们必须将 csv 值转换为自定义适配器中支持的任何格式。 根据我的观察,WSO2 TEXT 格式不支持字符串值中的逗号 (,)。所以,我决定转换 CSV JSON.

我的问题如下:

  1. 如果值是逗号,如何生成 WSO2 TEXT 事件?
  2. (如果第 1 点不可能)在我的自定义适配器 MessageType 中,如果我只添加 TEXT 或全部添加 3(TEXT、XML、JSON)它会起作用美好的。但是如果我只添加 JSON 我会得到以下错误。我的目标是仅添加 JSON 并将所有 CSV 转换为 JSON 以避免混淆。

    [2016-09-19 15:38:02,406] ERROR {org.wso2.carbon.event.receiver.core.EventReceiverDeployer} - Error, Event Receiver not deployed and in inactive state, Text Mapping is not supported by event adapter type file

要从 CSV 文件中读取并将事件推送到流中,您可以使用文件尾部适配器。请参阅示例“Receiving Custom RegEx Text Events via File Tail”。此示例包含可用于映射 CSV 输入的正则表达式模式。

除此之外,如Charini has suggested in a comment, you could also check out the event simulator。但是,事件模拟器不是事件接收器 - 这意味着,它不会实时接收事件,而是 "play" 先前定义的一组事件(在本例中为 CSV 文件)来模拟事件。它不会持续监视文件中的新事件。如果要监视文件中的新事件,请考虑使用文件尾部适配器。

我刚刚做到了。不是一种优雅的方式。但是对我来说效果很好。

正如我所提到的,JSON 格式对我来说是最灵活的格式。我正在读取文件并将每个 line/event 格式转换为 WSO2 JSON 格式。

此选项的问题是,我想从管理控制台(创建新接收器时的 "Message Format" 菜单)将消息格式限制为 JSON。如果我只添加 JSON [supportInputMessageTypes.add(MessageType.JSON)] 它会显示错误,正如我在上面的问题 #2 中提到的那样。

解决方案是,不要从 MessageType class 中放入静态变量,而是直接使用相应的字符串。所以现在,我在 EventAdapterFactory class 中的方法“getSupportedMessageFormats()”如下所示:

@Override public List<String> getSupportedMessageFormats() { List<String> supportInputMessageTypes = new ArrayList<String>(); // just converting the type to string value // to avoid error "Text Mapping is not supported by event adapter type file" String jsonType = MessageType.JSON; supportInputMessageTypes.add(jsonType); //supportInputMessageTypes.add(MessageType.JSON); //supportInputMessageTypes.add(MessageType.XML); //supportInputMessageTypes.add(MessageType.TEXT); return supportInputMessageTypes; }

我对 WSO2 团队的请求,请允许 JSON 格式化事件适配器类型文件。

谢谢,奥贝德