我正在寻找一些方法来记录我在udp多线程的几个界面中收到的消息数量:
<flow name="transaccion" doc:name="transaccion">
<set-variable variableName="#[count]" value="#[0]" />
<composite-source>
<udp:inbound-endpoint host="127.0.0.1" port="3001" connector-ref="udpConnector" doc:name="3001"/>
<udp:inbound-endpoint host="127.0.0.1" port="3002" responseTimeout="10000" doc:name="3002"/>
<udp:inbound-endpoint host="127.0.0.1" port="3003" responseTimeout="10000" doc:name="3003"/>
<udp:inbound-endpoint host="127.0.0.1" port="3004" responseTimeout="10000" doc:name="3004"/>
<udp:inbound-endpoint host="127.0.0.1" port="3005" responseTimeout="10000" doc:name="3005"/>
<udp:inbound-endpoint host="127.0.0.1" port="3006" responseTimeout="10000" doc:name="3006"/>
<udp:inbound-endpoint host="127.0.0.1" port="3007" responseTimeout="10000" doc:name="3007"/>
<udp:inbound-endpoint host="127.0.0.1" port="3008" responseTimeout="10000" doc:name="3008"/>
<udp:inbound-endpoint host="127.0.0.1" port="3009" responseTimeout="10000" doc:name="3009"/>
<udp:inbound-endpoint host="127.0.0.1" port="3010" responseTimeout="10000" doc:name="3010"/>
</composite-source>
<set-variable variableName="#[counter]" value="#[count]+1" />
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<set-payload value="#['Hello, ' + message.payload + '. Today is the end of the world. ']" doc:name="Set Payload"/>
<logger message="message #[payload:java.lang.String] received from #[function:hostname] #[function:ip] #[function:count] count: #[variable:counter] " level="INFO" doc:name="Logger"/>
</flow>
这是一个例子,我尝试了一些方法,或者得到null,或者不起作用。
答案 0 :(得分:1)
您需要在app注册表中使用计数器,而不是流的本地计数器。一种方法是使用简单的单例范围的Spring bean。
流量:
<spring:beans>
<spring:bean id="counterBean" class="my.test.Counter" />
</spring:beans>
<logger message="message count: #[app.registry.counterBean.count()] " level="INFO"/>
类:
public class Counter {
private int count = 0;
public synchronized int count() {
count++;
return count;
}
}
答案 1 :(得分:0)
您可以将Spring bean创建为AtomicInteger
<bean id="messageCounter" class="java.util.concurrent.atomic.AtomicInteger" scope="singleton">
<constructor-arg type="int" value="0"/>
</bean>
然后像这样增加流量
<expression-component doc:name="messageCounter plus plus">
app.registry.messageCounter.incrementAndGet();
</expression-component>