JBoss Fuse - Hướng dẫn nhanh

Trong chương này, chúng ta sẽ bắt đầu với những điều cơ bản của Enterprise Service Bus. Dưới đây là giải thích chi tiết về ESB cùng với những ưu điểm, nhược điểm của nó và một vài sơ đồ để dễ hiểu hơn.

ESB là gì?

ESB là viết tắt của Enterprise Service Bus. ESB ở dạng đơn giản nhất là một phần mềm trung gian hoạt động như một xa lộ thông tin hỗ trợ nhiều ứng dụng giao tiếp.

Trong thế giới doanh nghiệp, chúng tôi phát triển các giải pháp cho nhiều thứ. Các giải pháp này có thể sử dụng các công nghệ khác nhau và các định dạng dữ liệu khác nhau. Sẽ trở nên cồng kềnh khi sử dụng các giải pháp này cùng nhau do phương sai tương thích của giao tiếp hoặc định dạng dữ liệu trong các công nghệ này. Do đó, chúng tôi cần một công nghệ cho phéploosely coupled integration giữa các giải pháp khác nhau.

ESB nhằm mục đích đơn giản hóa vấn đề tích hợp này bằng cách trở thành một 'HUB' nằm ở giữa tất cả các ứng dụng của bạn và tạo điều kiện định tuyến thư giữa chúng. ESB đóng vai trò trung gian, hoạt động như đường cao tốc thông tin, đảm nhận việc định tuyến chuyển đổi dữ liệu, để Bộ mã hóa hoặc Nhà phát triển tập trung vào logic ứng dụng của riêng mình.

Việc hiểu ESB trở nên rất đơn giản khi chúng ta hiểu được vấn đề mà nó được thiết kế đặc biệt và giải pháp trở nên dễ dàng. Người ta nên hiểu rõ về cách kích hoạt nhiều hệ thống khác nhau, được viết bằng các ngôn ngữ khác nhau và chạy trên các máy khác nhau sử dụng các định dạng dữ liệu khác nhau để chia sẻ thông tin và hình thành một nền tảng kinh doanh tích hợp.

Vấn đề tích hợp

Trong nền tảng doanh nghiệp, thông thường nhiều ứng dụng cộng tác và cung cấp chức năng kinh doanh nói chung, nhưng việc tích hợp các ứng dụng này là vấn đề thường xuyên nhất. Nó thậm chí còn trở nên khó khăn theo thời gian khi các ứng dụng phát triển.

Mỗi ứng dụng có thể nhập và xuất dữ liệu ở định dạng riêng của chúng. Cách tiếp cận này hoạt động tốt nếu số lượng ứng dụng ít hơn, nhưng khi số lượng ứng dụng tăng lên, các bánh xe tích hợp cũng cần được khuấy động với cách tiếp cận tốt hơn. Ví dụ: nếu một ứng dụng cụ thể cho một doanh nghiệp cần được thay đổi, thì định dạng dữ liệu đầu ra hoặc đầu vào của nó cho tất cả các ứng dụng phụ thuộc vào ứng dụng Chính đó sẽ bị ảnh hưởng.

Cách tiếp cận như vậy đóng vai trò là rào cản lớn nhất đối với Tích hợp vốn mong đợi một kiến ​​trúc được kết hợp chặt chẽ. Đây là nơi ESB xuất hiện trong bức tranh. Mỗi ứng dụng không cần giao tiếp trực tiếp với ứng dụng khác; thay vào đó, tất cả các ứng dụng giao tiếp với ESB và ESB xử lý việc định tuyến thông tin và chuyển đổi định dạng dữ liệu nội bộ.

Tại sao ESB?

Sau đây là một số điểm giải thích tại sao Enterprise Service Bus lại cần thiết.

  • ESB nhằm mục đích đơn giản hóa vấn đề tích hợp với các ứng dụng tương thích biến thể.

  • Nó hoạt động như một Middleware, đóng vai trò trung gian cho tất cả các ứng dụng của bạn và tạo điều kiện cho việc định tuyến tin nhắn giữa chúng.

  • Thay vì mọi ứng dụng giao tiếp trực tiếp với mọi ứng dụng khác, giờ đây mỗi ứng dụng chỉ có một giao diện với ESB.

  • ESB chịu trách nhiệm dịch các tin nhắn sang / từ một định dạng chung và định tuyến chúng đến đích của chúng.

  • Tiết kiệm lớn trong cách tiếp cận này là một lợi ích nếu bạn phải thay thế bất kỳ ứng dụng hiện có nào của mình. Thay vì viết một loạt các giao diện mới, giờ đây bạn chỉ có một giao diện cần quan tâm (giữa ứng dụng của bạn và ESB).

SOA & ESB?

SOA và ESB thường được sử dụng thay thế cho nhau, nhưng chúng hoàn toàn khác nhau.

SOA là một mẫu thiết kế cho phép ứng dụng thể hiện các chức năng của nó như một dịch vụ qua mạng thông qua các giao thức truyền thông, trong khi ESB là một mô hình tạo điều kiện giao tiếp giữa các hệ thống khác nhau, nhưng ESB có thể được sử dụng như một xương sống trong khi triển khai SOA.

JBoss Fuse là một giải pháp ESB mã nguồn mở của Redhat. Nó là một giải pháp doanh nghiệp dựa trên dự án cộng đồng, Apache Servicemix.

Tích hợp vào cầu chì

JBoss Fuse là một nền tảng tích hợp nhẹ và linh hoạt cho phép tích hợp nhanh chóng các ứng dụng doanh nghiệp.

Fuse ban đầu được phát triển bởi Progressive software Inc., được Redhat mua lại vào năm 2012. JBoss Fuse 6.1.0.redhat-379 GA là phiên bản ổn định của Fuse có thể tải xuống từ trang web chính thức của họ.

Ngành kiến ​​trúc

Cầu chì kết hợp nhiều công nghệ với nhau như một sản phẩm duy nhất.

Các thành phần

Apache CXF

Apache CXF là một khung phát triển dịch vụ web mã nguồn mở cũng hỗ trợ phát triển các dịch vụ web SOAP & Rest.

Lạc đà Apache

Apache Camel là một khung tích hợp dựa trên EIP. Các mẫu EIP hoặc Tích hợp Doanh nghiệp được xác định các giải pháp cho các vấn đề lặp lại trong Tích hợp Doanh nghiệp. Giải pháp tích hợp hoàn chỉnh có thể đạt được về mặt địa lý với sự kết hợp của các mẫu hình ngoài hộp được xác định trước này.

Nó cho phép viết logic định tuyến trong một số ngôn ngữ dành riêng cho miền như Java, Spring DSL và Scala, v.v.

