我正在評估春天和它的生態系統爲新項目如此裸露與我。我希望我的應用程序對來自數千個不同客戶端的UDP事件做出反應。每個客戶端每隔5-10s發送1-10個UDP數據包。每個數據包都將被處理得非常快(主要在內存和小型計算中,只有偶爾的數據庫調用纔會幫助使用redis)。將不會有數據返回給調用者。UDP處理器與反應器在春天
我在Spring中實現了Reactor,就像他們在wiki上描述的一樣。 然後我實現了像Spring集成文檔中描述的UDP入站通道。下面是配置:
<int-ip:udp-inbound-channel-adapter id="receiverChannel"
channel="stringConvert"
port="9000"
multicast="false"
check-length="false"
pool-size="10"
lookup-host="false"
/>
<int:transformer id="convertChannel"
input-channel="stringConvert"
output-channel="toProcess"
ref="transformer"
method="transform"
/>
<int:service-activator input-channel="toProcess"
ref="accumulator"
method="accumulate"/>
<bean id="accumulator" class="hello.UDPAccumulator" />
<bean id="transformer" class="hello.UDPTransformer" />
然後在UDPAccumulator我發佈消息反應器:
@Service
public class UDPAccumulator {
@Autowired
ReactorProducer producer;
public void accumulate(String quote) {
producer.fireEvent(quote);
}
}
這是「正確」的方式做到這一點,就我想高吞吐量? int-ip:udp -inbound-channel-adapter的內部工作是什麼?在將消息傳遞給反應堆之前它可以成爲瓶頸嗎?我看到反應堆有一些TCP相關的類和支持,但沒有UDP。任何有關如何以最好的方式做到這一點的建議,我們感激不盡!
獎金問題。如果消息比分派到反應堆的速度更快,該怎麼辦?請問redis message store(文章底部)有幫助嗎?如果我在反應堆中處理這些數據包的方法很慢,該怎麼辦?