Arsitektur RabbitMQ untuk pekerjaan dengan hasil kembali

Saya telah mencoba membuat sistem di mana orang dapat mengirimkan file untuk ditandatangani. Setiap pengiriman dapat memiliki beberapa file dan hasilnya akan dikirim kembali ke pengguna jika semua file dalam setiap pengiriman selesai.

Saat ini saya memiliki 6 kotak penandatanganan yang menandatangani satu file dalam satu waktu. Jadi untuk setiap pengiriman saya perlu memisahkan semua file dan menyeimbangkannya di antara 6 kotak penandatanganan, dan setelah itu saya perlu mengambil hasilnya dan melacak apakah semua file dalam pengiriman ini telah selesai.

Jika memungkinkan, saya juga ingin membatasi jumlah maksimum kotak penandatanganan yang dapat digunakan setiap kiriman sehingga kiriman dalam jumlah besar tidak membuat pekerjaan lain kelaparan.

Pengaturan saya saat ini adalah saya memiliki antrian pengiriman dan beberapa konsumen antrian pengiriman akan mengambil pesan darinya satu per satu, memecah pengiriman menjadi file individual dan mengirimkannya ke antrian file. Dan 6 kotak penandatanganan akan menjadi 6 konsumen antrian file. Saya mengalami kesulitan menulis hasil kembali ke konsumen penyerahan yang melacak apakah semua file telah selesai untuk penyerahan ini, saya juga tidak dapat mengontrol jumlah maksimum kotak penandatanganan yang digunakan untuk setiap pekerjaan.

Saya melihat pengaturan RPC untuk Rabbitmq yang memungkinkan hasilnya ditulis kembali. Masalahnya adalah panggilan rpc memblokir setiap file, dan saya ingin beberapa file untuk pengiriman yang sama dapat masuk secara paralel. Jadi saya memerlukan beberapa saran tentang arsitektur Rabbitmq dan aliran pesan untuk skenario jenis ini.


person Shengcong Wang    schedule 09.02.2016    source sumber


Jawaban (1)


1) Dengan asumsi Anda mengetahui # file, tetapkan setiap pengiriman sebuah id pekerjaan

2) Suatu pekerjaan dapat terdiri dari banyak tugas.

3) Hitung prioritas yang secara naif merupakan kebalikan dari jumlah dokumen. Jadi dokumen dengan # dokumen lebih banyak secara default memiliki prioritas lebih rendah. Lamaran Anda harus memiliki fitur-fitur yang dapat menyesuaikan prioritasnya, untuk berjaga-jaga jika ada pekerjaan yang lebih besar yang perlu diproses dengan prioritas tinggi.

4) Daripada menggabungkan pengirim dan penanda tangan pekerjaan, mengapa tidak menggunakan mekanisme berbasis peristiwa yang menampilkan peristiwa pada keberhasilan dan kegagalan tanda atau sedang diproses untuk setiap tugas.

Pengirim akan menyimpan rincian pekerjaan dan tugas dan penanda tangan akan memperbaruinya saat diproses. Pengirim akan mempertimbangkan prioritas dan jumlah tugas yang sedang dijalankan sebelum mengirimkan tugas selanjutnya. Logika untuk melakukan panggilan itu diserahkan kepada Anda.

person JVXR    schedule 09.02.2016