2017-06-09 17 views
8

Tôi có trường hợp sử dụng sau đây trên một ứng dụng Web mùa xuân dựa trên:RabbitMQ làm thế nào để chia công việc để công việc và xử lý kết quả

  • tôi cần phải áp dụng các Cạnh tranh Người tiêu dùng EIP với xoắn sau: các thông điệp trong hàng đợi thực sự là phân chia nhiệm vụ thuộc cùng một công việc. Do đó, tôi cần phải theo dõi đúng khi tất cả các công việc của một công việc được hoàn thành và trạng thái hoàn thành của họ để lưu các kịch bản hoặc là HOÀN THÀNH hoặc FAILED, đăng nhập kết quả và thông báo bằng ví dụ: e-mail cho người sử dụng phù hợp

Vì vậy, đưa ra yêu cầu tôi trình bày ở trên, câu hỏi của tôi là:

  1. này có thể được thực hiện với RabbitMQ và nếu có như thế nào?
+0

Trong trường hợp đó, tôi chỉ cần đặt một ID duy nhất cho mỗi công việc, đính kèm ID này vào mọi thư trong hàng đợi liên quan đến công việc, đặt cờ trạng thái trên mỗi tác vụ là "Đang xử lý" và trên trang cuối cùng "Đã hoàn thành ". Bạn chỉ cần xác định "Thất bại" có nghĩa là gì và triển khai các quy tắc tương ứng – Adonis

+0

@asettouf - nếu tôi tuân theo mẫu "Cạnh tranh người tiêu dùng" hay còn gọi là " Hàng đợi công việc" https://www.rabbitmq.com/tutorials/tutorial-two- java.html, nhiệm vụ của công việc sẽ được thực hiện song song và điều này là những gì tôi cần. Vì vậy, việc xem xét điều này tôi không thấy cách đề xuất của bạn có thể hoạt động như thế nào – kmandalas

+0

Nhân tiện, nếu câu trả lời của ai đó giải quyết được vấn đề của bạn, bạn có thể chấp nhận câu trả lời đó bằng câu trả lời bằng cách sử dụng hộp kiểm lớn. Nó giúp giữ tập trung vào các câu hỏi chưa được trả lời trên Stackoverflow. – Adonis

Trả lời

3

Tôi đã tạo nhanh gist để hiển thị ví dụ rất thô sơ về cách người ta có thể làm điều đó. Trong ví dụ này, có một nhà sản xuất và 2 người tiêu dùng, 2 hàng đợi, một cho nhà sản xuất gửi ("SEND"), được người tiêu dùng tiêu thụ và ngược lại, người tiêu dùng xuất bản vào hàng đợi "RECV" và được nhà sản xuất tiêu thụ .

Bây giờ hãy nhớ đây là một ví dụ khá thô, vì nhà sản xuất trong trường hợp đó chỉ gửi một công việc (một số lượng nhiệm vụ ngẫu nhiên từ 0 đến 5) và chặn cho đến khi hoàn thành công việc. Một cách để vượt qua điều này sẽ là lưu trữ trong một bản đồ một id công việc và số lượng các nhiệm vụ, và mỗi lần kiểm tra rằng số lượng công việc được thực hiện được báo cáo cho mỗi id công việc.

+0

cảm ơn phản hồi. Tôi sẽ cố gắng đánh giá càng sớm càng tốt, có vẻ như một câu trả lời hữu ích có thể được chấp nhận. – kmandalas

+0

@kmandalas Không vấn đề gì, hãy cho tôi biết nếu bạn muốn dự án đầy đủ, mặc dù tệp pom.xml khá đơn giản. Cũng nên nhớ rằng tôi đã không cố gắng cải thiện hoặc làm cho nó hiệu quả nhất có thể, hãy lấy nó như một bằng chứng về khái niệm – Adonis

+0

Tôi nghĩ ý tưởng của bạn là một PoC hợp lý. Bây giờ, tôi cố gắng liên kết nó với những gì tôi đã phát hiện trên trang web này: http: //blog.zenika.com/2012/03/15/pdf-workers-with-rabbitmq vì tôi đang sử dụng Spring và các khung công tác liên quan. – kmandalas

1

Điều bạn đang cố gắng làm ngoài phạm vi của RabbitMQ. RabbitMQ là để gửi và nhận tin nhắn với khả năng xếp hàng chúng. Nó không thể theo dõi công việc của bạn cho bạn.

Bạn sẽ cần phải có dịch vụ "Bộ nhớ công việc". Bất cứ khi nào người tiêu dùng của bạn hoàn thành nhiệm vụ, nó sẽ cập nhật dịch vụ Job Storage, đánh dấu nhiệm vụ là xong. Dịch vụ lưu trữ công việc biết về số lượng công việc trong công việc và khi công việc cuối cùng được thực hiện, hoàn thành công việc như đã thành công. Có trong dịch vụ này, bạn cũng sẽ thực hiện tất cả các logic kinh doanh khác của bạn, chẳng hạn như khi nào để xử lý công việc là không thành công.

+0

Tất nhiên sẽ cần phải thực hiện các dịch vụ. Tuy nhiên sau khi nghiên cứu sâu hơn, tôi thấy rằng bằng cách kết hợp "Hàng đợi công việc" với "Yêu cầu-Trả lời" patter và tất nhiên với một số dịch vụ tôi có thể tiếp cận một giải pháp. Xem ví dụ: https://blog.zenika.com/2012/03/15/pdf-workers-with-rabbitmq/ – kmandalas

+0

Nếu điều gì đó cần xảy ra ở phía nhà xuất bản sau khi người tiêu dùng xử lý thông báo, có người tiêu dùng có thể gửi phản hồi lại cho nhà xuất bản. –

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