Chính xác thì lạc đà Apache là gì?


1360

Tôi không hiểu chính xác những gì Camel làm.

Nếu bạn có thể đưa ra 101 từ giới thiệu về Camel:

  • Chính xác thì nó là gì?
  • Làm thế nào để nó tương tác với một ứng dụng được viết bằng Java?
  • Nó có phải là một cái gì đó đi cùng với máy chủ?
  • Đây có phải là một chương trình độc lập?

Hãy giải thích Lạc đà là gì.

Câu trả lời:


719

Nếu bạn có 5 đến 10 phút, tôi thường khuyên mọi người nên đọc Tích hợp này với Lạc đà Apache của Jonathan Anstey. Đây là một tác phẩm được viết tốt giới thiệu ngắn gọn và tổng quan về một số khái niệm của Camel và nó thực hiện một trường hợp sử dụng với các mẫu mã. Trong đó, Jonathan viết:

Apache Camel là một khung công tác Java mã nguồn mở tập trung vào việc làm cho việc tích hợp trở nên dễ dàng hơn và dễ tiếp cận hơn đối với các nhà phát triển. Nó thực hiện điều này bằng cách cung cấp:

  • triển khai cụ thể của tất cả các Mẫu tích hợp doanh nghiệp (EIP) được sử dụng rộng rãi
  • kết nối với nhiều loại vận tải và API
  • dễ dàng sử dụng Ngôn ngữ cụ thể miền (DSL) để kết nối EIP và vận chuyển với nhau

Ngoài ra còn có một chương miễn phí về Lạc đà trong hành động giới thiệu Lạc đà trong chương đầu tiên. Jonathan là đồng tác giả của cuốn sách đó với tôi.


55
Cuốn sách Camel in Action là một cuốn sách rất hay để tìm hiểu những điều cơ bản và cũng như cách sử dụng một số tính năng phức tạp hơn của Camel. Tôi khuyên bạn nên nó! (Tôi không có cách nào liên kết với cuốn sách hoặc nhà xuất bản)
Matt Aldridge

2
@Cách nếu muốn chọn giữa con la ESB & Lạc đà. điều gì nên làm tôi thất vọng khi chọn người này
kuhajeyan

8
Xem một số liên kết khi so sánh với các đối thủ của Camels tại: camel.apache.org/articles.html .
Claus Ibsen

1
Vâng, hoàn toàn có thể được sử dụng để kết nối microservice, sau tất cả chỉ là một bộ công cụ / khung công tác Java nhỏ. Cuốn sách Camel in Action phiên bản 2 có một chương đầy đủ về Camel microservice.
Claus Ibsen

1
"Mô hình tích hợp doanh nghiệp (EIP)" bạn hỏi là gì? Tất cả những gì bạn phải làm để tìm hiểu là "Mua cuốn sách Các mô hình tích hợp doanh nghiệp ..."
Jose Quinteiro

1130

Tôi đưa ra để mô tả điều này theo một cách dễ tiếp cận hơn ...

Để hiểu Apache Camel là gì, bạn cần hiểu Mô hình tích hợp doanh nghiệp là gì.

Hãy bắt đầu với những gì chúng ta có lẽ đã biết: Mẫu Singleton, mẫu Factory, v.v; Chúng chỉ đơn thuần là cách tổ chức giải pháp của bạn cho vấn đề, nhưng bản thân chúng không phải là giải pháp. Những mẫu này đã được Gang of Four phân tích và trích xuất cho phần còn lại của chúng tôi, khi họ xuất bản cuốn sách của họ: Mẫu thiết kế . Họ đã cứu một số người trong chúng tôi nỗ lực rất lớn trong việc nghĩ cách cấu trúc tốt nhất mã của chúng tôi.

Giống như Gang of Four, Gregor Hohpe và Bobby Woolf là tác giả của cuốn sách Các mô hình tích hợp doanh nghiệp (EIP) trong đó họ đề xuất và ghi lại một tập hợp các mẫu và bản thiết kế mới để chúng ta có thể thiết kế tốt nhất các hệ thống dựa trên thành phần lớn, nơi các thành phần có thể chạy trên cùng một quy trình hoặc trong một máy khác.

Về cơ bản, họ đề xuất rằng chúng tôi cấu trúc hệ thống của mình theo hướng thông điệp - nơi các thành phần giao tiếp với nhau bằng cách sử dụng tin nhắn làm đầu vào và đầu ra và hoàn toàn không có gì khác. Chúng cho chúng ta thấy một tập hợp đầy đủ các mẫu mà chúng ta có thể chọn và thực hiện trong các thành phần khác nhau sẽ cùng nhau tạo thành toàn bộ hệ thống.

Vậy lạc đà Apache là gì?

Apache Camel cung cấp cho bạn các giao diện cho EIP, các đối tượng cơ sở, các triển khai cần thiết, công cụ gỡ lỗi, hệ thống cấu hình và nhiều trình trợ giúp khác giúp bạn tiết kiệm rất nhiều thời gian khi bạn muốn thực hiện giải pháp của mình để theo EIP.

Lấy MVC. MVC trên lý thuyết khá đơn giản và chúng tôi có thể thực hiện nó mà không cần bất kỳ trợ giúp khung nào. Nhưng các khung MVC tốt cung cấp cho chúng tôi cấu trúc sẵn sàng sử dụng và đã đi xa hơn và nghĩ ra tất cả những thứ "phụ" khác mà bạn cần khi bạn tạo một dự án MVC lớn và đó là lý do tại sao chúng tôi sử dụng chúng hầu hết thời gian.

Đó chính xác là những gì Apache Camel dành cho EIP. Đó là một khuôn khổ sẵn sàng sản xuất hoàn chỉnh cho những người muốn thực hiện giải pháp của họ để tuân theo EIP.


183
Đây có lẽ là câu trả lời tốt nhất cho câu hỏi. Tất cả các câu trả lời khác cũng khó hiểu như tất cả các bài viết khác trên internet
Nerrve

19
EIP là chìa khóa. Nếu bạn không hiểu EIP, bạn có thể sử dụng Lạc đà như người mù và voi (lạc đà). EIP - eaipotypes.com
hutingung 16/07/14

22
+50 cho câu trả lời này - bắt đầu bằng phần giới thiệu cho EIP và tương tự nó với GOF và MVC & framework. Từ câu hỏi, có vẻ như OP không có ý tưởng về EIP. Tôi đã ở trong cùng một chiếc thuyền, trước khi đọc câu trả lời này
Học viên

6
Mô tả này nên được thêm vào trang chủ Apache Camel vì nó trả lời câu hỏi và sau đó là một số. Chính xác là việc anh ta sử dụng phép tương tự với MVC được viết tay hoặc bằng cách sử dụng một 'công cụ' để hỗ trợ thực hiện câu trả lời này đã cho tôi một sự hiểu biết mà không cần phải lướt qua các liên kết (hữu ích) vô tận khác khi tất cả những gì cần thiết là sự cô đọng này câu trả lời.
Azkuma

2
Một chút vấn đề về EIP: "Đã có nhiều thư viện và khung trong nhiều năm qua để hỗ trợ. Nhưng thường các khái niệm đằng sau các Mô hình Tích hợp Doanh nghiệp được chuyển đổi thành một số phân cấp hoặc đối tượng lớp phức tạp cần được nối với nhau và các ý định và mẫu ban đầu thường bị mất. Nhà phát triển buộc phải tập trung vào chi tiết cấp thấp và một số API thư viện lớp phức tạp, làm mất hình ảnh và mẫu lớn hơn. "
Quan Nguyễn

659

Tạo một mô tả dự án không nên phức tạp.

Tôi nói:

Apache Camel là công nghệ nhắn tin keo với định tuyến. Nó kết hợp các điểm bắt đầu và kết thúc nhắn tin cho phép chuyển các tin nhắn từ các nguồn khác nhau đến các điểm đến khác nhau. Ví dụ: JMS -> JSON, HTTP -> JMS hoặc FTP kênh -> JMS, HTTP -> JMS, JSON -> JMS

Wikipedia nói:

Apache Camel là một công cụ định tuyến và hòa giải dựa trên quy tắc, cung cấp một triển khai đối tượng Java dựa trên các Mẫu tích hợp doanh nghiệp bằng cách sử dụng API (hoặc Ngôn ngữ cụ thể miền Java khai báo) để định cấu hình quy tắc định tuyến và hòa giải. Ngôn ngữ cụ thể của miền có nghĩa là Apache Camel có thể hỗ trợ hoàn thành quy tắc định tuyến thông minh an toàn loại trong IDE của bạn bằng cách sử dụng mã Java thông thường mà không cần số lượng lớn tệp cấu hình XML; mặc dù cấu hình XML bên trong Spring cũng được hỗ trợ.

Xem? Điều đó không khó phải không?


307
Trang chủ Apache Camel đề cập đến chủ đề này ... Họ đã không quản lý để cung cấp một lời giải thích chức năng ngắn cho sản phẩm của chính họ.
youri

15
Bài viết này là một ví dụ điển hình về cách phê bình mang tính xây dựng và nỗ lực trung thực có thể tạo ra tài liệu cao siêu. Nó là một tính năng trên trang web chính thức của Camel. Nhưng hãy giữ nó mang tính xây dựng và tránh gắn thẻ tên. Các nhà văn tài liệu và những người đóng góp khác đôi khi rất khó để đi cùng, và họ xứng đáng với sự tôn trọng của chúng tôi. BTW - chúng tôi có nhiều tiêu chuẩn mã hóa java ... và luôn tự hào và tôn vinh nó ... còn một tiêu chuẩn tài liệu cho các phương tiện truyền thông như Wiki và Hướng dẫn chính thức thì sao?
YoYo

1
Nó giống như một proxy ngược hạt mịn?
Asad Hasan

1
Tôi tìm thấy câu trả lời này thông qua liên kết trang chủ Camel. Điều đó làm tôi ngạc nhiên rằng họ không trích dẫn nó trực tiếp trên trang của họ hoặc thậm chí liên kết đến câu trả lời cụ thể.
Jelling

9
Bây giờ, đây là những gì tôi gọi là sắc nét và câu trả lời điểm. Kỳ lạ thay, câu trả lời được chấp nhận trông giống như một quảng cáo. +1
EMM

120

Nói ngắn gọn:

Khi có yêu cầu kết nối / tích hợp hệ thống, có thể bạn sẽ cần kết nối với một số nguồn dữ liệu và sau đó xử lý dữ liệu này để phù hợp với yêu cầu kinh doanh của bạn.

Để làm điều đó:

1) Bạn có thể phát triển chương trình tùy chỉnh sẽ làm điều đó (có thể tốn thời gian và khó hiểu, duy trì cho nhà phát triển khác)

2) Ngoài ra, bạn có thể sử dụng Apache Camel để thực hiện theo cách được tiêu chuẩn hóa (nó có hầu hết các trình kết nối đã được phát triển cho bạn, bạn chỉ cần thiết lập và cắm logic của mình - được gọi là Quá trình):

Lạc đà sẽ giúp bạn:

  1. Sử dụng dữ liệu từ bất kỳ nguồn / định dạng
  2. Xử lý dữ liệu này
  3. Dữ liệu đầu ra cho bất kỳ nguồn / định dạng

Bằng cách sử dụng Apache Camel, bạn sẽ dễ dàng hiểu / duy trì / mở rộng hệ thống của mình cho nhà phát triển khác.

Apache Camel được phát triển với các mẫu tích hợp doanh nghiệp. Các mẫu giúp bạn tích hợp các hệ thống theo cách tốt :-)


Điều đó có nghĩa là các nhà phát triển khác cũng có thể thay đổi logic trong ngôn ngữ lập trình khác?
JavaT kỹ thuật

1
@JavaT kỹ thuật đưa ra mẫu tin nhắn (EIP), bạn đã có thể mã hóa các thành phần khác nhau bằng các ngôn ngữ khác nhau vì các tin nhắn này có định dạng độc lập với ngôn ngữ như JSON. Lạc đà cung cấp một khung dễ dàng để thực hiện EIP. Điều này dựa trên sự hiểu biết của tôi. Xin hãy sửa tôi nếu tôi nhầm.
Dheeraj Bhaskar

98

Lạc đà gửi tin nhắn từ A đến B:

nhập mô tả hình ảnh ở đây

Tại sao toàn bộ khuôn khổ cho điều này? Chà, nếu bạn có:

  • nhiều người gửi và nhiều người nhận
  • một chục các giao thức ( ftp, http, jms, vv)
  • nhiều quy tắc phức tạp
    • Gửi tin nhắn A đến người nhận A và B
    • Gửi tin nhắn B đến Người nhận C dưới dạng XML , nhưng dịch một phần , làm phong phú thêm (thêm siêu dữ liệu) và IF điều kiện X , sau đó gửi nó đến Người nhận D, nhưng dưới dạng CSV .

Vì vậy, bây giờ bạn cần:

  • dịch giữa các giao thức
  • các thành phần keo với nhau
  • xác định tuyến đường - đi đâu
  • lọc một số thứ trong một số trường hợp

Lạc đà cung cấp cho bạn những điều trên (và hơn thế nữa) trong hộp:

nhập mô tả hình ảnh ở đây

