在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...
從歷史上看, Apache ActiveMQ消息代理最初是在大型消息以MB為單位而不是GB的情況下創(chuàng)建的,就像您今天所做的那樣。
下一代代理Apache ActiveMQ Artemis(或僅是Artemis)則不是這種情況,后者對大消息有更好的支持。
因此,到了大約時間,駱駝團隊終于有一些時間來進行此工作,以確保駱駝與Artemis和大型郵件一起正常工作。 這項工作已在本周末完成,我們提供了一個示例來證明這一點。
該示例使用以下兩條小路線運行Camel:
第一種路由只是將文件路由到消息代理上名為data的隊列。 第二條路由則相反,即從數(shù)據(jù)隊列到文件的路由。
注意第二條路線,因為它已經(jīng)打開了Camel的流緩存 。 這確保了Camel將以一種方式處理大型流負載,其中Camel可以將大流自動后臺處理到臨時磁盤空間以避免占用內(nèi)存。 Apache Camel中的流緩存是完全可配置的,您可以基于有效負載大小,JVM中剩余的內(nèi)存等設(shè)置閾值,以觸發(fā)何時后臺處理到磁盤。 但是,默認設(shè)置通常就足夠了。
然后,駱駝使用JMS組件與ActiveMQ Artemis代理集成,您可以如下設(shè)置:
這是所有標準配置(您還應(yīng)該考慮設(shè)置連接池)。
該示例需要在JVM中單獨運行ActiveMQ Artemis消息代理,然后使用較低的內(nèi)存設(shè)置(例如128mb或256mb等)啟動Camel JVM,這可以通過Maven完成:
export MAVEN_OPTS="-Xmx256m"然后您通過Maven運行Camel
mvn camel:run當應(yīng)用程序運行時,您可以將大文件復(fù)制到target / inbox目錄,然后將這些大消息流式傳輸?shù)紸rtemis代理,然后再次返回到Camel,然后將其保存到target / outbox目錄。
例如,我通過復(fù)制一個1.6gb的docker VM文件而使這很累,而Camel將記錄以下內(nèi)容:
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并監(jiān)視了內(nèi)存使用情況,如下圖所示:
該圖顯示堆內(nèi)存在130mb左右達到峰值,而在GC之后,堆內(nèi)存回落到50mb左右。 JVM的最大配置為256mb。
您可以找到有關(guān)示例的詳細逐步說明,以及如何精確運行示例,因此可以自己嘗試。 的
該示例是即將發(fā)布的Apache Camel 2.21發(fā)行版的一部分,其中對camel-jms組件進行了改進,以支持javax.jms.StreamMessage類型,并對ActiveMQ Artemis進行了特殊優(yōu)化,如本示例所示。
PS:該示例可以用多種方式編寫,但是我們沒有創(chuàng)建另一個基于Spring Boot的示例,而是選擇使用純XML。 最終,駱駝不在乎,您可以隨心所欲地實現(xiàn)和使用駱駝。
翻譯自: https://www.javacodegeeks.com/2017/10/working-large-messages-using-apache-camel-activemq-artemis-improved-upcoming-camel-2-21-release.html
總結(jié)
以上是生活随笔為你收集整理的在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: visio翻转快捷键(visio2019
- 下一篇: 电脑上能发贴吧语音吗(电脑上能发贴吧语音