Apache AMQ

Apache AMQ là một JMS cung cấp hệ thống nhắn tin đáng tin cậy theo tiêu chuẩn JMS. Nó không chỉ hỗ trợ đặc tả JMS mà còn cung cấp một số tính năng thú vị và hữu ích không có trong thông số kỹ thuật JMS.

Apache Karaf

Apache Karaf là vùng chứa OSGi nhẹ, hoạt động như thời gian chạy cho các tạo tác. Apache Karaf về bản chất năng động hơn so với JVM. Nó cho phép cài đặt hoặc gỡ cài đặt các mô-đun trong thời gian chạy. Tất cả các hiện vật trong Fuse đều được triển khai trong Karaf.

Sợi vải

Fabric cung cấp cách dễ dàng để quản lý việc triển khai các tạo tác trong một môi trường lớn và phân tán. Nó cung cấp khả năng quản lý tập trung cho tất cả các trường hợp cầu chì.

Cài đặt cầu chì

Việc cài đặt Fuse khá đơn giản. Giống như các sản phẩm JBoss khác, Fuse xuất hiện dưới dạng tệp zip có thể được giải nén và sau một số thay đổi cấu hình nhỏ, nó có thể được khởi động trực tiếp.

Cài đặt cầu chì là một quá trình gồm bốn bước -

Tải xuống

Tải xuống Fuse 6.1.0 GA từ liên kết sau. http://www.jboss.org/

Giải nén

Giống như tất cả các sản phẩm JBoss khác, Fuse cũng là một zip độc lập với nền tảng.

Giải nén tệp đã tải xuống vào thư mục đích mà bạn muốn làm thư mục cài đặt Fuse. Chọn thư mục này một cách khôn ngoan vì nó sẽ được giữ nguyên trong suốt thời gian tồn tại của cá thể Fuse.

Note - Mặc dù Fuse giải nén và khởi động giống như các sản phẩm JBoss khác, không nên di chuyển cài đặt Fuse từ vị trí này sang vị trí khác sau khi cài đặt xong.

Cấu hình

Sau khi giải nén Fuse, bạn sẽ tìm thấy các thư mục sau bên trong Thư mục được giải nén:

  • bin
  • etc
  • deploy
  • lib
  • licenses
  • extras
  • quickstarts

Trong số đó, chúng tôi sẽ chỉ sử dụng hai thư mục bin & etc.

Hầu như sau khi giải nén Cầu chì, chúng ta sẽ có thể bắt đầu cầu chì trực tiếp, nhưng điều này sẽ bắt đầu Cầu chì với tất cả các cấu hình mặc định không được khuyến khích cho môi trường sản xuất. Bạn nên thực hiện các thay đổi sau trước khi khởi động Cầu chì.

Đặt các biến Môi trường

  • Đặt các biến Môi trường sau: JAVA_HOME

  • Biến phải trỏ đến thư mục cài đặt java - M2_HOME

  • Biến phải trỏ đến thư mục cài đặt Maven - PATH

  • Đặt biến đường dẫn để bao gồm các tệp thực thi Java & Maven.

các cửa sổ

Trên windows, cài đặt có thể được thực hiện bằng cách làm theo các hướng dẫn dưới đây -

Khởi động → Máy tính của tôi → Nhấp chuột phải → Thuộc tính → Cài đặt hệ thống nâng cao → Biến môi trường.

UNIX & bản sao

Đối với mỗi người dùng, có một hồ sơ bash trong *nixcác hệ điều hành. Chúng tôi có thể thêm hoặc chỉnh sửa biến hệ thống hiện có bằng cách thay đổi tệp này.

$ vi ~/.bash_proflle

Note- Mọi thay đổi trong tệp này là vĩnh viễn. Bạn nên sao lưu tệp hiện có trước khi thay đổi tệp gốc.

Cấu hình cơ bản

