JBoss Fuse - แนวคิดเกี่ยวกับอูฐ
ในบทนี้เราจะเข้าใจแนวคิดเกี่ยวกับอูฐที่แตกต่างกัน ให้เราเริ่มต้นด้วยการยกตัวอย่างพื้นฐานเพื่อทำความเข้าใจแนวคิดหลักเพื่อเริ่มต้นด้วย
CamelContext
ทุกแอปพลิเคชันอูฐจะมี CamelContext อย่างน้อยหนึ่งตัว นี่คือสถานที่ที่เราเพิ่มเส้นทางอูฐ มันคล้ายกับApplicationContext ของฤดูใบไม้ผลิ
บริบทของอูฐถือได้ว่าเป็นภาชนะที่เก็บทุกสิ่งไว้ด้วยกัน บริบทอูฐหนึ่งตัวสามารถมีได้หลายเส้นทางภายในนั้น
เส้นทาง
CamelContext อาจมีเส้นทางอย่างน้อยหนึ่งเส้นทาง Routes คือตรรกะการรวมที่กำหนดว่าข้อมูลจะไหลในบริบทอูฐจากจุดสิ้นสุดหนึ่งไปยังอีกจุดหนึ่งอย่างไร
จุดสิ้นสุด
Endpoint คือจุดสิ้นสุดของช่องสัญญาณที่ระบบสามารถส่งหรือรับข้อความได้ นี่คือสิ่งที่เราเรียกว่าปลายทางหรือต้นทางในภาษาสื่อสาร
ส่วนประกอบ
ส่วนประกอบเป็นจุดขยายของ Camel ส่วนประกอบอาจเป็นส่วนต่อประสานกับเทคโนโลยีรูปแบบข้อมูลหม้อแปลง ฯลฯ นอกจากนี้ยังอาจทำหน้าที่เป็นโรงงานสำหรับอุปกรณ์ปลายทาง
EIP
EIP ย่อมาจาก Enterprise Integration Pattern สิ่งเหล่านี้เป็นวิธีที่ระบุและเป็นที่รู้จักกันดีสำหรับปัญหาที่เกิดซ้ำ Camel รองรับรูปแบบการรวมองค์กรส่วนใหญ่
เราเตอร์ตามเนื้อหา
รูปแบบ CBR ช่วยให้เราสามารถกำหนดเส้นทางข้อมูลตามเนื้อหาของไฟล์อินพุต
รูปแบบนี้ใช้เมื่อเราต้องกำหนดเส้นทางค่าขึ้นอยู่กับเนื้อหาของเนื้อหาที่ป้อนข้อมูล
ตัวอย่างต่อไปนี้จะอ่านข้อมูลจาก D:/data/inputไดเรกทอรี หลังจากอ่านแล้วระบบจะตรวจสอบแท็กค่าภายในแท็กข้อมูล หากแท็กค่ามีvalue1มันจะถูกส่งไปที่ D:/value1, ถ้ามี value2มันจะถูกส่งไปที่ D:/value2 และหากไม่มีทั้งสองอย่างนี้ก็จะถูกส่งไปยังผู้อื่น
<CamelContext xmlns = "http://camel.apache.org/schema/spring">
<route>
<from uri = "file:///D:/data/input"/>
<choice>
<when>
<xpath>/data/value = 'value1'</xpath>
<to uri = "file:///D:/value1"/>
</when>
<when>
<xpath>/data/value = 'value2'</xpath>
<to uri = "file:///D:/value2"/>
</when>
<otherwise>
<to uri = "file:///D:/others "/>
</otherwise>
</choice>
</route>
</camelContext>
Input
D: /data/input/message1.xml
<data>
<value>value1</value>
</data>
D: /data/input/message2.xml
<data>
<value>value2</value>
</data>
Output
D: / ค่า 1 /
<data>
<value>value1</value>
</data>
D: / ค่า 2 /
<data>
<value>value2</value>
</data>
ตัวแยก
รูปแบบตัวแยกใช้เพื่อแบ่งข้อมูลอินพุตออกเป็นชิ้นเล็ก ๆ
รูปแบบนี้ใช้เป็นส่วนใหญ่กับการป้อนข้อมูลขนาดใหญ่ซึ่งจำเป็นต้องแยกเป็นชิ้น ๆ จึงจะสามารถดำเนินการได้ แบ่งอินพุตออกเป็นเศษเล็กเศษน้อยตามสตริงโทเค็นอินพุต
<CamelContext xmlns = "http://camel.apache.org/schema/spring">
<route>
<from uri = "file:///D:/inbox"/>
<split streaming = "true">
<tokenize token = "order" xml = "true"/>
<to uri = "activemq:queue:order"/>
</split>
</route>
</CamelContext>
Input
D: /inbox/message.xml
<order>
<data>
<value>value1</value>
</data>
</order>
<order>
<data>
<value>value2</value>
</data>
</order>
<order>
<data>
<value>value3</value>
</data>
</order>
Output
หากคุณตรวจสอบ AMQ คุณจะพบ 3 ข้อความที่โพสต์
<order>
<data>
<value>value4</value>
</data>
</order>
รายชื่อผู้รับ
รูปแบบรายชื่อผู้รับถูกใช้เมื่อต้องการดึงรายชื่อผู้รับจากเนื้อหาข้อความ
ในตัวอย่างต่อไปนี้ข้อความจะถูกส่งไปยังผู้รับทั้งหมดที่มีรายชื่ออยู่ในแท็กลูกค้าเป็นรายการสตริงที่คั่นด้วยจุลภาค
<CamelContext xmlns = "http://camel.apache.org/schema/spring">
<route>
<from uri = "jms:xmlOrders" />
<recipientList>
<xpath>/order/customer</xpath>
</recipientList>
</route>
</camelContext>
EIP อื่น ๆ
Camel ให้การสนับสนุน EIP เกือบทั้งหมดที่ระบุ EIP ที่ใช้กันทั่วไปมีดังต่อไปนี้
Log - เพื่อบันทึกข้อความทั้งหมดหรือบางส่วน
Message Filter - การกรองเนื้อหาของข้อความ
Re-Sequencer - เพื่อรับโทเค็นทั้งหมดตามลำดับ
Wiretap - เพื่อตรวจสอบข้อความการเดินทาง
รายชื่อ EIP ทั้งหมดและการใช้งานมีอยู่ในเอกสารอย่างเป็นทางการของ Camel http://camel.apache.org/eip.html
การจัดการข้อยกเว้นในอูฐ
Using Error Handler - นี่เป็นวิธีที่ง่ายที่สุดในการจัดการข้อยกเว้นในอูฐ
ในการใช้สิ่งนี้เราต้องกำหนดค่าคลาสตัวจัดการข้อผิดพลาดและระบุเป็นการอ้างอิงถึง CamelContext errorHandlerRef แอตทริบิวต์
<bean id = "loggingErrorHandler" class = "org.apache.camel.builder.LoggingErrorHandler">
<property name = "logName" value = "mylogger.name"/>
<property name = "level" value = "DEBUG"/>
</bean>
<camelContext errorHandlerRef = ” loggingErrorHandler” >
…
</camelContext>
ใช้ Try Catch ในที่สุด
Camel ยังรองรับรูปแบบ Java Try Catch Finally block สำหรับการจัดการข้อผิดพลาด
เช่นเดียวกับ Java มีสามบล็อกต่อไปนี้ -
doTry บล็อกมีรหัสที่อาจสร้างข้อยกเว้น
doCatch บล็อกมีรหัสที่ต้องดำเนินการในกรณีที่มีข้อยกเว้น
doFinallyบล็อกมีรหัสที่ต้องดำเนินการโดยไม่คำนึงถึงข้อยกเว้น มันจะถูกดำเนินการเสมอไม่ว่าจะมีการยกเว้นหรือไม่ก็ตาม
Note- Mock เป็นส่วนประกอบการทดสอบและไม่แนะนำสำหรับวัตถุประสงค์อื่น เป็นส่วนประกอบในอูฐที่ใช้ในการทดสอบเช่นเดียวกับส่วนประกอบ jMOck ในการพัฒนาแบบทดสอบ
<route>
<from uri = "direct:start"/>
<doTry>
<process ref = "someProcesorThatmayFail"/>
<to uri = "mock:result"/>
<doCatch>
<exception>java.io.IOException</exception>
<exception>java.lang.IllegalStateException</exception>
<to uri = "mock:catch"/>
</doCatch>
<doFinally>
<to uri = "mock:finally"/>
</doFinally>
</doTry>
</route>
ในตัวอย่างข้างต้นเราสามารถให้รายการข้อยกเว้นที่ต้องจัดการโดยบล็อกการจับ
การปรับใช้ Bundle ใน Fuse
เริ่มฟิวส์โดยใช้ Fuse.bat/start.bat.
หากคุณเริ่ม Fuse โดยใช้ start.bat ให้ใช้ client.bat เพื่อเชื่อมต่อกับ Fuse คุณควรได้รับ UI ดังที่แสดงในภาพหน้าจอต่อไปนี้
นี่คือ CLI สำหรับการเข้าถึงคำสั่ง Karaf และ Fuse
install –s mvn:group.id /artifact.id/version
e.g. install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT