JBoss Fuse - Các khái niệm về lạc đà

Trong chương này, chúng ta sẽ hiểu các khái niệm lạc đà khác nhau. Chúng ta hãy bắt đầu bằng cách lấy một ví dụ cơ bản để hiểu các khái niệm cốt lõi để bắt đầu.

CamelContext

Mọi ứng dụng lạc đà sẽ có ít nhất một CamelContext. Đây là nơi mà chúng tôi thêm các tuyến đường lạc đà. Nó tương tự nhưApplicationContext cuả mùa xuân.

Bối cảnh lạc đà có thể được coi như một thùng chứa giữ mọi thứ lại với nhau. Một bối cảnh lạc đà có thể có nhiều tuyến đường bên trong nó.

Các tuyến đường

CamelContext có thể chứa một hoặc nhiều tuyến đường. Các tuyến là logic tích hợp xác định cách dữ liệu sẽ lưu chuyển trong ngữ cảnh lạc đà từ điểm cuối này sang điểm cuối khác.

Điểm cuối

Điểm cuối là điểm cuối của kênh mà hệ thống có thể gửi hoặc nhận tin nhắn. Đây là những gì chúng tôi gọi là đích hoặc nguồn trong ngôn ngữ giao tiếp.

Các thành phần

Các thành phần là điểm mở rộng trong Camel. Các thành phần có thể là giao diện cho công nghệ, định dạng dữ liệu, máy biến áp, v.v ... Chúng cũng có thể hoạt động như một nhà máy cho các điểm cuối.

EIP

EIP là viết tắt của Enterprise Integration Pattern. Đây là những giải pháp đã được xác định và nổi tiếng cho một vấn đề lặp lại. Camel hỗ trợ hầu hết các Mẫu Tích hợp Doanh nghiệp.

Bộ định tuyến dựa trên nội dung

Các mẫu CBR cho phép chúng tôi định tuyến dữ liệu theo nội dung của tệp đầu vào.

Mẫu này được sử dụng khi chúng ta phải định tuyến các giá trị tùy thuộc vào nội dung của phần nội dung đầu vào.

Ví dụ sau sẽ đọc dữ liệu từ D:/data/inputdanh mục. Sau khi đọc, nó sẽ kiểm tra thẻ giá trị bên trong thẻ dữ liệu. Nếu thẻ giá trị chứavalue1, nó sẽ được gửi đến D:/value1, Nếu nó chứa value2, nó sẽ được gửi đến D:/value2 và nếu không có cả hai, thì nó sẽ được gửi cho người khác.

<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: / value1 /

<data>
   <value>value1</value>
</data>

D: / value2 /

<data>
   <value>value2</value>
</data>

Bộ chia

Một mẫu bộ chia được sử dụng để chia dữ liệu đầu vào thành các phần nhỏ hơn.

Mẫu này được sử dụng hầu hết với dữ liệu đầu vào khổng lồ đòi hỏi phải được chia thành nhiều phần, vì vậy nó có thể xử lý được. Nó chia nhỏ đầu vào thành các đoạn nhỏ hơn dựa trên chuỗi mã thông báo đầu vào.

<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

Nếu bạn kiểm tra AMQ, bạn sẽ thấy 3 tin nhắn được đăng.

<order>
   <data>
      <value>value4</value>
   </data>
</order>

Danh sách những người nhận

Mẫu danh sách người nhận được sử dụng khi danh sách người nhận cần được truy xuất từ ​​chính nội dung thư.

Trong ví dụ sau, một thông báo sẽ được gửi đến tất cả những người nhận được liệt kê trong thẻ khách hàng dưới dạng danh sách các chuỗi được phân tách bằng dấu phẩy.

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "jms:xmlOrders" />
      <recipientList>
         <xpath>/order/customer</xpath>
      </recipientList>
   </route>
</camelContext>

Các EIP khác

Camel cung cấp hỗ trợ cho hầu hết tất cả các EIP được xác định. Một số EIP thường được sử dụng như được đề cập dưới đây.

  • Log - Để ghi lại tin nhắn hoàn chỉnh hoặc một phần của nó

  • Message Filter - Lọc nội dung tin nhắn

  • Re-Sequencer - Để nhận tất cả các mã thông báo theo trình tự

  • Wiretap - Để kiểm tra tin nhắn đi du lịch

Danh sách đầy đủ của EIP và cách sử dụng chúng có thể được tìm thấy tại tài liệu chính thức của Camel http://camel.apache.org/eip.html

Xử lý ngoại lệ trong Camel

Using Error Handler - Đây là cách dễ nhất để xử lý các trường hợp ngoại lệ ở lạc đà.

Để sử dụng điều này, chúng ta phải định cấu hình bean lớp của trình xử lý lỗi và cung cấp nó dưới dạng tham chiếu đến CamelContext errorHandlerRef thuộc tính.

<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>

Sử dụng Try Catch Cuối cùng

Camel cũng hỗ trợ kiểu Java Try Catch Finally block để xử lý lỗi.

Cũng giống như Java, nó có ba khối sau:

  • doTry khối chứa mã có thể tạo ra ngoại lệ.

  • doCatch khối chứa mã cần được thực thi trong trường hợp ngoại lệ.

  • doFinallykhối có mã phải được thực thi bất kể ngoại lệ. Nó sẽ luôn được thực thi bất kể ngoại lệ có được đưa ra hay không.

Note- Mock là thành phần thử nghiệm và không được khuyến khích cho các mục đích khác. Nó là thành phần trong camel được sử dụng để thử nghiệm giống như thành phần jMOck trong phát triển Hướng dẫn thử nghiệm.

<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>

Trong ví dụ trên, chúng ta có thể đưa ra danh sách các trường hợp ngoại lệ cần được xử lý bởi khối catch.

Triển khai gói trong cầu chì

Bắt đầu sử dụng cầu chì Fuse.bat/start.bat.

Nếu bạn khởi động Fuse bằng start.bat, hãy sử dụng client.bat để kết nối với Fuse. Bạn sẽ nhận được giao diện người dùng như được hiển thị trong ảnh chụp màn hình sau.

Đây là CLI để truy cập các lệnh Karaf và Fuse.

install –s mvn:group.id /artifact.id/version 
e.g. install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT