【问题标题】:WSO2 Stream Processor: unable to parse json messagesWSO2 流处理器:无法解析 json 消息
【发布时间】:2019-10-20 21:22:00
【问题描述】:

我正在使用流处理器 4.3.0 我创建了一个 siddhi 应用程序,其源为 mqtt,消息类型为 json

在接收器中,我也使用 mqtt 和消息作为 json。基本上,不需要对消息进行转换。

源mqtt主题消息如下

{
"value1" : 59.698437,
"value2" : 14.977777,
"valid" : true
}

理想情况下应该发送到 sink mqtt 代理主题。

现在,为了测试这一点,我在 /editor 中使用事件模拟器来测试 sidhi 应用程序。输入虚拟值后,这会生成提要为

{
"event" : {
    "value1" : "59.698437",
    "value2" : "14.977777",
    "valid" : true
}

成功转移到sink主题。

现在,在实际的消息提要中和模拟器生成的有区别。它在消息中有事件对象,这就是编辑器理解这一点并使其他消息(没有事件对象)无效的原因。 有什么办法,流处理器也可以处理没有事件的提要,如何检查下沉的消息没有事件?

【问题讨论】:

    标签: wso2 wso2carbon siddhi wso2sp


    【解决方案1】:

    您必须使用 JSON 映射器类型中的自定义映射来解析所需的 JSON 输入

    @source(type='mqtt', 
    @map(type='json', enclosing.element="$", @attributes(value1 = "value1", value2 = "value2", isValid = "valid")))
    define stream InputStream(value1 string, value2 string, isValid bool);
    

    有关更多信息,请参阅 API 文档下的示例,https://siddhi-io.github.io/siddhi-map-json/api/4.1.1/#json-source-mapper

    您可以使用日志接收器类型来检查已发布的事件。确保使用相同的地图配置,

    @sink(type='log', 
    @map(type='json', enclosing.element="$", @attributes(value1 = "value1", value2 = "value2", isValid = "valid")))
    
    

    【讨论】:

    • 感谢 Niveathika 在这里的回答。但是,根据文档 (siddhi-io.github.io/siddhi-map-json/api/4.1.1/…),这是一个可选配置。我们是否可以禁用它,以便如果源提要没有,那么接收端提要也不应该得到这个?我知道 enclosure.element= 是在我们需要时添加
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多