有效载荷 Filters/Transforms 和丰富的仪表

Payload Filters/Transforms & Rich Gauges

我有一个 JMS 提要,它提供具有以下 JSON 结构的消息:

{ String:currentSessions, Long:duration, Long:rows, Long:fill, Long:execute, String:source, String:category, String:url, String:hostname }

我想做的是定义一个类似于以下内容的流,它将通过 rich-gauge:

按主机名提供移动平均线
stream create duration_gauge --definition "tap:stream:interceptor > object-to-json | transform --expression=#jsonPath(payload,'$.duration') | rich-gauge --nameExpression=#jsonPath(payload,'$.hostname')" --deploy

显然,这行不通,因为负载已经转换,不再包含主机名字段。

问题:

  1. 有没有办法在管道之间保存部分有效载荷?我读过有关自定义 headers 的内容,但我没有看到创建和访问它们的记录方式。
  2. 似乎我想要完成的唯一方法是为每个主机名创建一个 stream/rich-gauge。这是最好的解决方案吗?

谢谢!

我觉得这个案子应该更容易一些。我们应该将 --valueExpression 添加到 rich-gauge。同时,您可以选择您建议的两种选择中的任何一种。 (2) 不需要任何定制,如果只有少数已知主机并且不太可能经常更改,则应该很简单。要实现 (1),您可以创建一个自定义处理器模块来实现 Spring 集成 header-enricher and install it into the custom-modules directory. In this case I think it is simpler to use a groovy script,例如:

import groovy.json.JsonSlurper
import org.springframework.messaging.support.MessageBuilder

def slurper = new JsonSlurper()
def json = slurper.parseText(payload)
def enriched = [:]
enriched.putAll(headers)
enriched['hostName'] = json.hostName
return MessageBuilder.withPayload(payload).copyHeaders(enriched).build()

并将其保存为 [XD_INSTALL_DIR]/xd/modules/processor/scripts/headerEnricher.groovy。 (注意 payloadheaders 变量自动绑定到消息内容)。接下来创建并部署一个流。我用这个来测试:

xd:> stream create test --definition "http | enrich:transform --script=headerEnricher.groovy | extract:transform --expression=#jsonPath(payload,'$.duration') |  rich-gauge --nameExpression=headers['hostName']" --deploy

和post一些数据:

xd:>http post --target http://localhost:9000 --data {"hostName":"someHost","duration":2.90}
xd:>http post --target http://localhost:9000 --data {"hostName":"someHost","duration":1.50}
xd:>http post --target http://localhost:9000 --data {"hostName":"anotherHost","duration":1.33}
xd:>http post --target http://localhost:9000 --data {"hostName":"anotherHost","duration":2.345}

显示结果:

 xd:>rich-gauge display someHost
 xd:>rich-gauge display anotherHost