将入站流作为AMQP连接器
<flow name="flow1">
<amqp:inbound-endpoint responseTimeout="10000" exchangeName="INPUTEXCHANGE" queueName="INPUTQUEUE" routingKey="inputqueue" connector-ref="rabbitConnector" doc:name="AMQP"/>
<set-variable variableName="dataCount" value="0" doc:name="Variable"></set-variable>
<db:select config-ref="databaseConnector" target="#[flowVars.dataCount]" source="#{payload[0]['count(*)']}" doc:name="Select">
<db:parameterized-query><![CDATA[select count(*) from tablename]]></db:parameterized-query>
</db:select>
</flow>
当没有指定source时dataCount = [{count(*)= 10}],因为db select返回Map的List。什么应该是source属性的正确值,以便只为dataCount变量分配10。当指定payload [0] ['count(*)']时,它给出一个错误,即有效负载是byte [],实际上是AMQP返回的有效负载。
答案 0 :(得分:2)
根据user guide,来源是:
用于获取用于计算参数的值的表达式。默认值为空,因此参数是根据有效负载“。
计算的
Source用于“提供”select语句参数,而不是用于后处理结果。
因此,删除source
属性并使用以下选项计算流变量的计数:
<set-variable variableName="selectResult" value="#[[]]" />
<db:select config-ref="databaseConnector" target="#[flowVars.selectResult]">
<db:parameterized-query><![CDATA[select count(*) from tablename]]></db:parameterized-query>
</db:select>
<set-variable variableName="dataCount"
value="#[flowVars.selectResult[0]['count(*)']]" />