Chúng ta sẽ thảo luận về cấu hình cơ bản của JBoss Fuse và để bắt đầu bằng lệnh sau Edit $FUSE_INSTALLATION_DIR/etc/

  • Trong user.properties

    • #admin=admin,admin

    • Điều này cần được thay đổi theo quản trị viên đầu tiên với tên người dùng mà chúng tôi muốn, quản trị viên thứ hai có mật khẩu, quản trị viên thứ ba có thể được giữ nguyên vì nó chỉ ra một vai trò và đừng quên xóa #

    • Ví dụ - FuseAdmin = FusePAss, admin

    • Trong System.properties

      • karafName = root

        • Điều này cho biết tên bạn muốn đặt cho cá thể Karaf.

        • Chúng ta có thể đặt tên cho nó bất cứ thứ gì chúng ta muốn như Cont1.

        • Đảm bảo rằng tên bạn cung cấp là tên duy nhất và chưa được sử dụng bởi phiên bản khác của Fuse.

    • Trong org.ops4j.pax.web.cfg

      • Org.osgi.service.http.port = 8181

      • Thuộc tính này cho biết cổng được sử dụng để truy cập giao diện dựa trên trình duyệt HAWTIO do Fuse cung cấp

      • HAWTIO là giao diện trình duyệt tích hợp sẵn cho Fuse, có sẵn từ 6.0 trở đi

    • Trong org.ops4j.pax.url.mvn.cfg

      • org.ops4j.pax.url.mvn.localRepository = D: / repository

      • Thuộc tính này chỉ ra đường dẫn đến localRepository của Maven của chúng ta từ đó Fuse sẽ cài đặt các tạo tác của nó.

      • org.ops4j.pax.url.mvn.settings = D: /Maven/conf/settings.xml

      • Thuộc tính này chỉ ra settings.xml mà Fuse nên sử dụng để lấy hiện vật từ Maven.

    Cấu hình Maven

    Maven là điều kiện tiên quyết để cài đặt Fuse. Nếu bạn chưa biết maven là gì hãy tham khảohttp://www.tutorialspoint.com/maven/

    Maven là một công cụ được xây dựng được sử dụng để xây dựng các đồ tạo tác Fuse. Kết hợp các tìm kiếm đầu tiên trong kho lưu trữ cục bộ Maven cho các tạo tác khi chúng tôi ra lệnh cài đặt tạo tác. Vì vậy, chúng ta phải cho Fuse biết nơi Maven được cài đặt và đường dẫn của kho lưu trữ cục bộ của Maven.

    Chỉnh sửa $ FUSE_INSTALLATION_DIR / etc /org.ops4j.paxurl.mvn.cfg

    Cập nhật hai thuộc tính sau:

    • org.ops4j.pax.url.mvn.settings = $ M2_HOME / conf /settings.xml
    • org.ops4j.pax.url.mvn.localRepository = $ local_repo

    Note - Hãy thay đổi $local_repo với đường dẫn thực tế của kho lưu trữ cục bộ của bạn được đề cập trong Mavens settings.xml.

    Chạy

    Sau khi thực hiện các thay đổi cấu hình cơ bản, bây giờ chúng ta có thể khởi động Fuse. Tất cả các tệp nhị phân để làm việc với Fuse đều nằm trong$FUSE_INSTALLATION_DIR.

    Có hai cách để khởi động Cầu chì -

    • Sử dụng ./fuse

      • Điều này sẽ cho phép bạn xem tất cả tiến trình và nhật ký trên cùng một cửa sổ mà bạn đã bắt đầu Fuse.

      • Nó sẽ cung cấp cho bạn bảng điều khiển Karaf trong cùng một thiết bị đầu cuối như hình dưới đây.

    Note- Điều này sẽ bắt đầu cầu chì trong chế độ giao diện điều khiển có nghĩa là quá trình Cầu chì cũng sẽ bị dừng khi người dùng đăng xuất khỏi phiên hoặc đóng Thiết bị đầu cuối mà điều này không mong muốn trong kịch bản sản xuất hoặc phát triển. Tập lệnh này chỉ nên được sử dụng để gỡ lỗi cầu chì.

    • Sử dụng ./start

      • Điều này sẽ không hiển thị bất kỳ nhật ký nào trên màn hình, thậm chí không phải là tiến trình nhưng điều này sẽ bắt đầu Cầu chì trong nền và dịch vụ Cầu chì sẽ không bị dừng khi người dùng thoát khỏi phiên hoặc đóng thiết bị đầu cuối.

      • Trong ứng dụng thế giới thực, loại hành vi này được mong muốn. Cầu chì sẽ chạy ẩn ngay cả khi chúng ta đóng thiết bị đầu cuối.

      • Nếu bạn muốn kết nối với Fuse chạy ngầm, bạn có thể sử dụng client script nằm trong cùng một thư mục.

      • Bạn sẽ nhận được màn hình như trong ảnh chụp màn hình sau.

      • Thoát khỏi tập lệnh máy khách sẽ không dừng dịch vụ Cầu chì. Nó sẽ chỉ đóng bảng điều khiển cầu chì.

    HAWTIO

    Fuse cũng cung cấp quyền truy cập GUI hoàn chỉnh vào nó bằng FMC (bảng điều khiển quản lý cầu chì). Bạn có thể tìm thấy GUI trên URL bên dướihttp://localhost:8181.

    Mọi thứ chúng tôi đã làm bằng cách thực thi các lệnh cũng có thể được thực hiện bằng cách truy cập GUI dựa trên trình duyệt này. Nó trở nên cực kỳ hữu ích khi chúng ta có nhiều hơn một vùng chứa và chúng ta đang chạy trong môi trường Vải.

    Trong chương này, chúng ta sẽ thảo luận về Apache Karaf và tại sao nó được gọi là Vùng chứa OSGi nhẹ cùng với các lợi ích và các tính năng quan trọng khác của nó.

    Vấn đề JVM

    Máy ảo JVM hoặc Java không hoạt động như một máy ảo thực tế. Máy sẽ cho phép bạn dừng, khởi động hoặc khởi động lại các thành phần chạy bên trong nó một cách nhanh chóng. Đôi khi nó có thể cho phép triển khai nóng ở cấp độ lớp nhưng không có cách nào bạn có thể triển khai hoặc hủy triển khai một thành phần của ứng dụng trong máy ảo của mình mà không cần khởi động lại nó.

    Để giải quyết vấn đề này và cho phép tính mô-đun trong ứng dụng Java, Fuse sử dụng thời gian chạy dựa trên OSGi được gọi là Apache Karaf.

    OSGi

    Công nghệ OSGi là một tập hợp các thông số kỹ thuật xác định một hệ thống thành phần động cho java. Các đặc tả này cho phép một mô hình phát triển trong đó các ứng dụng được cấu tạo (động) bởi nhiều thành phần khác nhau (có thể tái sử dụng).

    Lợi ích của OSGi

    • Reduced Complexity - Ứng dụng được xây dựng dưới dạng các thành phần cộng tác, ẩn các chi tiết triển khai của chúng với nhau dẫn đến giảm độ phức tạp.

    • Reusability - Nhiều thành phần có thể tận dụng cùng một thành phần được triển khai trong một vùng chứa.

    • Deployment - OSGi cung cấp hỗ trợ khởi động, dừng và cập nhật các thành phần một cách nhanh chóng với các API quản lý vòng đời của nó mà không cần khởi động lại vùng chứa.

    Tính năng gói Vs

    Sau đây là so sánh giữa Gói và Tính năng.

    Các gói tương đương với OSGi những gì các lọ đối với JVM. Gói là phần mềm có thể triển khai trong vùng chứa OSGi. Các gói là các thành phần hoạt động cùng nhau hoặc độc lập để tạo thành một ứng dụng.

    Các gói này có thể được cài đặt, gỡ cài đặt, cập nhật, bắt đầu hoặc dừng trong thời gian chạy mà không cần khởi động lại vùng chứa.

    Đặc trưng

    Tính năng là một cách triển khai nhiều gói cùng nhau. Đôi khi, việc triển khai các gói trong nhóm sẽ có ý nghĩa hơn. Các tính năng cho phép chúng tôi triển khai một nhóm các gói chỉ với một lệnh.

    Tại sao một Container khác?

    Apache Karaf là một thời gian chạy dựa trên OSGi, nó là nơi các gói Ứng dụng của chúng tôi chạy. Fuse sử dụng Apache Karaf làm thời gian chạy của nó, trong đó các gói chạy và cộng tác để cung cấp chức năng kinh doanh.

    Karaf được xây dựng trên Felix và Equinox là các Khung OSGi.

    Kiến trúc Karaf

    Apache Karaf thêm các chức năng bổ sung sau vào thời gian chạy OSGi cơ bản.

    Triển khai nóng

    Karaf hỗ trợ triển khai nóng. Nó chứa một thư mục triển khai nóng. Bất kỳ thứ gì được đặt trong thư mục này sẽ được tự động triển khai và cài đặt trong Karaf dưới dạng một gói.

    Ghi nhật ký

    Karaf cung cấp ghi nhật ký tập trung bằng cách tạo nhật ký cho tất cả các gói trong $Fuse_home/data/log. Chúng tôi có thể chỉnh sửa cấu hình trình ghi nhật ký trongorg.ops4j.pax.logging.cfg trong $Fuse_home/etc directory.

    Bảng điều khiển dành cho quản trị viên

    Karaf cung cấp Bảng điều khiển dành cho quản trị viên tinh vi và sáng suốt để tương tác với phiên bản cầu chì đang chạy. Nó cũng cung cấp một bộ lệnh được cài đặt sẵn có thể được sử dụng để quản lý và giám sát các thành phần (Gói) trong thời gian chạy. Bảng điều khiển này có thể mở rộng nên nó cho phép chúng tôi thêm các lệnh mới vào bảng điều khiển bằng cách thêm các gói mới vào bảng điều khiển.

    Quyền truy cập SSH

    Karaf cho phép truy cập từ xa vào Bảng điều khiển dành cho quản trị viên này bằng SSH. Bất kỳ ai có thông tin xác thực hợp lệ đều có thể kết nối với bảng điều khiển quản trị karaf qua thiết bị đầu cuối SSH.

    Trong chương này, chúng ta sẽ thảo luận về Apache Camel là gì và cách nó định tuyến dữ liệu hiệu quả giữa các điểm cuối, cùng với một vài ví dụ.

    Apache Camel là gì?

    Apache Camel là một khung tích hợp mã nguồn mở được bắt đầu vào đầu năm 2007.

    Đây là cách tiếp cận dựa trên EIP (Mô hình tích hợp doanh nghiệp) cung cấp một số triển khai các mẫu hình hộp có thể được sử dụng để giải quyết các vấn đề tích hợp doanh nghiệp. EIP không là gì khác ngoài các giải pháp đã được chứng minh cho các vấn đề được ghi nhận đầy đủ và lặp lại trong quá trình tích hợp doanh nghiệp.

    Camel còn được gọi là công cụ định tuyến và dàn xếp vì nó định tuyến dữ liệu hiệu quả giữa các điểm cuối, đồng thời chịu tải nặng như chuyển đổi định dạng dữ liệu, kết nối điểm cuối và nhiều hơn nữa.

    Ví dụ cơ bản

    Điều kiện tiên quyết để sử dụng Apache Camel là:

    • Java
    • Maven
    • Redhat JBoss Fuse 6.1-GA-379

    Tạo khung cơ bản của Ứng dụng

    mvn:archetype generate 
    –DgroupId = com.tutorialpoint.app 
    –DartifactId = camel-first-app 
    –DarchetypeGroupId = org.apache.camel.archetypes
    –DarchetypeArtifactId = camel-archetype-spring 
    –DinteractiveMode = false -X

    Điều này sẽ tạo ra cấu trúc thư mục sau.

    Đây là khung cơ bản của ứng dụng Camel của chúng tôi đang được tạo.

    Chỉnh sửa camel-context.xml

    Biên tập camel-first-app → src → main → resources → META-INF\spring\camel-context.xml để khớp như bên dưới

    <?xml version = "1.0" encoding = "UTF-8"?>
    <!-- Configures the Camel Context-->
    <beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring
       http://camel.apache.org/schema/spring/camel-spring.xsd">
    
       <camelContext xmlns = "http://camel.apache.org/schema/spring">
          <!-- here is a sample which processes the input file
             (leaving them in place - see the 'noop' flag) 
             then performs content based routing on the message using XPath -->
    			
          <route>
             <from uri = "file:///d:/src/data?noop=false"/>
             <choice>
                <when>
                   <xpath>/person/city = 'London'</xpath>
                   <log message = "UK message"/>
                   <to uri = "file:///d:/target/messages/uk"/>
                </when>
    				
                <otherwise>
                   <log message = "Other message"/>
                   <to uri = "file:///d:/target/messages/others"/>
                </otherwise>
    				
             </choice>
    			
          </route>
       </camelContext>
    </beans>

    Chỉnh sửa pom.xml

    Thêm mã sau vào bên trong <plugins> </plugins>

    <plugin>
       <groupId>org.apache.felix</groupId>
       <artifactId>maven-bundle-plugin</artifactId>
       <version>2.3.4</version>
       <extensions>true</extensions>
    	
       <configuration>
          <instructions>
             <Bundle-SymbolicName>
                ${project.artifactId}
             </Bundle-SymbolicName>
             <Import-Package>*</Import-Package>
          </instructions>
       </configuration>
    	
    </plugin>

    Thay đổi loại bao bì từ jar → bundle.

    <packaging>bundle</packaging>

    Xây dựng dự án bằng lệnh sau:

    mvn clean install

    Cài đặt dự án vào cầu chì

    Bắt đầu sử dụng cầu chì Fuse.bat/start.bat. Nếu bạn bắt đầu sử dụng Fusestart.bat, sử dụng client.batđể kết nối với cầu chì. 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:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT

    Kiểm tra xem Dự án của bạn có đang chạy không

    Bây giờ ứng dụng của bạn sẽ được cài đặt trong Fuse. Sao chép thư mục dữ liệu bên trongcamel-first-app và đặt nó vào D:/src/ và nó sẽ sao chép thông báo có city = London vào D:/target/merssages/uk.

    Đặt tệp đầu vào vào D:/src/data

    Input

    Message1.xml

    <?xml version = "1.0" encoding = "UTF-8"?>
    <person user = "james">
       <firstName>James</firstName>
       <lastName>Strachan</lastName>
       <city>London</city>
    </person>

    Message2.xml

    <?xml version = "1.0" encoding = "UTF-8"?>
    <person user = "hiram">
       <firstName>Hiram</firstName>
       <lastName>Chirino</lastName>
       <city>Tampa</city>
    </person>

    Output

    Trong D: / target / messages / uk

    <?xml version = "1.0" encoding = "UTF-8"?>
    <person user = "james">
       <firstName>James</firstName>
       <lastName>Strachan</lastName>
       <city>London</city>
    </person>

    Trong D: / target / messages / others

    <?xml version = "1.0" encoding = "UTF-8"?>
    <person user = "hiram">
       <firstName>Hiram</firstName>
       <lastName>Chirino</lastName>
       <city>Tampa</city>
    </person>

    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

    Trong chương này, chúng ta hãy thảo luận về Apache CXF là gì và nó có thể hữu ích như thế nào trong việc phát triển SOAP và Rest Web Services.

    Apache CXF là gì?

    Apache CXF là một khung phát triển dịch vụ web có thể được sử dụng để phát triển các dịch vụ web SOAP và Rest. CXF hoàn toàn tuân thủJAX-RS and JAX-Ws Tiêu chuẩn.

    Nó là khung phát triển dịch vụ web được sử dụng rộng rãi nhất bây giờ. CXF đã học hỏi và cải tiến hơn Axis2 hiện đang dần được thay thế bằng CXF.

    CXF so với Axis2

    CXF Axis2
    Cải tiến

    CXF là khung được sử dụng nhiều nhất cho đến nay.

    Nó có nhiều cải tiến so với Axis2

    Axis2 đang dần được thay thế bởi CXf.

    Nó yêu cầu nhiều mã hơn so với CXF

    Mã bắt buộc

    CXF yêu cầu ít mã hơn so với Axis2

    Axis2 yêu cầu nhiều mã hơn một cách tương đối

    Tuân thủ tiêu chuẩn

    CSF hoàn toàn tuân thủ JAX-RS và JAX-WS

    Axis2 không hoàn toàn tuân thủ JAX-RS và JAX-WS

    Tương thích với mùa xuân

    Đúng

    Không

    Tách các mặt trước

    Phân tách rõ ràng giao diện người dùng khỏi mã JAX-WS

    Không có phân tách sạch sẽ được cung cấp

    XÀ BÔNG TẮM

    SOAP là viết tắt của Simple Object Access Protocol. Nó là một giao thức để trao đổi thông tin có cấu trúc qua các dịch vụ web giữa hai hệ thống. Nó chủ yếu dựa vào XML để cấu trúc dữ liệu và sử dụng HTTP hoặc SMTP để đàm phán và truyền thông điệp.

    Có hai cách tiếp cận để phát triển các dịch vụ web SOAP -

    • Code first - Trong cách tiếp cận này, WSDL được tạo ra từ mã.

    • Contract first - Trong hợp đồng đầu tiên, mã được tạo từ WSDL.

    Phát triển SOAP bằng CXF

    Định cấu hình Maven

    Thêm cấu hình sau vào settings.xml của Maven.

    <profiles>
       <profile>
          <id>Jboss-Fuse</id>
    		
          <activation>
             <activeByDefault>true</activeByDefault>
          </activation>
    		
          <repositories>
             <repository>
                <id>fusesource</id>
                <url>http://repo.fusesource.com/nexus/content/groups/public/</url>
                <snapshots>
                   <enabled>false</enabled>
                </snapshots>
                <releases>
                   <enabled>true</enabled>
                </releases>
             </repository>
          </repositories>
    		
       </profile>
    </profiles>

    Tạo bộ xương

    mvn archetype:generate
    -DarchetypeGroupId = org.apache.servicemix.tooling 
    -DarchetypeArtifactId = servicemix-cxf-code-first-osgi-bundle 
    -DarchetypeVersion=2012.01.0.redhat-60024 
    -DgroupId = org.fusesource.example 
    -DartifactId = cxf-basic 
    -Dversion = 1.0-SNAPSHOT

    Build Web Service Project.

    mvn clean install

    Install web-service into Fuse using the following command.

    JBossFuse:karaf@root>install -s mvn:org.fusesource.example/cxf-basic/1.0-SNAPSH

    Check if bundle has registered SOQP web-service

    Mở URL http://localhost:8181/cxf

    Dịch vụ web sẽ được liệt kê như sau.

    Testing Web-Service

    mvn -Pclient

    INFO - Tạo dịch vụ {http://ws.totorials.com/} PersonService từ lớp com.to

    torials.ws.Person
    Invoking getPerson...
    getPerson._getPerson_personId = Guillaume
    getPerson._getPerson_ssn = 000-000-0000
    getPerson._getPerson_name = Guillaume
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 30.668 s
    [INFO] Finished at: 2016-02-15T21:01:20+05:30
    [INFO] Final Memory: 10M/37M
    [INFO] ------------------------------------------------------------------------

    Để bắt đầu, REST là viết tắt của Chuyển trạng thái đại diện. Đó là một cách phát triển các dịch vụ web dựa trên giao thức client-server ít trạng thái, có thể lưu vào bộ nhớ cache, là HTTP trong hầu hết các trường hợp.

    Dịch vụ web REST sử dụng các yêu cầu HTTP để đăng, lấy, xóa dữ liệu khỏi mạng.

    Phát triển REST sử dụng CXF

    Tạo một dự án bắt đầu nhanh Maven đơn giản

    mvn archetype:generate 
    -DgroupId = com.tuts.abhinav 
    -DartifactId = rest-service
    -DarchetypeArtifactId = maven-archetype-quickstart 
    -DinteractiveMode = false

    Thêm phụ thuộc

    <dependency>
       <groupId>org.apache.servicemix.specs</groupId>
       <artifactId>org.apache.servicemix.specs.jsr311-api-1.1.1</artifactId>
       <version>1.9.0</version>
       <scope>provided</scope>
    </dependency>
    
    <dependency>
       <groupId>org.apache.servicemix</groupId>
       <artifactId>servicemix-http</artifactId>
       <version>2013.01</version>
    </dependency>
    
    <dependency>
       <groupId>log4j</groupId>
       <artifactId>log4j</artifactId>
       <version>1.2.16</version>
    </dependency>

    Thêm hướng dẫn xây dựng

    <build>
       <defaultGoal>install</defaultGoal>
       <plugins>
          <plugin>
             <groupId>org.apache.felix</groupId>
             <artifalctId>maven-bundle-plugin</artifactId>
             <version>2.3.4</version>
             <extensions>true</extensions>
    			
             <configuration>
                <instructions>
                   <Bundle-SymbolicName>rest-example-database-post-method
                      </Bundle-SymbolicName>
                   <Import-Package>* </Import-Package>
                </instructions>
             </configuration>
    			
          </plugin>
       </plugins>
    </build>

    Thêm kho chứa plugin cầu chì

    <pluginRepositories>
       <pluginRepository>
          <id>fusesource.m2</id>
          <name>FuseSource Community Release Repository</name>
          <url>http://repo.fusesource.com/nexus/content/repositories/releases</url>
          <snapshots>
             <enabled>false</enabled>
          </snapshots>
    		
          <releases>
             <enabled>true</enabled>
          </releases>
       </pluginRepository>
    <pluginRepositories>

    Thêm kho

    <repositories>
       <repository>
          <id>fusesource.m2</id>
          <name>FuseSource Community Release Repository</name>
          <url>http://repo.fusesource.com/nexus/content/repositories/releases</url>
          <snapshots>
             <enabled>false</enabled>
          </snapshots>
    		
          <releases>
             <enabled>true</enabled>
          </releases>
    		
       </repository>
    	
       <repository>
          <id>fusesource.ea</id>
          <name>FuseSource Community Early Access Release Repository</name>
          <url>http://repo.fusesource.com/nexus/content/groups/ea</url>
          <snapshots>
             <enabled>false</enabled>
          </snapshots>
          <releases>
             <enabled>true</enabled>
          </releases>
       </repository>
    	
    </repositories>

    Tạo lớp dịch vụ

    Tạo lớp UserService.java dưới com / tuts /

    package com.tuts;
    
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    @Path("/UserService_1")
    public class UserService {
       @GET
       @Path("/get_data")
       @Produces(MediaType.APPLICATION_JSON)
    	
       public String getUser() {
          String reponse = "This is standard response from REST";
          return reponse;
       }
    }

    Tạo Blueprint.xml

    Tạo blueprint.xml trong / src / main / resources / OSGI-INF / blueprint blueprint.xml

    <?xml version = "1.0" encoding = "UTF-8"?>
    <blueprint xmlns = "http://www.osgi.org/xmlns/blueprint/v1.0.0"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:jaxrs = "http://cxf.apache.org/blueprint/jaxrs"
       xsi:schemaLocation = "http://www.osgi.org/xmlns/blueprint/v1.0.0 
       http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
       http://cxf.apache.org/blueprint/jaxrs 
       http://cxf.apache.org/schemas/blueprint/jaxrs.xsd">
    	
       <jaxrs:server id = "service" address = "/users">
          <jaxrs:serviceBeans>
             <ref component-id = "userService" />
          </jaxrs:serviceBeans>
       </jaxrs:server>
    	
       <bean id = "userService" class = "com.tuts.UserService" />
    </blueprint>

    Cài đặt dịch vụ Rest trong Fuse

    install -s mvn:com.tuts.abhinav/rest-service/1.0-SNAPSHOT

    Kiểm tra xem Gói có Dịch vụ Web đã Đăng ký hay không

    Mở URL http://localhost:8181/cxf

    Kiểm tra dịch vụ web

    Mở URL http://localhost:8181/cxf/users12/UserService_1/get_data

    Trong chương này, chúng ta sẽ tìm hiểu về ActiveMQ và cách nó hoạt động như một người môi giới các thông điệp để cho phép các ứng dụng giao tiếp với nhau.

    AMQ là gì?

    ActiveMQ là một trình môi giới thông báo mã nguồn mở được viết bằng Java. Nó hoàn toàn tuân thủ các tiêu chuẩn JMS 1.1.

    JMS là một đặc tả cho phép phát triển hệ thống dựa trên tin nhắn. ActiveMQ hoạt động như một nhà môi giới các thông điệp nằm giữa các ứng dụng và cho phép chúng giao tiếp theo cách không đồng bộ và đáng tin cậy.

    Các loại nhắn tin

    Có hai loại tùy chọn nhắn tin được giải thích bên dưới để hiểu rõ hơn.

    Chỉ đến điểm

    Trong kiểu giao tiếp này, người môi giới chỉ gửi tin nhắn đến một người tiêu dùng, trong khi những người tiêu dùng khác sẽ đợi cho đến khi họ nhận được tin nhắn từ người môi giới. Không người tiêu dùng nào sẽ nhận được cùng một thông điệp.

    Nếu không có người tiêu dùng, Nhà môi giới sẽ giữ các thông điệp cho đến khi có người tiêu dùng. Loại giao tiếp này còn được gọi làQueue based communicationtrong đó Nhà sản xuất gửi thông báo đến hàng đợi và chỉ một người tiêu dùng nhận được một thông báo từ hàng đợi. Nếu có nhiều hơn một người tiêu dùng, họ có thể nhận được thông báo tiếp theo nhưng họ sẽ không nhận được thông báo tương tự như người tiêu dùng khác.

    Theo dõi công khai

    Trong kiểu giao tiếp này, Nhà môi giới sẽ gửi một bản sao thông điệp giống nhau đến tất cả những người tiêu dùng đang hoạt động. Loại giao tiếp này còn được gọi làTopic based communicationnơi người môi giới gửi cùng một thông điệp đến tất cả người tiêu dùng đang hoạt động đã đăng ký Chủ đề cụ thể. Mô hình này hỗ trợ giao tiếp một chiều mà không cần xác minh thông điệp đã truyền.

    Tạo hàng đợi và chủ đề

    Cầu chì đi kèm với ActiveMQ. Chúng tôi có thể truy cập ActiveMQ bằng bảng điều khiển FMC (giao diện dựa trên trình duyệt để làm việc với AMQ).

    Đăng nhập FMC bằng localhost:8181 và chọn ActiveMQ chuyển hướng.

    • Nhấp vào + Tạo
    • Nhập hàng đợi / tên chủ đề
    • Chọn Hàng đợi / Chủ đề từ nút radio
    • Nhấp vào Tạo hàng đợi / Tạo chủ đề

    Bây giờ bạn sẽ có thể thấy TestQ được tạo dưới gốc → Hàng đợi →

    Để kiểm tra chủ đề đã tạo theo root → Chủ đề.

    Duyệt / Xóa nội dung của Hàng đợi

    • Đăng nhập FMC bằng localhost:8181

    • Chọn tab ActiveMQ

    • Gốc → Hàng đợi → TestQ <chọn hàng đợi bạn muốn duyệt> → Duyệt

    • Để kiểm tra nội dung của tin nhắn này, hãy nhấp vào tin nhắn cụ thể đó.
    • Bạn có thể xóa một tin nhắn cụ thể bằng cách nhấp vào nút Xóa được hiển thị ở góc trên cùng bên phải

    Trong chương này, chúng ta sẽ tìm hiểu những kiến ​​thức cơ bản về cách ActiveMQ hoạt động với Camel.

    Cấu hình thành phần ActiveMQ

    Trước khi chúng ta có thể sử dụng hàng đợi hoặc chủ đề ActiveMQ trong mã của mình, chúng ta phải định cấu hình ActiveMQComponent. Cấu hình tối thiểu của ActiveMQComponent có thể được thực hiện như được hiển thị trong chương trình sau:

    <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
       <property name = "brokerURL" value = "tcp://localhost:61616"/>
       <property name = "userName" value = "admin"/>
       <property name = "password" value = "admin"/>
    </bean>
    • brokerURL - Chỉ định máy chủ và cổng cho AMQ Broker.

    • username - Chỉ định tên người dùng để sử dụng để kết nối với AMQ Broker.

    • password - chỉ định mật khẩu để kết nối với AMQ Broker.

    Kết nối với hàng đợi

    Bây giờ chúng ta đã cấu hình ActiveMQComponent, chúng ta có thể sử dụng nó trong CamelContext làm điểm cuối.

    Chúng tôi sẽ sử dụng điểm cuối AMQ ở định dạng sau:

    Activemq:[queue|topic]:[queueName|topicName]

    Viết tin nhắn cho AMQ

    <?xml version = "1.0" encoding="UTF-8"?>
    <!-- Configures the Camel Context-->
    <beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring
       http://camel.apache.org/schema/spring/camel-spring.xsd">

    Sau khi triển khai gói này trong vùng chứa Fuse, bạn sẽ có thể xem các thông báo được đăng lên AMQ đã được đặt dưới dạng tệp trong D:/src/data.

    Input

    D: /src/data/input.txt

    Test me

    Output

    Đọc từ AMQ

    <?xml version = "1.0" encoding = "UTF-8"?>
    <!-- Configures the Camel Context-->
    
    <beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring
       http://camel.apache.org/schema/spring/camel-spring.xsd">
    	
       <camelContext xmlns = "http://camel.apache.org/schema/spring">
          <!-- here is a sample which processes the input files
             (leaving them in place - see the 'noop' flag)
              then performs content based routing on the message using XPath -->
    			 
          <route>
             <from uri = "activemq:queue:TestQ"/>
             <to uri = "file:///d:/src"/>
          </route>
       </camelContext>
    	
       <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
          <property name = "brokerURL" value = "tcp://localhost:61616"/>
          <property name = "userName" value = "admin"/>
          <property name = "password" value = "admin"/>
       </bean>
    	
    </beans>

    Input

    Sau khi triển khai gói này, bạn sẽ thấy một tệp được tạo trong D: / src và các thông báo được sử dụng. Cũng nên hiển thị Người tiêu dùng cho Hàng đợi đó.

    Output

    D: / src

    Test me

    Viết theo chủ đề

    <?xml version = "1.0" encoding = "UTF-8"?>
    <!-- Configures the Camel Context-->
    <beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring 
       http://camel.apache.org/schema/spring/camel-spring.xsd">
    	
       <camelContext xmlns = "http://camel.apache.org/schema/spring">
          <!-- here is a sample which processes the input files
             (leaving them in place - see the 'noop' flag)
              then performs content based routing on the message using XPath -->
    			 
          <route>
             <from uri = "file:///d:/src"/>
             <to uri = "activemq:topic:TestTopic” />
          </route>
       </camelContext>
    	
       <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
          <property name = "brokerURL" value = "tcp://localhost:61616"/>
          <property name = "userName" value = "admin"/>
          <property name = "password" value = "admin"/>
       </bean>
    	
    </beans>

Đọc từ chủ đề

<?xml version = "1.0" encoding = "UTF-8"?>
<!-- Configures the Camel Context-->
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "
   http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://camel.apache.org/schema/spring 
   http://camel.apache.org/schema/spring/camel-spring.xsd">
	
   <camelContext xmlns = "http://camel.apache.org/schema/spring">
      <!-- here is a sample which processes the input files
         (leaving them in place - see the 'noop' flag)
         then performs content based routing on the message using XPath -->
			
      <route>
         <from uri = "activemq:topic:TestTopic"/>
         <to uri = "file:///d:/src2"/>
      </route>
   </camelContext>
	
   <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
      <property name = "brokerURL" value="tcp://localhost:61616"/>
      <property name = "userName" value = "admin"/>
      <property name = "password" value = "admin"/>
   </bean>
	
</beans>

Input

D: /src/file1.xml

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

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

<order>
   <data>
      <value>value3</value>
   </data>
</order>

Output

D: / src /

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

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

<order>
   <data>
      <value>value3</value>
   </data>
</order>

Vải là gì?

Vải cung cấp khả năng quản lý và điều phối cho nhiều phiên bản Cầu chì. Vải cho phép chúng tôi kiểm soát tất cả các phiên bản Cầu chì được kết nối với nó từ một điểm duy nhất. Một hộp chứa Cầu chì bình thường có thể được chuyển đổi để hoạt động như một Vải. Vải có sổ đăng ký vải trong đó đóng vai trò là kho dữ liệu chứa tất cả thông tin liên quan đến các thùng chứa, nó quản lý.

Tại sao Vải?

Vải có những khả năng đặc biệt sau đây làm cho nó trở thành một ứng cử viên lý tưởng để sử dụng trong các môi trường phân tán.

  • Giám sát trạng thái của tất cả các vật chứa trong vải.
  • Khởi động và dừng các thùng chứa từ xa.
  • Cung cấp vùng chứa từ xa để chạy một ứng dụng cụ thể.
  • Nâng cấp ứng dụng và tung ra các bản vá trong hệ thống trực tiếp.
  • Khởi động và cung cấp nhanh chóng với các thùng chứa mới, chẳng hạn như để đối phó với việc tăng tải trên hệ thống.

Thiết lập vải

Tạo vải

Hộp chứa cầu chì bình thường có thể được chuyển đổi thành Vải bằng cách sử dụng lệnh sau

fabric: create --clean --zookeeper-password myZooPass

Kết nối thùng chứa khác với Vải -

fabric:join --zookeeper-password myZooPass <fabric_host>:2181 Cont1

Note - Vui lòng thay thế <fnai_host> bằng tên máy chủ thực tế mà vải đang chạy.

Khi bạn đăng nhập vào Bảng điều khiển quản lý cầu chì từ trình duyệt của mình bằng localhost:8181, bạn sẽ có thể thấy hai vùng chứa như được hiển thị trong ảnh chụp màn hình sau. Hộp chứa Vải được biểu thị bằng biểu tượng đám mây nhỏ ở phía trước.

Hồ sơ

Hồ sơ chứa thông tin sau:

  • Các gói sẽ được cài đặt
  • Các tính năng được cài đặt
  • Các cấu hình được áp dụng

Hồ sơ cung cấp một cách trong môi trường vải để cài đặt cùng một tập hợp các gói, tính năng và cấu hình trên nhiều máy chủ.

Nếu cùng một cấu hình được áp dụng cho nhiều vùng chứa và chúng tôi thực hiện các thay đổi đối với cấu hình đó từ bất kỳ vùng chứa nào thì các thay đổi tương tự sẽ được triển khai tự động cho các vùng chứa còn lại mà nó được áp dụng.

Tạo hồ sơ

  • Đăng nhập vào FMC localhost:8181

  • Thời gian chạy → Quản lý

  • Ở phía bên trái dưới menu Hồ sơ, nhấp vào +

Nhập tên bạn muốn đặt cho hồ sơ và nhấp vào tạo.

Sau đó, hồ sơ sẽ được tạo.

Áp dụng hồ sơ cho vùng chứa

Thời gian chạy → Vùng chứa → gốc (chọn vùng chứa bạn muốn)

Nhấp chuột Addđiều này sẽ dẫn đến một hộp bật lên. Tìm kiếm hồ sơ bạn muốn và sau đó nhấp lạiAdd.

Hồ sơ sẽ được hiển thị trong danh sách như trong ảnh chụp màn hình sau.

Triển khai một gói

Để triển khai một gói, hãy sử dụng đường dẫn sau:

Thời gian chạy → Vùng chứa → gốc (chọn vùng chứa bạn muốn) → First_profile (chọn cấu hình)

Nhấp vào tab Gói. Đặt đường dẫn gói theo định dạng sau và sau đó nhấp vào+.

mvn:group.id/artifact.id/version

Ví dụ: mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT

Một gói sẽ được thêm vào hồ sơ và sẽ được triển khai trên tất cả các vùng chứa mà hồ sơ được chỉ định.

Hủy triển khai một gói

Để hủy triển khai một gói, hãy sử dụng đường dẫn sau:

Thời gian chạy → Vùng chứa → gốc (chọn vùng chứa bạn muốn) → First_profile (chọn cấu hình)

Nhấp vào tab Gói và tìm kiếm gói bạn muốn xóa, sau đó nhấp vào X. Gói sẽ bị xóa khỏi tất cả các vùng chứa mà cấu hình được áp dụng.

Vùng chứa con cung cấp cách dễ dàng nhất để quản lý tải ngày càng tăng. Khi hệ thống gặp tải trọng đột ngột trong giao thông và một container không thể đối phó với tải, chúng ta có thể dễ dàng tạo một tập hợp các container con và phân phối tải giữa chúng, thay vì tạo một container mới hoàn chỉnh.

Tạo vùng chứa con

Đăng nhập FMC bằng localhost:8181

Bây giờ, hãy làm theo đường dẫn: Runtime → container → + Create (nút ở bên tay phải)

Nhập các chi tiết như tên con, vùng chứa mẹ Số bản sao, v.v.

Nhấp chuột Create And Start Container

Quản lý vùng chứa con

Vùng chứa Con chỉ hoạt động như một vùng chứa thông thường.

Dừng một vùng chứa con

Để dừng vùng chứa con, hãy làm theo đường dẫn: Runtime → Vùng chứa → Con1

Nhấp vào Dừng để dừng Vùng chứa con.

Khởi động vùng chứa con

Để bắt đầu một vùng chứa con, hãy làm theo đường dẫn: Runtime → Vùng chứa → Con1

Nhấp vào Bắt đầu để bắt đầu vùng chứa con.

Trong chương này, chúng ta sẽ thảo luận một số vấn đề đã biết mà bạn có thể gặp phải khi làm việc với Fuse. Chúng tôi cũng sẽ thảo luận về cách bạn có thể vượt qua những vấn đề này.

Thay đổi mã không được phản ánh

Kết nối với phiên bản Fuse bằng cách sử dụng tập lệnh máy khách. Tìm kiếm gói mà bạn đang gặp sự cố, sử dụng lệnh sau.

JBossFuse:karaf@root > list|grep <Bundle Description>
For Example:
JBossFuse:karaf@root > list|grep Camel
[ 255] [Active ] [ ] [ ] [ 60] Fabric8 :: Camel Component (1.0.0.redhat-379)
[ 266] [Active ] [ ] [Started] [ 60] A Camel Spring Route (1.0.0.SNAPSHOT)

Note - ID gói cho gói từ đầu ra của lệnh trên và sử dụng lệnh dưới.

JBossFuse:karaf@root > update <bundle id>
JBossFuse:karaf@root > update 266

Gói không được tải xuống

Nó có thể xảy ra vì hai lý do sau:

  • Kho lưu trữ Maven không được chỉ định
  • Gói không có trong kho

Kho lưu trữ Maven không được chỉ định

Maven là một công cụ được xây dựng được sử dụng để xây dựng các đồ tạo tác Fuse. Ngắt tìm kiếm đầu tiên trong kho lưu trữ cục bộ Maven cho các tạo tác, khi chúng tôi ra lệnh cài đặt tạo tác. Vì vậy, chúng ta phải cho Fuse biết nơi Maven được cài đặt và đường dẫn của kho lưu trữ cục bộ Mavens.

Chỉnh sửa $ FUSE_INSTALLATION_DIR / etc /org.ops4j.paxurl.mvn.cfg

Cập nhật hai thuộc tính sau:

  • org.ops4j.pax.url.mvn.settings = $ M2_HOME / conf /settings.xml
  • org.ops4j.pax.url.mvn.localRepository = $ local_repo

Note - Vui lòng thay đổi $ local_repo bằng đường dẫn thực tế của kho lưu trữ cục bộ của bạn được đề cập trong Mavens settings.xml

Gói không có trong kho lưu trữ

Nếu cài đặt Maven đã sẵn sàng nhưng vẫn gặp sự cố khi tải xuống gói, hãy đảm bảo các gói JAR hiện có ở vị trí chính xác trong Maven Repository.

Ví dụ: nếu gói sau gặp lỗi khi tải xuống -

mvn:com.tutorialpoint.app/camel-first-app/1.0-SNAPSHOT

Chúng tôi phải kiểm tra $ M2_REPO / com / tutorialpoint / app / camel-first-app / 1.0-SNAPSHOT nếu có JAR thực sự.

Note - $ M2_REPO cần được thay thế bằng đường dẫn thực tế của kho lưu trữ Maven mà chúng ta đã cấu hình Fuse để sử dụng.

Không thể đăng nhập vào FMC (GUI dựa trên trình duyệt)

Users not Created - Nếu bạn đang nhận được giao diện người dùng sau nhưng không thể đăng nhập với thông báo “Đăng nhập không thành công, Bị cấm”.

Kiểm tra xem bạn đã thêm người dùng vào chưa $FUSE_INSTALLATION_HOME/etc/users.properties

Định dạng chính xác để thêm người dùng là -

Username = Password,Role

Cổng HAWTIO là khác nhau

Nếu bạn thậm chí không thể tải giao diện người dùng tại localhost: 8181 trong trình duyệt, hãy kiểm tra xem bạn đã đề cập đúng cổng trong URL chưa.

$FUSE_INSTALLATION_HOME/etc/org.ops4j.pax.web.cfg

Chỉnh sửa thuộc tính sau trong tệp để sử dụng cổng bạn muốn truy cập.

org.osgi.service.http.port=8181

AMQ Broker không hoạt động

Đảm bảo rằng cổng 61616 đang mở và hiện không được sử dụng bởi cổng khác. Nếu bạn muốn thay đổi cổng 61616 mặc định cho giống nhau, bạn có thể chỉnh sửa nó trong$FUSE_INSTALLATION_HOME/etc/System.properties

activemq.port = 61616