với ngôn ngữ DSL thú vị để bạn xác định nội dung và cách thức:

  new DefaultCamelContext().addRoutes(new RouteBuilder() {
        public void configure() {
            from("jms:incomingMessages")
                    .choice() // start router rules
                    .when(header("CamelFileName")
                            .endsWith(".xml"))
                    .to("jms:xmlMessages")
                    .when(header("CamelFileName")
                            .endsWith(".csv"))
                    .to("ftp:csvMessages");
}

Cũng xem cái nàycái này và Lạc đà trong hành động (như những người khác đã nói, một cuốn sách tuyệt vời!)


75

Một sơ đồ tốt hơn hàng ngàn mô tả. Sơ đồ này minh họa kiến ​​trúc của Lạc đà.

nhập mô tả hình ảnh ở đây


55

DỰA TRÊN PHÂN TÍCH

Định tuyến dựa trên lạc đà có thể được hiểu dễ dàng bằng cách đặt mình vào vị trí của chủ sở hữu Hãng hàng không (ví dụ: American Airlines, Jet Airways).

Mục đích của 'hãng hàng không của bạn' là 'chở' 'hành khách' từ một 'thành phố' đến một thành phố khác trên thế giới. Bạn sử dụng máy bay của các 'công ty máy bay' khác nhau như Boeing, Airbus, HAL để chở hành khách.

Hành khách của hãng hàng không của bạn sử dụng 'sân bay' từ thành phố và gỡ lỗi cho họ bằng cách sử dụng sân bay của thành phố. Một hành khách có thể 'đi du lịch' đến nhiều thành phố, nhưng ở mọi nơi họ phải đi qua sân bay để di chuyển giữa máy bay của hãng hàng không của bạn và thành phố.

Lưu ý rằng một hành khách 'khởi hành' từ thành phố về cơ bản là 'đến' vào máy bay của các hãng hàng không của bạn. Và một người đi đường 'đến' vào thành phố, về cơ bản là khởi hành từ máy bay. Vì chúng tôi ở vị trí của chủ sở hữu hãng hàng không, thuật ngữ 'hành khách đến' và 'hành khách khởi hành' được đảo ngược với các quan niệm thông thường của chúng tôi dựa trên quan điểm của thành phố.

Cơ sở hạ tầng 'sân bay' của mỗi thành phố được sử dụng bởi hành khách 'khởi hành' và hành khách 'đến'. Một sân bay cung cấp 'cơ sở hạ tầng khởi hành' cho hành khách khởi hành, khác với 'cơ sở hạ tầng đến' được cung cấp cho hành khách đến.

Hành khách có thể tiếp tục thực hiện các hoạt động trong ngày do các 'tiện nghi' khác nhau được cung cấp bên trong máy bay bởi các hãng hàng không của bạn khi đi du lịch.

Trên hết, hãng hàng không của bạn cũng cung cấp các phương tiện phòng chờ cho các phương pháp điều trị đặc biệt như 'hiểu ngôn ngữ địa phương' và hoặc chuẩn bị cho bạn 'du lịch'.

Cho phép thay thế một vài từ / cụm từ được sử dụng ở trên bằng sau:

hãng hàng không của bạn: Lạc đà Apache

công ty máy bay: Cơ chế vận tải

máy bay của hãng hàng không của bạn: Cơ chế vận chuyển cơ bản của Apache Camel

thực hiện: tuyến đường

hành khách: tin nhắn;

thành phố: hệ thống;

sân bay: Thành phần lạc đà;

hiểu ngôn ngữ địa phương: Chuyển đổi loại;

khởi hành: sản xuất, sản xuất

đến: tiêu thụ, tiêu thụ

du lịch: định tuyến

tiện nghi: cung cấp

Sau khi thay thế các từ, đây là những gì bạn nhận được:

Mục đích của 'Lạc đà Apache' là định tuyến 'thông điệp' từ một 'hệ thống' đến một hệ thống khác trên thế giới. Lạc đà Apache sử dụng các cơ chế vận chuyển khác nhau để định tuyến tin nhắn.

Lạc đà Apache nhặt các tin nhắn bằng cách sử dụng 'Thành phần dựa trên lạc đà' của hệ thống 'từ' và thả chúng bằng cách sử dụng 'Thành phần dựa trên lạc đà' của hệ thống 'đến'. Một thông điệp có thể định tuyến đến nhiều hệ thống, nhưng ở mọi nơi chúng phải đi qua 'Các thành phần dựa trên lạc đà' để di chuyển giữa 'Cơ chế vận chuyển cơ bản của Apache Camel' và hệ thống.

Lưu ý rằng một thông điệp 'được tạo ra' từ hệ thống về cơ bản là 'được tiêu thụ' vào cơ chế vận chuyển cơ bản của Apache Camel '. Và một thông điệp được sử dụng bởi một hệ thống, về cơ bản được tạo ra bởi 'Cơ chế vận chuyển cơ bản của Apache Camel'.

Vì chúng tôi đang cố gắng hiểu lạc đà, chúng tôi phải suy nghĩ từ quan điểm của Camel ở đây trở đi. Do đó, ý nghĩa của thuật ngữ 'thông điệp người tiêu dùng' và 'thông điệp nhà sản xuất' là đảo ngược với các khái niệm thông thường của chúng tôi dựa trên quan điểm của một hệ thống.

Tương tự 'Cơ sở hạ tầng mã hóa' Thành phần dựa trên lạc đà được sử dụng bởi 'thông điệp nhà sản xuất' và 'thông điệp người tiêu dùng'. 'Thành phần dựa trên lạc đà' cung cấp 'điểm cuối của nhà sản xuất' cho 'thông điệp của nhà sản xuất' và 'điểm cuối của người tiêu dùng' cho 'thông điệp của người tiêu dùng'.

Tin nhắn có thể được xử lý bởi Camel khi chúng đang được định tuyến.

Ngoài định tuyến này, Camel cung cấp các tính năng đặc biệt như 'Chuyển đổi loại' và nhiều tính năng khác ...


Giải thích tuyệt vời tốt đẹp để đọc và dễ nhớ. Tôi tự hỏi vai trò nào có một đường băng hoặc phi công, nếu chúng thậm chí tồn tại trong lạc đà.
Mèo Tonerpson

Giải thích tốt đẹp đặc biệt ví dụ sân bay giữ cho nó lên. nếu bạn thêm một vài điều khoản mở rộng và ví dụ về đoạn mã nhỏ sẽ thực sự tuyệt vời !! Cảm ơn
Ankur Nirmalkar

50

Một trong những điều bạn cần hiểu, trước khi bạn cố gắng hiểu Lạc đà Apache, là Các mô hình tích hợp doanh nghiệp. Không phải tất cả mọi người trong lĩnh vực này thực sự nhận thức được chúng. Mặc dù bạn chắc chắn có thể đọc sách Mẫu tích hợp doanh nghiệp, một cách nhanh hơn để tăng tốc độ về chúng sẽ là đọc một cái gì đó giống như bài viết Wikipedia về Tích hợp ứng dụng doanh nghiệp .

Một bạn đã đọc và hiểu về lĩnh vực chủ đề, bạn sẽ có nhiều khả năng hiểu mục đích của Apache Camel

HTH


35

Nếu bạn biết về các mẫu tích hợp doanh nghiệp, Apache Camel là một khung tích hợp thực hiện tất cả các EIP.

Và bạn có thể triển khai Camel như một ứng dụng độc lập trong một thùng chứa web.

Về cơ bản, nếu bạn phải tích hợp một số ứng dụng với các giao thức và công nghệ khác nhau, bạn có thể sử dụng Camel.


22

Một định nghĩa từ góc độ khác:

Lạc đà Apache là một khung tích hợp. Nó bao gồm một số thư viện Java, giúp bạn thực hiện các vấn đề tích hợp trên nền tảng Java. Điều này có nghĩa là gì và nó khác với API ở một bên và Bus dịch vụ doanh nghiệp (ESB) ở phía bên kia được mô tả như thế nào trong bài viết của tôi " Khi nào nên sử dụng Lạc đà Apache ".


18

Chính xác thì nó là gì?

Apache Camel là một khung tích hợp nhẹ, thực hiện tất cả các mẫu Tích hợp doanh nghiệp. Bạn có thể dễ dàng tích hợp các ứng dụng khác nhau bằng cách sử dụng các mẫu được yêu cầu.

Bạn có thể sử dụng Java, Spring XML, Scala hoặc Groovy. Hầu như mọi công nghệ bạn có thể tưởng tượng đều có sẵn, ví dụ HTTP, FTP, JMS, EJB, JPA, RMI, JMS, JMX, LDAP, Netty, v.v.

Hãy xem bài viết nàybài viết mẫu EIP

Làm thế nào để nó tương tác với một ứng dụng được viết bằng Java?

Lạc đà sử dụng Ngôn ngữ hoặc DSL cụ thể miền Java để tạo các mẫu hoặc tuyến tích hợp doanh nghiệp bằng nhiều ngôn ngữ dành riêng cho miền (DSL) như được liệt kê bên dưới.

Java DSL - Một DSL dựa trên Java sử dụng kiểu xây dựng thông thạo.

Câu chuyện về Mô hình Tích hợp Doanh nghiệp giải quyết xung quanh các khái niệm này:

Tin nhắn, Điểm cuối, Nhà sản xuất, Người tiêu dùng, Định tuyến, Xe buýt, Chuyển đổi và Quy trình .

Hãy xem bài viết này của Anirban Konar cho một trong những trường hợp sử dụng thời gian thực.

Nó có phải là một cái gì đó đi cùng với máy chủ?

Nó hoạt động như một cây cầu trên nhiều hệ thống phụ doanh nghiệp.

Đây có phải là một chương trình độc lập?

Apache Camel, một khung tích hợp, tích hợp các ứng dụng độc lập khác nhau.

Ưu điểm chính của Camel : Bạn có thể tích hợp các ứng dụng khác nhau với các công nghệ khác nhau (và các giao thức khác nhau) bằng cách sử dụng cùng một khái niệm cho mọi tích hợp.


Tôi tự hỏi tại sao bạn sử dụng từ "nhẹ". Quan sát của tôi là Apache Camel thực sự nặng.
Krzysztof Tomaszewski

13

Hầu hết những thứ "mới" trong điện toán hoàn toàn không thực sự mới, chúng chỉ là một vỏ bọc bí ẩn xung quanh thứ gì đó đã được hiểu rõ. Khi họ đang khó hiểu, nó thường là vì có người quyết định phát minh về ngôn ngữ mới hoặc cư về hiện tại cho một mục đích khác nhau (một ví dụ tốt về điều đó là sự đảo ngược các nhà phát triển X về những gì 'khách hàng' và 'máy chủ' trung bình.)

Camel là một trình bao bọc / API dựa trên Java cho phần mềm trung gian giữa các ứng dụng.

Middleware là một thuật ngữ chung cho phần mềm cung cấp dịch vụ thông dịch giữa các thực thể không chia sẻ ngôn ngữ hoặc loại dữ liệu chung.

Đó là những gì lạc đà, ở phía dưới. Chúng ta có thể đưa ra mô tả bằng cách lưu ý rằng nó cung cấp cho phần mềm trung gian loại EIP.

Nó không tự cung cấp phần mềm trung gian, vì nó không thể biết chi tiết về những gì ứng dụng cần giao tiếp. Nhưng nó cung cấp API để tạo các phần bất biến của phần mềm trung gian đó (tạo điểm bắt đầu, tạo điểm kết thúc, tạo điều kiện để bắt đầu và kết thúc, v.v.)

Mong rằng sẽ giúp.


4
"Hầu hết những thứ" mới "trong điện toán hoàn toàn không thực sự mới, chúng chỉ là một vỏ bọc bí ẩn xung quanh thứ gì đó đã được hiểu rõ." <<<< Điều tốt nhất tôi đã đọc cả tuần!
Dave

8

Đây là một nỗ lực khác về nó.

Bạn biết làm thế nào có / là những thứ như Webmethods, ICAN Seebeyond, Tibco BW, IBM Broker. Tất cả họ đã giúp với các giải pháp tích hợp trong doanh nghiệp. Các công cụ này thường được biết đến với tên công cụ Enterprise Application Integration (EAI).

Có hầu hết các công cụ kéo thả được xây dựng xung quanh các công nghệ này và trong các phần bạn sẽ phải viết các bộ điều hợp trong Java. Các mã bộ điều hợp này chưa được kiểm tra hoặc có công cụ / tự động hóa kém xung quanh thử nghiệm.

Giống như các mẫu thiết kế trong lập trình, bạn có các mẫu Tích hợp doanh nghiệp cho các giải pháp tích hợp phổ biến. Chúng được làm nổi tiếng bởi một cuốn sách cùng tên của Gregor Hohpe và Bobby Woolf.

Mặc dù hoàn toàn có thể triển khai các giải pháp tích hợp sử dụng một hoặc nhiều EIP, nhưng Camel là một nỗ lực thực hiện điều này trong cơ sở mã của bạn bằng cách sử dụng một trong các XML, Java, Groovy hoặc Scala.

Camel hỗ trợ tất cả các Mẫu tích hợp doanh nghiệp được liệt kê trong sách thông qua cơ chế định tuyến và DSL phong phú của nó.

Vì vậy, Camel là một công nghệ cạnh tranh với các công cụ EAI khác với sự hỗ trợ tốt hơn để kiểm tra mã tích hợp của bạn. Mã này ngắn gọn vì Ngôn ngữ cụ thể miền (DSL). Nó có thể đọc được bởi ngay cả người dùng doanh nghiệp và nó miễn phí và giúp bạn làm việc hiệu quả.


7

Có rất nhiều khung công tác tạo điều kiện cho chúng tôi nhắn tin và giải quyết các vấn đề trong nhắn tin. Một sản phẩm như vậy là Apache Camel.

Hầu hết các vấn đề phổ biến đã được chứng minh giải pháp được gọi là mẫu thiết kế. Mẫu thiết kế để nhắn tin là các mẫu Tích hợp doanh nghiệp (EIP) được giải thích rõ ở đây . Lạc đà Apache giúp chúng tôi thực hiện giải pháp của mình bằng cách sử dụng EIP.

Sức mạnh của khung tích hợp là khả năng tạo điều kiện cho chúng tôi thông qua EIP hoặc các mẫu khác, số lượng vận chuyển và các thành phần và dễ dàng phát triển mà lạc đà Apache đứng đầu danh sách

Mỗi Khung có một ưu điểm riêng Một số tính năng đặc biệt của lạc đà Apache là như sau.

  1. Nó cung cấp mã hóa trong nhiều DSL cụ thể là DSL DSL và Spring xml dựa trên DSL, rất phổ biến.
  2. Dễ dàng sử dụng và đơn giản để sử dụng.
  3. Fuse IDE là một sản phẩm giúp bạn viết mã thông qua UI

7

Nói một cách dễ hiểu, lạc đà có (nhiều) việc được thực hiện mà không cần nhiều mã nồi hơi.

Chỉ cần cung cấp cho bạn một phối cảnh, DSL DSL được đưa ra dưới đây sẽ tạo một điểm cuối REST có thể chấp nhận một XML bao gồm Danh sách các Sản phẩm và chia nó thành nhiều sản phẩm và gọi phương thức ProcessPro của BrandProcessor với nó. Và chỉ bằng cách thêm .MaxProcessing (lưu ý phần nhận xét), nó sẽ xử lý song song tất cả các Đối tượng sản phẩm. (Lớp sản phẩm là cuống Java được tạo JAXB / XJC từ XSD mà xml đầu vào bị giới hạn.) Mã này nhiều (cùng với một vài phụ thuộc Camel) sẽ hoàn thành công việc được sử dụng để lấy 100 dòng mã Java.

from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST")
.split(stax(Product.class))
/*.parallelProcessing()*/
.process(itemDeltaProcessor);

Sau khi thêm ID tuyến đường và báo cáo đăng nhập

from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST")
.routeId("Item-DeltaRESTRoute")
.log(LoggingLevel.INFO, "Item Delta received on Item-DeltaRESTRoute")
.split(stax(Product.class))
.parallelProcessing()
.process(itemDeltaProcessor);

Đây chỉ là một mẫu, Camel không chỉ là điểm cuối REST. Chỉ cần xem danh sách thành phần có thể cắm http://camel.apache.org/components.html


6

Lạc đà giúp định tuyến, chuyển đổi, giám sát.

Nó sử dụng các tuyến đường; có thể được mô tả như sau:

Khi xe buýt dịch vụ nhận được thông báo cụ thể, nó sẽ định tuyến thông qua không có các điểm đến dịch vụ / môi giới như hàng đợi / chủ đề. Con đường này được gọi là tuyến đường.

Ví dụ: ứng dụng chứng khoán của bạn đã có một số đầu vào của nhà phân tích, nó sẽ được xử lý thông qua thành phần ứng dụng / web và sau đó kết quả sẽ được công bố cho tất cả các thành viên quan tâm / đã đăng ký để cập nhật chứng khoán cụ thể.


5

Giả sử bạn tạo một công ty thương mại điện tử như Amazon và bạn muốn chỉ tập trung vào chiến lược / lựa chọn sản phẩm để bán. Không giống như đội tàu giao hàng của amazon, thay vì bạn tự xử lý việc chuyển hàng hóa từ người bán sang kho, thực hiện thay đổi trong kho như đóng gói và gửi nó đến thành phố và khách hàng khác. Bạn thuê một công ty làm tất cả những điều này và chỉ cần cung cấp cho họ thông tin về tất cả các vị trí kho, loại xe, địa điểm giao hàng và danh sách khi nào nên làm gì. Sau đó, họ tự xử lý việc đó, đó sẽ là Lạc đà Apache. Họ đảm nhiệm việc di chuyển mọi thứ từ đầu này sang đầu kia, một khi bạn bàn giao đồ cho họ, để bạn có thể tự do tập trung vào những thứ khác.


5

Giới thiệu 101 từ

Lạc đà là một khung với một mô hình lập trình và API nhất quán để tích hợp các ứng dụng lại với nhau. API dựa trên các lý thuyết trong Các mẫu tích hợp doanh nghiệp - tức là một loạt các mẫu thiết kế có xu hướng sử dụng nhắn tin. Nó cung cấp các triển khai bên ngoài của hầu hết các mẫu này và ngoài ra còn có hơn 200 thành phần khác nhau mà bạn có thể sử dụng để dễ dàng nói chuyện với tất cả các loại hệ thống khác. Để sử dụng Camel, trước tiên hãy viết logic kinh doanh của bạn trong POJO và triển khai các giao diện đơn giản xoay quanh các tin nhắn. Sau đó, sử dụng DSL của Camel để tạo "Tuyến đường" là các bộ quy tắc để dán ứng dụng của bạn lại với nhau.

Giới thiệu mở rộng

Nhìn bề ngoài, chức năng của Camel là đối thủ của các sản phẩm Bus dịch vụ doanh nghiệp truyền thống. Chúng tôi thường nghĩ rằng Lạc đà là một thành phần "hòa giải" (còn gọi là dàn nhạc) sống ở phía máy chủ, nhưng vì đó là thư viện Java nên dễ dàng nhúng và nó cũng có thể sống trên ứng dụng phía máy khách và giúp bạn tích hợp nó với các dịch vụ điểm tới điểm (còn gọi là vũ đạo). Bạn thậm chí có thể lấy POJO của mình xử lý các tin nhắn bên trong tuyến đường Camel và dễ dàng chuyển chúng thành các quy trình tiêu dùng từ xa của riêng chúng, ví dụ nếu bạn cần thu nhỏ độc lập một mảnh. Bạn có thể sử dụng Camel để kết nối các tuyến hoặc bộ xử lý thông qua bất kỳ số lượng giao thức / giao thức từ xa khác nhau tùy thuộc vào nhu cầu của bạn. Bạn có cần một giao thức nhị phân cực kỳ hiệu quả và nhanh chóng, hoặc một thứ dễ đọc hơn và dễ gỡ lỗi hơn? Nếu bạn muốn chuyển đổi thì sao? Với Camel, điều này thường dễ dàng như thay đổi một hoặc hai dòng trong tuyến đường của bạn và không thay đổi bất kỳ logic kinh doanh nào cả. Hoặc bạn có thể hỗ trợ cả hai - bạn có thể chạy nhiều Tuyến cùng một lúc trong Ngữ cảnh lạc đà.

Bạn không thực sự cần sử dụng Camel cho các ứng dụng đơn giản sẽ tồn tại trong một quy trình đơn hoặc JVM - nó sẽ quá mức cần thiết. Nhưng về mặt khái niệm, nó không khó hơn mã bạn có thể tự viết. Và nếu yêu cầu của bạn thay đổi, việc tách logic kinh doanh và mã keo giúp duy trì dễ dàng hơn theo thời gian. Khi bạn tìm hiểu API API, bạn có thể dễ dàng sử dụng nó như một con dao của quân đội Thụy Sĩ và áp dụng nó nhanh chóng trong nhiều bối cảnh khác nhau để cắt giảm số lượng mã tùy chỉnh mà bạn phải viết. Bạn có thể tìm hiểu một hương vị - ví dụ, DSL DSL, một API thông thạo dễ dàng kết hợp với nhau - và dễ dàng chọn các hương vị khác.

Nhìn chung, Camel rất phù hợp nếu bạn đang cố gắng làm microservice. Tôi đã thấy nó là vô giá đối với kiến ​​trúc tiến hóa, bởi vì bạn có thể đưa ra rất nhiều quyết định khó khăn, "dễ hiểu sai" về các giao thức, vận chuyển và các vấn đề tích hợp hệ thống khác cho đến khi bạn biết thêm về miền vấn đề của mình. Chỉ cần tập trung vào EIP và logic kinh doanh cốt lõi của bạn và chuyển sang các Tuyến mới với các thành phần "đúng" khi bạn tìm hiểu thêm.


4

Vâng, điều này có lẽ là một chút muộn. Nhưng một điều cần thêm vào nhận xét của mọi người là, Camel thực sự là một hộp công cụ chứ không phải là một bộ tính năng hoàn chỉnh. Bạn nên ghi nhớ điều này khi phát triển và cần thực hiện các chuyển đổi và chuyển đổi giao thức khác nhau.

Lạc đà tự nó dựa vào các khuôn khổ khác và do đó đôi khi bạn cũng cần phải hiểu những điều đó để hiểu cái nào phù hợp nhất cho nhu cầu của bạn. Ví dụ, có nhiều cách để xử lý REST. Điều này có thể hơi khó hiểu lúc đầu, nhưng một khi bạn bắt đầu sử dụng và thử nghiệm, bạn sẽ cảm thấy thoải mái và kiến ​​thức về các khái niệm khác nhau sẽ tăng lên.


4

Apache Camel là một khung công tác Java để tích hợp Enterprise. Ví dụ: - nếu bạn đang xây dựng một ứng dụng web tương tác với nhiều API của nhà cung cấp, chúng tôi có thể sử dụng lạc đà làm công cụ tích hợp bên ngoài. Chúng ta có thể làm nhiều hơn với nó dựa trên trường hợp sử dụng. Lạc đà trong hành động từ các ấn phẩm Manning là một cuốn sách tuyệt vời để học lạc đà. Các tích hợp có thể được định nghĩa như dưới đây.

Java DSL

from("jetty://0.0.0.0:8080/searchProduct").routeId("searchProduct.products").threads()
    .log(LoggingLevel.INFO, "searchProducts request Received with body: ${body}")
    .bean(Processor.class, "createSearchProductsRequest").removeHeaders("CamelHttp*")
    .setHeader(Exchange.HTTP_METHOD, constant(org.apache.camel.component.http4.HttpMethods.POST))
    .to("http4://" + preLiveBaseAPI + searchProductsUrl + "?apiKey=" + ApiKey
                    + "&bridgeEndpoint=true")
    .bean(Processor.class, "buildResponse").log(LoggingLevel.INFO, "Search products finished");

Điều này là để tạo điểm cuối API REST, lần lượt gọi API bên ngoài và gửi lại yêu cầu

DSL mùa xuân

<route id="GROUPS-SHOW">
    <from uri="jetty://0.0.0.0:8080/showGroups" />
    <log loggingLevel="INFO" message="Reqeust receviced service to fetch groups -> ${body}" />
    <to uri="direct:auditLog" />
    <process ref="TestProcessor" />
</route>

Đến với câu hỏi của bạn

  1. Chính xác thì nó là gì? Trả lời: - Đây là một khung thực hiện các mẫu tích hợp Doanh nghiệp
  2. Làm thế nào để nó tương tác với một ứng dụng được viết bằng Java? Trả lời: - nó có thể tương tác với bất kỳ giao thức có sẵn nào như http, ftp, amqp, v.v.
  3. Nó có phải là một cái gì đó đi cùng với máy chủ? Trả lời: - Nó có thể được triển khai trong một thùng chứa như tomcat hoặc có thể được triển khai độc lập như một quy trình java
  4. Đây có phải là một chương trình độc lập? Trả lời: - Có thể.

Hy vọng nó giúp


3

Apache Camel là một khung tích hợp nhẹ thực hiện tất cả các mẫu Tích hợp doanh nghiệp. Bạn có thể dễ dàng tích hợp các ứng dụng khác nhau bằng cách sử dụng các mẫu yêu cầu. Bạn có thể sử dụng Java, Spring XML, Scala hoặc Groovy.

Lạc đà Apache chạy trên Máy ảo Java (JVM). ... Chức năng cốt lõi của Apache Camel là công cụ định tuyến của nó. Nó phân bổ tin nhắn dựa trên các tuyến liên quan. Một tuyến chứa luồng logic và tích hợp. Nó được thực hiện bằng EIP và DSL cụ thể.

nhập mô tả hình ảnh ở đây


1
Lạc đà triển khai mẫu 40, trong EIP: mẫu tích hợp doanh nghiệp.
Jacob

2

Nó giống như một đường ống kết nối

From---->To

Ở giữa u có thể thêm nhiều kênh và đường ống. Vòi có thể thuộc bất kỳ loại tự động hoặc thủ công nào cho luồng dữ liệu và tuyến đường để phân luồng.

Nó hỗ trợ và có triển khai cho tất cả các loại và các loại xử lý. Và để xử lý giống nhau, nhiều cách tiếp cận vì nó có nhiều thành phần và mỗi thành phần cũng có thể cung cấp đầu ra mong muốn bằng các phương thức khác nhau theo nó.

Ví dụ, truyền tệp có thể được thực hiện bằng lạc đà với các loại tệp được di chuyển hoặc sao chép và cũng từ thư mục, máy chủ hoặc hàng đợi.

-from-->To
   - from-->process-->to
   - from-->bean-->to
   - from-->process-->bean-->to
   -from-->marshal-->process-->unmarshal-->to

Từ / đến ---- thư mục, trực tiếp, seda, vm có thể là bất cứ điều gì


0

Một quan điểm khác (dựa trên các chủ đề toán học cơ bản hơn)

Nền tảng điện toán chung nhất là [ https://en.wikipedia.org/wiki/Turing_machine]

Có một vấn đề với máy Turing. Tất cả dữ liệu đầu vào / đầu ra nằm trong máy turing. Trong thế giới thực, có các nguồn đầu vào và đầu ra chìm bên ngoài máy Turing của chúng tôi và nói chung được điều chỉnh bởi các hệ thống ngoài tầm kiểm soát của chúng tôi. Nghĩa là, các hệ thống bên ngoài đó sẽ gửi / nhận dữ liệu theo bất kỳ định dạng nào với bất kỳ bộ lập lịch dữ liệu mong muốn nào.

Câu hỏi: Làm thế nào để chúng ta quản lý để làm cho các máy turing độc lập nói với nhau theo cách chung nhất để mỗi máy turing xem các máy ngang hàng của chúng là nguồn dữ liệu đầu vào hoặc dữ liệu đầu ra?

Trả lời: Sử dụng một cái gì đó như lạc đà, con la, BizTalk hoặc bất kỳ ESB nào khác để loại bỏ việc xử lý dữ liệu giữa việc hoàn thành các máy xử lý "vật lý" (hoặc phần mềm ảo) riêng biệt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.