Apache Camel เป็นไลบรารีเอ็นจิ้นกฎที่ใช้งานได้จริงซึ่งสามารถใช้ในการประมวลผลเหตุการณ์และข้อมูลจากแหล่งต่าง ๆ คุณสามารถส่งข้อความในโปรโตคอลที่แตกต่างกันเช่น VM, HTTP, FTP, JMS และแม้แต่ในระบบไฟล์และรักษาตรรกะการทำงานของคุณและการแยกตรรกะการส่งสัญญาณซึ่งสามารถทำให้คุณจดจ่อกับเนื้อหาของข้อความได้มากขึ้น
ในบทความนี้ฉันจะจัดให้มีการสาธิตรายการอูฐ Apache Java
ก่อนอื่นสร้าง pom.xml ของโครงการ maven
<? เวอร์ชัน XML = "1.0" การเข้ารหัส = "UTF-8" .org/2001/xmlschema-instance "xsi: schemalocation =" http://maven.apache.org/pom/4.0.0http://maven.apache.org/maven- v4_0.xsd " . 0 </somerversion> Camel-Spring-Demo </roup> <ratifactid> มาด้วย L-spring-demo </artifactid> <version> 1.0-snapshot </version> <packaging> jar </packaging> Project.build.sourceencoding> utf-8 </project.build.sourceencoding> <camel.version> 2.11.1 </camel.version> ArtifactId> Camel-Core </artifactId> <persion> $ {camel.version} </version> </derctency> <การพึ่งพา> org.slf4j </groupId> .5 </เวอร์ชัน> </การพึ่งพา> </pendencies> </project>ที่นี่เราใช้แพ็คเกจ Camel-core.jar เท่านั้นอันที่จริงแล้วมันมีส่วนประกอบที่เป็นประโยชน์มากมายที่คุณอาจใช้ สำหรับวัตถุประสงค์ของบันทึกบันทึกฉันใช้ SLF4J-Simple เป็นการใช้งานบันทึกบันทึกดังนั้นเราจึงสามารถเห็นผลลัพธ์จากคอนโซล
ต่อไปเราจะต้องสร้างคลาสการกำหนดเส้นทางเท่านั้น เส้นทางถูกกำหนดโดยวิธีส่งข้อความจากปลายด้านหนึ่งไปอีกด้านหนึ่ง เราจะสร้าง src/main/java/camelcoredemo/timerroutebuilder.java ไฟล์ส่งข้อความไปยังโปรเซสเซอร์ทุกวินาทีและพิมพ์ง่ายๆ
แพ็คเกจ Camelcoremo; จาก ("เวลา: // timer1? period = 1000") .process (โปรเซสเซอร์ใหม่ () {กระบวนการโมฆะสาธารณะ (Exchange msg) {log.info ("การประมวลผล {}", msg);}});}}}ข้างต้นคือความต้องการทั้งหมดสำหรับตัวอย่างนี้และตอนนี้คอมไพล์และเรียกใช้
bash> mvn compilebash> mvn exec: java -dexec.mainclass = org.apache.camel.main.main -dexec.args = '-r Camelcoremoroutebuilder'
โปรดทราบว่าที่นี่เราไม่ได้เขียนทางเข้าหลักของคลาส Java
ควบคุม CamelContext
เมื่อเริ่มต้นอูฐมันจะสร้างวัตถุ CamelContext ซึ่งมีข้อมูลมากมายเกี่ยวกับวิธีการเรียกใช้อูฐและยังรวมถึงคำจำกัดความของเส้นทางที่เราสร้างขึ้น ตอนนี้ถ้าคุณต้องการควบคุมเพิ่มเติมผ่าน CamelContext คุณต้องเขียนรหัสหลักของคุณ ฉันอยู่ที่นี่เป็นตัวอย่างง่ายๆ
แพ็คเกจ Camelcoremo; โมฆะคงที่ (สตริง [] args) โยนข้อยกเว้น {timermain ใหม่ () ); CamelContext.start (); ; waitforsstop ();} routebuilder createroutebuilder () {กลับ timerroutebuilder ใหม่ ();จะเห็นได้ว่าเราได้นำคลาส timerroutebuilder ที่มีอยู่กลับมาใช้ซ้ำในวิธี Creteroutebuilder () ตอนนี้คลาสหลักของเราได้รับการควบคุมอย่างเต็มที่เมื่อมีการสร้างเริ่มต้นและหยุด CamelContext วัตถุบริบท (CamelContext) ช่วยให้คุณสามารถควบคุมวิธีกำหนดค่าอูฐในระดับโลกไม่ใช่ในระดับเส้นทาง ลิงก์ Javadoc ของมันให้วิธีการติดตั้งทั้งหมดและคุณสามารถศึกษาสิ่งที่สามารถทำได้
โปรดทราบว่าเราจำเป็นต้องให้รหัสจำนวนเล็กน้อยในหมวดหมู่หลักของเรา ก่อนอื่นเราต้องจัดการกับปัญหาของการปิดที่สง่างามดังนั้นเราจึงเพิ่มฟังก์ชั่นการปิด Java เพื่อเรียกวิธีการหยุด () ของบริบท ประการที่สองหลังจากบริบทได้เริ่มต้นขึ้นเราต้องเพิ่มบล็อกเธรด หากคุณไม่บล็อกเธรดหลักของคุณหลังจากเริ่มต้นมันก็จะออกหลังจากเริ่มต้นและมันจะไร้ประโยชน์ คุณจะเรียกใช้อูฐเป็นบริการ (เช่นเซิร์ฟเวอร์) จนกว่าคุณจะกดปุ่ม CTRL+C เพื่อยุติกระบวนการ
ปรับปรุงคลาสหลักที่เริ่มเปิดตัว CamelContext
หากคุณไม่ต้องการประมวลผลรหัสการตั้งค่าคลาสหลักเท่าตัวอย่างข้างต้นคุณสามารถสืบทอด org.apache ได้ ด้วยการใช้คลาสนี้คุณไม่เพียง แต่อนุญาตให้บริบทของคุณตั้งค่าโดยอัตโนมัติ แต่ยังได้รับคุณสมบัติบรรทัดคำสั่งเพิ่มเติมทั้งหมดเช่นระยะเวลาที่กระบวนการควบคุมทำงานเปิดใช้งานการติดตามโหลดคลาสเส้นทางที่กำหนดเองและอื่น ๆ
สร้างตัวอย่างต่อไปนี้ใหม่รหัสมีดังนี้:
Package Caredemo; โมฆะคงที่หลัก (สตริง [] args) โยนข้อยกเว้น {timermain2 main = timermain2 (ใหม่); ;}} ตอนนี้รหัสของ Timermain2 น้อยกว่าเมื่อก่อนคุณสามารถลองได้มันควรจะเหมือนกับคุณสมบัติก่อนหน้า
bash> mvn compilebash> mvn exec: java -dexec.mainclass = camelcoremo.timermain2 -dexec.args = '-t'
โปรดทราบว่าหลังจากที่เราให้ตัวเลือก -T การติดตามเส้นทางจะถูกสงวนไว้ ใช้ -H จะเห็นตัวเลือกที่มีอยู่ทั้งหมด
เพิ่มถั่วด้วยกลไกการลงทะเบียนของ Camel
ในตัวอย่าง timerroutebuilder ก่อนหน้านี้เราได้สร้าง processeor ที่ไม่ระบุชื่อในรหัส ตอนนี้ถ้าคุณต้องการที่จะรวบรวม procesors ที่แตกต่างกันสองสามตัวเข้าด้วยกันการเพิ่มถั่วเพื่อเพิ่มกลไกการลงทะเบียนอูฐจะช่วยลดความสับสนของรหัสได้ดีขึ้น อูฐช่วยให้คุณใช้การประมวลผลเป็นถั่วลงในพื้นที่รีจิสทรีจากนั้นคุณจะต้องเรียกพวกเขาว่าเป็นส่วนประกอบของถั่ว ต่อไปนี้เป็นรหัสการสร้างใหม่ของฉัน:
Package Caredemo; โมฆะคงที่หลัก (สตริง [] args) โยนข้อยกเว้น {timerbeansmain main = new timerbeansmain (); ()); main.addroutebuilder (createroutebuilder ()); = 1000 ") .to (" ถั่ว: processByBean1 ") .to (" ถั่ว: processAgainByBean2 "); โปรเซสเซอร์ ents {กระบวนการโมฆะสาธารณะ (Exchange MSG) {log.info (" กระบวนการแรก {} ", msg);}}} คลาสคงที่ Bean2 ใช้โปรเซสเซอร์ {กระบวนการโมฆะสาธารณะ (Exchange msg) {log.info ("กระบวนการวินาที ond {}", msg);}}}ตอนนี้คลาสเส้นทางมีความกระชับและชัดเจนมากขึ้นและในเวลาเดียวกันรหัสการประมวลผลก็ถูกสร้างขึ้นใหม่ในชั้นเรียนอิสระ เมื่อคุณต้องการเขียนเส้นทางที่ซับซ้อนมากเพื่อให้ได้ตรรกะทางธุรกิจวิธีนี้สามารถช่วยให้คุณจัดระเบียบและทดสอบรหัสของคุณได้ดีขึ้น ช่วยให้คุณสามารถสร้างถั่วโพโจที่สามารถนำกลับมาใช้ใหม่ได้เช่น "เลโก้" พื้นที่รีจิสทรีของ Camel ยังสามารถใช้สำหรับการใช้งานอื่น ๆ อีกมากมาย
ตัวอย่างเส้นทางข้างต้นประกอบด้วย Java DSL ที่เรียกว่าการอ่านนั้นสูง
ฉันหวังว่าบทความนี้จะช่วยให้คุณข้ามขั้นตอนการสำรวจของอูฐ