2013-02-07 36 views
19

Tôi đang thiết kế chương trình phụ trợ cho một ứng dụng web Java mới và đang cố gắng quyết định có sử dụng Bus sự kiện hay không; cụ thể là Guava EventBus.Khi nào cần sử dụng Xe buýt sự kiện?

Hầu hết các yêu cầu phía máy chủ sẽ đồng bộ: nghĩa là người dùng đang yêu cầu dữ liệu và cần phản hồi trong vòng vài giây. Tuy nhiên, cũng có khá nhiều yêu cầu có thể không đồng bộ và "cháy và quên" ở phía máy khách. Vì vậy, miễn là chúng được xử lý, khách hàng có thể chăm sóc ít hơn nếu mất 2 giây để xử lý hoặc 2 giờ.

Đối với các yêu cầu không đồng bộ này, tôi dự định sẽ nghe servlet tại URL được ánh xạ xuất bản các yêu cầu tới hàng đợi. Một người tiêu dùng sau đó sẽ dequeue mỗi yêu cầu và định tuyến nó trên để xử lý thích hợp. Đây là nơi mà EventBus có thể hoặc không được phát. Logic nghiệp vụ để định tuyến yêu cầu tới trình xử lý chính xác khá phức tạp. Thông thường một tuyến đường Camel sẽ là giải pháp hoàn hảo. Trong trường hợp sử dụng của tôi, tôi tự hỏi liệu tôi có thể kết nối một loạt các "bộ xử lý" (event handler) cho cùng một bus sự kiện hay không, và sau đó có mỗi lần kích hoạt và nhận các sự kiện đến và từ mỗi khác cho đến khi kết quả cuối cùng là được sản xuất.

Tôi muốn nói rằng tôi đã khám phá bằng cách sử dụng Apache Camel và tôi tin rằng Camel là công cụ thích hợp cho công việc ở đây. Đáng buồn thay, vì những lý do nằm ngoài phạm vi của câu hỏi này, tôi sẽ không sử dụng nó. Vì vậy, tôi bắt đầu gợi lên các giải pháp giống như Camel, đó là cách tôi đến tại số EventBus của Guava. Nhưng nó có thể không phải là một sự thay thế phù hợp.

Tôi đoán tôi đang tìm kiếm phân loại sự cố khi giải quyết mẫu Event Bus và sau đó tôi cần xác định xem mẫu đó có khớp với trường hợp sử dụng của tôi ở đây hay không.

Trả lời

35

Đây là tuyên bố vấn đề mà EventBus giải quyết trong một nutshell:

"Tôi muốn một cách tập trung dễ dàng để thông báo mã số đó là quan tâm đến loại hình cụ thể của sự kiện khi những sự kiện xảy ra mà không cần bất kỳ khớp nối trực tiếp giữa các mã xuất bản sự kiện và mã nhận được sự kiện. "

Khi bạn nói "logic nghiệp vụ định tuyến yêu cầu tới trình xử lý chính xác khá phức tạp", tôi nghi ngờ rằng EventBus có thể không phải là thứ bạn đang tìm kiếm, vì nó chỉ dựa trên lớp đối tượng Java (mặc dù bạn có thể làm một số công cụ ưa thích với việc triển khai các giao diện trên các lớp sự kiện của bạn và có thuê bao đăng ký các giao diện cụ thể).

+1

Cảm ơn @ColinD (+1) - vâng tôi đoán tôi đã nghĩ rằng mỗi người đăng ký/bộ xử lý có thể trả lại một sự kiện xung quanh xe buýt sự kiện như pinball bên trong máy pinball. Tại mỗi thuê bao, sự kiện sẽ được sửa đổi, giống như cách mà 'Message' /' Exchange' được sửa đổi bên trong các bộ xử lý Camel. Tôi vẫn bị giằng xé giữa việc sử dụng nó hoặc chỉ xử lý các bộ xử lý nối thủ công với nhau. Đó là sự tách rời mà tôi quan tâm, nhưng 'EventBus' vẫn không cảm thấy là giải pháp tốt nhất (không phải Lạc đà). Tôi cho bạn kiểm tra màu xanh lá cây và sẽ báo cáo lại với quyết định và kết quả của tôi. Cảm ơn một lần nữa! – IAmYourFaja

+0

Đó là loại Người hòa giải. – zgulser

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