Membatasi permintaan HTTP Keluar

Saya menggunakan vert.x sebagai server untuk menerima permintaan pencarian yang kemudian diproses di server menjadi beberapa permintaan HTTP keluar ke berbagai layanan eksternal.

Untuk perilaku asinkron saya memilih untuk menggunakan RxJava menggunakan klien http asli Vert.x.

Masalahnya, layanan yang saya gunakan membatasi saya maksimal 1 panggilan per detik.

Apa cara terbaik/sederhana untuk membatasi permintaan keluar NIO HTTP?

  1. Dalam satu lingkungan server.
  2. Dalam lingkungan server berkerumun.

person Yaniv Cohen    schedule 27.10.2016    source sumber
comment
Bisakah Anda menunjukkan beberapa kode? Saya tidak mengerti mengapa Anda menjadi reaktif penuh jika Anda mengalami kemacetan satu detik?   -  person Hans Wurst    schedule 27.10.2016
comment
Saya menggunakan RxJava karena sepertinya solusi yang lebih lengkap untuk pemrograman fungsional asinkron daripada API berbasis masa depan atau janji.   -  person Yaniv Cohen    schedule 29.10.2016


Jawaban (1)


Dalam satu server, pendekatan naif untuk menyelesaikan masalah Anda adalah:

  1. Dorong permintaan ditambah penangan hasil ke antrean
  2. Miliki pengendali periodik yang mengeluarkan elemen dari antrian setiap detik dan menjalankan permintaan
  3. Panggil penangan hasil dengan hasil atau kesalahan

Secara berkelompok, Anda dapat memperluas konsep sebelumnya dan membungkusnya pada alamat bus peristiwa sehingga menjadi seperti:

  1. Kirim pesan ke alamat yang berisi permintaan tersebut dan siapkan penangan balasan
  2. Layanan akan berfungsi seperti pada penjelasan sebelumnya
  3. Daripada memanggil pengendali, layanan ini akan bergantung pada pengendali balasan pesan untuk meneruskan hasilnya.
person Paulo Lopes    schedule 28.10.2016
comment
Terima kasih Paulo atas jawaban Anda, mengenai bagian cluster dari jawabannya, saya harus mengontrol tingkat konsumsi antrian bus pesan agar sesuai dengan batas kecepatan panggilan keluar. - person Yaniv Cohen; 29.10.2016