apache.camel_在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...
apache.camel
從歷史上看, Apache ActiveMQ消息代理最初是在大型消息以MB為單位而不是GB的情況下創建的,就像您今天所做的那樣。
下一代代理Apache ActiveMQ Artemis(或僅是Artemis)則不是這種情況,后者對大型消息的支持要好得多。
因此,到了大約時間,駱駝團隊終于有時間進行此工作,以確保駱駝與Artemis以及大型郵件一起正常工作。 這項工作在本周末進行,我們提供了一個示例來證明這一點。
該示例使用以下兩條小路線運行Camel:
第一種路由只是將文件路由到消息代理上名為data的隊列。 第二條路線則相反,從數據隊列到文件的路線。
請注意第二條路線,因為它已經打開了Camel的流緩存 。 這確保了Camel將以Camel可以將大數據流自動后臺處理到臨時磁盤空間以避免占用內存的方式來處理大型流有效負載。 Apache Camel中的流緩存是完全可配置的,您可以基于有效負載大小,JVM中剩余的內存等設置閾值,以觸發何時后臺處理到磁盤。 但是,默認設置通常就足夠了。
然后,駱駝使用JMS組件與ActiveMQ Artemis代理進行集成,您可以如下設置:
這是所有標準配置(您還應該考慮設置連接池)。
該示例需要在JVM中單獨運行ActiveMQ Artemis消息代理,然后使用較低的內存設置(例如128mb或256mb等)啟動Camel JVM,這可以通過Maven完成:
export MAVEN_OPTS="-Xmx256m"然后您通過Maven運行Camel
mvn camel:run當應用程序運行時,您可以將大文件復制到target / inbox目錄,然后將這些大消息流式傳輸到Artemis代理,然后再次返回到Camel,然后將其保存到target / outbox目錄。
例如,我通過復制一個1.6gb的Docker VM文件來使它感到厭倦,而Camel將記錄以下內容:
INFO? Sending file disk.vmdk to ArtemisINFO? Finish sending file to ArtemisINFO? Received data from ArtemisINFO? Finish saving data from Artemis as file我們可以看到文件再次被保存,其正確大小為1.6gb
$ ls -lh target/outbox/total 3417600-rw-r--r--? 1 davsclaus? staff? ?1.6G Oct 22 14:39 disk.vmdk我將jconsole連接到正在運行的Camel JVM并監視了內存使用情況,如下圖所示:
該圖顯示堆內存的峰值在130mb左右,而GC之后回落到50mb左右。 JVM的最大配置為256mb。
您可以找到有關示例的詳細逐步說明,以及如何精確運行示例,因此可以自己嘗試。 的
該示例是即將發布的Apache Camel 2.21發行版的一部分,其中對camel-jms組件進行了改進,以支持javax.jms.StreamMessage類型,并對ActiveMQ Artemis進行了特殊優化,如本示例所示。
PS:該示例可以用多種方式編寫,但是我們沒有創建另一個基于Spring Boot的示例,而是選擇使用純XML。 最終,駱駝不在乎,您可以隨心所欲地實現和使用駱駝。
翻譯自: https://www.javacodegeeks.com/2017/10/working-large-messages-using-apache-camel-activemq-artemis-improved-upcoming-camel-2-21-release.html
apache.camel
總結
以上是生活随笔為你收集整理的apache.camel_在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美行安卓车机版(美行安卓)
- 下一篇: log4j2自动删除_登录样式:log4