Di dunia layanan mikro, apa cara yang disarankan untuk mengonfigurasi titik akhir API hilir?

Misalnya, jika Layanan A perlu memanggil titik akhir di Layanan B, kami memiliki dua opsi:

Sebuah. Jadikan nama host dan nomor port API Layanan B dapat dikonfigurasi di Layanan A (layanan-b:8080) dan tambahkan URI jalur dalam kode Anda

Atau

B. Jadikan titik akhir lengkap dapat dikonfigurasi di Layanan A (http://service-b:8080/somepath)

Meskipun saya menyukai ide untuk membuat titik akhir dapat dikonfigurasi, ini menyisakan banyak ruang untuk kesalahan karena seluruh jalur perlu ditentukan. Itu juga tidak cocok ketika beberapa titik akhir perlu dipanggil dari Layanan A ke Layanan B yang berpotensi memiliki jalur berbeda, yang mengharuskan kami untuk mengonfigurasi beberapa titik akhir.

Di sisi lain, opsi (a) tampaknya lebih terukur karena alasan yang disebutkan di atas.

Sebagian besar hasil pencarian online hanya menunjukkan bagaimana suatu layanan dapat memanggil layanan lain dan menggunakan URL hardcode untuk mendemonstrasikan ini. Akan lebih baik untuk mengetahui bagaimana komunitas melakukan ini dalam proyek dunia nyata.

P.S: Kami menggunakan Spring Webflux dan menyebarkan ke k8s.

0
Chejerla Karthik 10 Juli 2020, 14:57

1 menjawab

Jawaban Terbaik

Saya telah melihat sebagian besar tim menggunakan opsi a, di mana serviceB "baseUrl" (yang pada dasarnya https://serviceb-hostname:8080) disuntikkan sebagai properti lingkungan (kubernetes configmap) ke dalam aplikasi selama penerapan.

Jalur spesifik API tertentu dikonfigurasi dalam aplikasi yaml atau di kelas "konfigurasi proxy" itu sendiri sebagai konstanta (mis. ServiceBProxy.java - kelas proxy adalah kelas yang akan melakukan panggilan istirahat ke layanan dependen seperti layanan B).

Berikut adalah sebagian dari aplikasi yaml dari salah satu layanan mikro (dari salah satu proyek saya):

authorizationService:
  baseUri: ${authorizationServiceBaseUri}/api

tenantService:
  baseUri: ${tenantServiceBaseUri}/api/v1
  tenantsUri: ${tenantService.baseUri}/tenants

settingsService:
  baseUri: ${settingsServiceBaseUri}

iamService:
  fetchBatchSize: 500
  baseUri: ${iamServiceBaseUri}

Di sini nilai iamServiceBaseUri,settingsServiceBaseUri,tenantServiceBaseUri,authorizationServiceBaseUri semuanya disuntikkan selama penerapan. Dan masing-masing berisi clusterIP dengan port.

-1
Abhinaba Chakraborty 11 Juli 2020, 04:15