2010-01-22 41 views
26

Tôi gặp khó khăn trong đầu quanh khái niệm.Nhà sản xuất và người tiêu dùng Apache Camel

Tôi đang cố gắng triển khai điểm cuối lắng nghe trên cổng tcp cho các thư đến theo định dạng sở hữu, sau đó sẽ chuyển đổi thư và yêu cầu lạc đà chuyển tiếp và định tuyến.

Tôi có hiểu chính xác rằng Nhà sản xuất chịu trách nhiệm gửi tin nhắn vào số EndpointConsumer nhận chúng từ điểm cuối đó không?

Khi nghiên cứu giao diện, tôi không thể tìm ra luồng thông điệp giữa các đối tượng đó, đặc biệt là trên phần người tiêu dùng. Consumer chỉ định nghĩa start()stop() phương pháp ...

Khi thiết lập một thử nghiệm trên một thực hiện bộ xương, Camel gọi createProducer() trên thiết bị đầu cuối và process() trên đối tượng sản xuất. Sau đó nó trở lại, swithout làm bất cứ điều gì với người tiêu dùng hoặc bộ vi xử lý liên kết với nó.

Ai đó có thể chỉ cho tôi đúng hướng không?

Trả lời

17

Cuối cùng tôi figured it out bằng cách nhìn vào thành phần Stream.

Chỉ ra rằng tôi đã mắc sai lầm khi nghĩ về điểm cuối là thứ gì đó tập trung mà mọi thứ phải đi.

Câu trả lời đơn giản là người tiêu dùng nhận dữ liệu từ một hệ thống bên ngoài (nghe trên ổ cắm máy chủ trong trường hợp của tôi) và nhà sản xuất gửi dữ liệu đến hệ thống bên ngoài.

Vì điểm cuối của tôi là chỉ đọc (nó sẽ không được sử dụng làm đích cuối cùng của quá trình định tuyến Camel), tôi thực sự không cần nhà sản xuất (nó sẽ ném RuntimeException nếu hệ thống vẫn cố gắng làm điều đó do cấu hình sai). Một ví dụ phù hợp sẽ là điểm cuối nguyên tử lạc đà - bạn có thể đọc nguồn cấp dữ liệu nhưng (như 1.6.0) bạn không thể xuất bản một.

Tương tự, bạn chỉ cần một nhà sản xuất cho điểm cuối chỉ ghi mà không nhận dữ liệu từ hệ thống bên ngoài (ví dụ: ghi nhật ký).

6

Một nhà sản xuất mở rộng Bộ xử lý có nghĩa là nó cũng có phương pháp xử lý.

Kiểm tra chương 1 miễn phí trong cuốn sách Camel in Action, mô tả một chút về các khái niệm Camel đó. http://www.manning.com/ibsen/

Và hướng dẫn này cũng là tuyệt vời vì nó giới thiệu những khái niệm trong một tốc độ ổn định http://camel.apache.org/tutorial-example-reportincident.html

36

Điều quan trọng là phải nhớ rằng một Endpoint, tạo ra bởi một Component (ví dụ: Endpoint Nhà máy), có thể ngồi tại hoặc kết thúc của một Camel Route. Nếu bạn đặt thành phần vào đầu lộ trình thì phải có phần triển khai của phần Consumer của thành phần . Điều này làm công việc chuyển đổi đầu vào/yêu cầu cụ thể (như yêu cầu HTTP) thành một cái gì đó chung chung - một Camel Exchange - có thể di chuyển xuống Tuyến đường.Trong khi đó, nếu bạn đặt Thành phần ở cuối số tuyến đường thì bạn phải có triển khai Producer. Nhà sản xuất thực hiện công việc lấy Exchange từ cuối tuyến đường và chuyển đổi nó thành một cái gì đó cụ thể (như thông báo JMS).

Tôi tìm thấy tài liệu Fuse ESB tốt hơn (nói chung) so với Apache Camel website. Từ số Fuse ESB Component page:

Điểm cuối tiêu dùng yêu cầu tiêu thụ. Chúng luôn xuất hiện lúc bắt đầu của tuyến đường và chúng đóng gói mã chịu trách nhiệm nhận các yêu cầu gửi đến và gửi đi các thư trả lời gửi đi.

Điểm cuối của nhà sản xuất yêu cầu sản xuất. Chúng luôn xuất hiện ở cuối số một tuyến đường và chúng đóng gói mã chịu trách nhiệm gửi đi các yêu cầu gửi đi và nhận được thư trả lời đến .


enter image description here

+6

đẹp rõ ràng giải thích nhờ. Các thuật ngữ thường phản trực giác, vì người dùng điển hình của lạc đà đang suy nghĩ về các tuyến đường và thông điệpThay đổi, thay vì cho phép một thành phần lạc đà mới. Từ quan điểm của một MessageExchange, các điều khoản là sai cách xung quanh. Một người tiêu dùng tạo ra một messageExchange, trong khi một nhà sản xuất tiêu thụ một thông báoExchange. –

+0

Là một người mới đến Camel, tôi thực sự bối rối bởi câu trả lời này. Nếu tôi nhìn vào giao diện 'org.apache.camel.Producer', các hợp đồng duy nhất mà nó chỉ định là các phương thức' createExchange'. Và nhìn vào thứ gì đó giống như 'EventDrivenPollingConsumer', thứ duy nhất làm với Exchange là' process' nó. Không phải là một Exchange đi qua một tuyến đường - đó là những gì Bộ vi xử lý làm việc với, vì vậy đó là ấn tượng của tôi. – Snekse

+0

@Snekse Phần mô tả câu trả lời cho biết chính xác điều này. Nhưng trong mọi trường hợp, tôi không nghĩ rằng kỹ thuật này có nhiều sự liên quan cho một sự hiểu biết khái niệm về người sản xuất và người tiêu dùng. – chrisjleu

Các vấn đề liên quan