【问题标题】:WSO2 CEP - Custom Receiver Adapter: Event FormatsWSO2 CEP - 自定义接收器适配器:事件格式
【发布时间】:2016-10-05 11:12:12
【问题描述】:

我正在尝试构建自定义接收器适配器。它将从 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 数据模拟事件流。请参考docs.wso2.com/display/CEP410/… 了解如何找到。

标签: wso2 custom-adapter wso2cep


【解决方案1】:

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

除此之外,正如Charini 在评论中建议的那样,您还可以查看event simulator。但是,事件模拟器不是事件接收器——也就是说,它不会实时接收事件,而是会“播放”先前定义的一组事件(在本例中为 CSV 文件)以模拟事件流。它不会持续监视文件中的新事件。如果您想监视文件中的新事件,请考虑使用 file-tail 适配器。

【讨论】:

  • 您好 Dilini 和 Charini,感谢您的回复。我认为事件模拟器不是我正在寻找的解决方案,我无法自动化这个(如果我错了,请纠正我)。我已经探索了 file-tail 并构建了一个 csv 文件接收器重用它。问题是,它向我展示了我在问题#2 中提到的问题。请你给我建议。
【解决方案2】:

我刚刚成功了。不是优雅的方式。但是对我来说效果很好。

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

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

解决方法是,不用从 MessageType 类中放入静态变量,而是直接使用对应的字符串。所以现在,我在 EventAdapterFactory 类中的方法“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 格式的事件适配器类型文件。

谢谢,奥贝德

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    相关资源
    最近更新 更多