Menyambungkan ke Server Eureka terkelola untuk Spring di Azure Container Apps
Eureka Server for Spring adalah registri layanan yang memungkinkan layanan mikro mendaftarkan diri mereka dan menemukan layanan lain. Eureka Server for Spring tersedia sebagai komponen Azure Container Apps. Anda dapat mengikat aplikasi kontainer Anda ke Eureka Server untuk Spring untuk pendaftaran otomatis dengan server Eureka.
Dalam tutorial ini, Anda akan mempelajari cara:
- Buat komponen Eureka Server untuk Spring Java.
- Ikat aplikasi kontainer Anda ke komponen Eureka Server for Spring Java.
Penting
Tutorial ini menggunakan layanan yang dapat memengaruhi tagihan Azure Anda. Jika Anda memutuskan untuk mengikuti, pastikan Anda menghapus sumber daya yang ditampilkan dalam artikel ini untuk menghindari penagihan yang tidak terduga.
Prasyarat
- Akun Azure dengan langganan aktif. Jika Anda belum memilikinya, Anda dapat membuatnya secara gratis.
- Azure CLI.
Pertimbangan
Saat Anda menjalankan Eureka Server untuk Spring di Container Apps, ketahui detail berikut:
Item | Penjelasan |
---|---|
Cakupan | Komponen Eureka Server for Spring berjalan di lingkungan yang sama dengan aplikasi kontainer yang terhubung. |
Penskalaan | Komponen Eureka Server for Spring tidak dapat diskalakan. Properti minReplicas penskalakan dan maxReplicas keduanya diatur ke 1 . Untuk mencapai ketersediaan tinggi, lihat Membuat Layanan Eureka yang sangat tersedia di Aplikasi Kontainer. |
Sumber | Alokasi sumber daya kontainer untuk Eureka Server untuk Spring diperbaiki. Jumlah inti CPU adalah 0,5, dan ukuran memorinya adalah 1 Gi. |
Harga | Eureka Server untuk penagihan Spring berada di bawah harga berbasis konsumsi. Sumber daya yang digunakan oleh komponen Java terkelola ditagih dengan tarif aktif/diam. Anda dapat menghapus komponen yang tidak lagi digunakan untuk menghentikan penagihan. |
Pengikatan | Aplikasi kontainer terhubung ke komponen Eureka Server for Spring melalui pengikatan. Pengikatan menyuntikkan konfigurasi ke dalam variabel lingkungan aplikasi kontainer. Setelah pengikatan dibuat, aplikasi kontainer dapat membaca nilai konfigurasi dari variabel lingkungan dan terhubung ke komponen Eureka Server for Spring. |
Siapkan
Sebelum Anda mulai bekerja dengan komponen Eureka Server for Spring, Anda harus terlebih dahulu membuat sumber daya yang diperlukan.
Jalankan perintah berikut untuk membuat grup sumber daya Anda di lingkungan aplikasi kontainer.
Buat variabel untuk mendukung konfigurasi aplikasi Anda. Nilai-nilai ini disediakan untuk Anda untuk tujuan pelajaran ini.
export LOCATION=eastus export RESOURCE_GROUP=my-services-resource-group export ENVIRONMENT=my-environment export EUREKA_COMPONENT_NAME=eureka export APP_NAME=my-eureka-client export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-eureka-client:latest"
Variabel Deskripsi LOCATION
Lokasi wilayah Azure tempat Anda membuat aplikasi kontainer dan komponen Java. ENVIRONMENT
Nama lingkungan aplikasi kontainer untuk aplikasi demo Anda. RESOURCE_GROUP
Nama grup sumber daya Azure untuk aplikasi demo Anda. EUREKA_COMPONENT_NAME
Nama komponen Java yang dibuat untuk aplikasi kontainer Anda. Dalam hal ini, Anda membuat komponen Eureka Server for Spring Java. IMAGE
Gambar kontainer yang digunakan di aplikasi kontainer Anda. Masuk ke Azure dengan Azure CLI.
az login
Buat grup sumber daya.
az group create --name $RESOURCE_GROUP --location $LOCATION
Buat lingkungan aplikasi kontainer Anda.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Membuat komponen Eureka Server for Spring Java
Setelah memiliki lingkungan yang ada, Anda dapat membuat aplikasi kontainer dan mengikatnya ke instans komponen Java Eureka Server untuk Spring.
Buat komponen Eureka Server for Spring Java.
az containerapp env java-component eureka-server-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME
Opsional: Perbarui konfigurasi komponen Eureka Server for Spring Java.
az containerapp env java-component eureka-server-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME --configuration eureka.server.renewal-percent-threshold=0.85 eureka.server.eviction-interval-timer-in-ms=10000
Mengikat aplikasi kontainer Anda ke komponen Eureka Server for Spring Java
Buat aplikasi kontainer dan ikat ke komponen Eureka Server for Spring.
az containerapp create \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT \ --image $IMAGE \ --min-replicas 1 \ --max-replicas 1 \ --ingress external \ --target-port 8080 \ --bind $EUREKA_COMPONENT_NAME \ --query properties.configuration.ingress.fqdn
Salin URL aplikasi Anda ke editor teks sehingga Anda dapat menggunakannya di langkah mendatang.
Kembali ke aplikasi kontainer di portal. Salin URL aplikasi Anda ke editor teks sehingga Anda dapat menggunakannya di langkah mendatang.
/allRegistrationStatus
Buka rute untuk melihat semua aplikasi yang terdaftar di komponen Eureka Server for Spring.
Pengikatan menyuntikkan beberapa konfigurasi ke dalam aplikasi sebagai variabel lingkungan, terutama eureka.client.service-url.defaultZone
properti . Properti ini menunjukkan titik akhir internal komponen Eureka Server Java.
Pengikatan juga menyuntikkan properti berikut:
"eureka.client.register-with-eureka": "true"
"eureka.client.fetch-registry": "true"
"eureka.instance.prefer-ip-address": "true"
eureka.client.register-with-eureka
Properti diatur ke true
untuk memberlakukan pendaftaran dengan server Eureka. Pendaftaran ini menimpa pengaturan lokal di application.properties
, dari server konfigurasi dan sebagainya. Jika Anda ingin mengaturnya ke false
, Anda dapat menimpanya dengan mengatur variabel lingkungan di aplikasi kontainer Anda.
Properti eureka.instance.prefer-ip-address
diatur ke true
karena aturan resolusi sistem nama domain tertentu di lingkungan aplikasi kontainer. Jangan ubah nilai ini agar Anda tidak memutus pengikatan.
Opsional: Batalkan ikatan aplikasi kontainer Anda dari komponen Eureka Server for Spring Java
Untuk menghapus pengikatan dari aplikasi kontainer, gunakan --unbind
opsi .
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
Menampilkan aplikasi melalui dasbor
Penting
Untuk melihat dasbor, Anda harus memiliki setidaknya peran yang Microsoft.App/managedEnvironments/write
ditetapkan ke akun Anda pada sumber daya lingkungan terkelola. Anda dapat secara eksplisit menetapkan Owner
peran atau Contributor
pada sumber daya. Anda juga dapat mengikuti langkah-langkah untuk membuat definisi peran kustom dan menetapkannya ke akun Anda.
Catatan
Dasbor tidak tersedia di Azure China 21Vianet.
Buat definisi peran kustom.
az role definition create --role-definition '{ "Name": "<YOUR_ROLE_NAME>", "IsCustom": true, "Description": "Can access managed Java Component dashboards in managed environments", "Actions": [ "Microsoft.App/managedEnvironments/write" ], "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"] }'
Pastikan untuk mengganti
<SUBSCRIPTION_ID>
tempat penampung dalamAssignableScopes
nilai dengan ID langganan Anda.Tetapkan peran kustom ke akun Anda pada sumber daya lingkungan terkelola.
Dapatkan ID sumber daya lingkungan terkelola:
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Tetapkan peran ke akun Anda.
Sebelum Anda menjalankan perintah ini, ganti tempat penampung - yang ditunjukkan oleh tanda
<>
kurung - dengan ID pengguna atau perwakilan layanan Anda dan nama peran Anda.az role assignment create \ --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \ --role "<ROLE_NAME>" \ --scope $ENVIRONMENT_ID
Catatan
Nilai
<USER_OR_SERVICE_PRINCIPAL_ID>
biasanya harus menjadi identitas yang Anda gunakan untuk mengakses portal Azure. Nilainya<ROLE_NAME>
adalah nama yang Anda tetapkan di langkah 1.Dapatkan URL dasbor Eureka Server for Spring.
az containerapp env java-component eureka-server-for-spring show \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME \ --query properties.ingress.fqdn \ --output tsv
Perintah ini mengembalikan URL yang dapat Anda gunakan untuk mengakses dasbor Eureka Server for Spring. Dengan dasbor, Anda juga dapat melihat aplikasi kontainer Anda, seperti yang ditunjukkan pada cuplikan layar berikut.
Opsional: Mengintegrasikan Server Eureka untuk Spring dan Admin untuk komponen Spring Java
Jika Anda ingin mengintegrasikan Server Eureka untuk Spring dan Admin untuk komponen Spring Java, lihat Mengintegrasikan Admin terkelola untuk Spring dengan Eureka Server untuk Spring.
Membersihkan sumber daya
Sumber daya yang dibuat dalam tutorial ini berpengaruh pada tagihan Azure Anda. Jika Anda tidak akan menggunakan layanan ini dalam jangka panjang, jalankan perintah berikut untuk menghapus semua yang Anda buat dalam tutorial ini.
az group delete --resource-group $RESOURCE_GROUP
Daftar konfigurasi yang diizinkan untuk Server Eureka Anda untuk Spring
Bagian berikut menjelaskan konfigurasi yang didukung. Untuk informasi selengkapnya, lihat Spring Cloud Eureka Server.
Catatan
Harap kirimkan tiket dukungan untuk permintaan fitur baru.
Opsi konfigurasi
Perintah az containerapp update
menggunakan --configuration
parameter untuk mengontrol bagaimana Eureka Server for Spring dikonfigurasi. Anda dapat menggunakan beberapa parameter sekaligus selama dipisahkan oleh spasi. Untuk informasi selengkapnya, lihat Spring Cloud Eureka Server.
Pengaturan konfigurasi berikut tersedia pada eureka.server
properti konfigurasi:
Nama | Deskripsi | Nilai default |
---|---|---|
eureka.server.enable-self-preservation |
Ketika diaktifkan, server melacak jumlah perpanjangan yang harus diterimanya dari server. Setiap kali jumlah perpanjangan turun di bawah persentase ambang batas seperti yang didefinisikan oleh eureka.server.renewal-percent-threshold . Nilai default diatur ke true di server Eureka asli, tetapi di komponen Eureka Server Java, nilai default diatur ke false . Lihat Batasan Eureka Server untuk komponen Spring Java. |
false |
eureka.server.renewal-percent-threshold |
Persentase minimum perpanjangan yang diharapkan dari klien dalam periode yang ditentukan oleh eureka.server.renewal-threshold-update-interval-ms . Jika perpanjangan turun di bawah ambang batas, kedaluwarsa dinonaktifkan jika eureka.server.enable-self-preservation diaktifkan. |
0.85 |
eureka.server.renewal-threshold-update-interval-ms |
Interval tempat ambang batas - seperti yang ditentukan di - perlu diperbarui eureka.server.renewal-percent-threshold . |
0 |
eureka.server.expected-client-renewal-interval-seconds |
Interval dengan klien diharapkan untuk mengirim heartbeat mereka. Default ke 30 detik. Jika klien mengirim heartbeat dengan frekuensi yang berbeda, katakanlah, setiap 15 detik, maka parameter ini harus disetel sesuai, jika tidak, pelestarian diri tidak akan berfungsi seperti yang diharapkan. | 30 |
eureka.server.response-cache-auto-expiration-in-seconds |
Mendapatkan waktu di mana payload registri harus disimpan di cache jika tidak dibatalkan oleh peristiwa perubahan. | 180 |
eureka.server.response-cache-update-interval-ms |
Mendapatkan interval waktu di mana cache payload klien harus diperbarui. | 0 |
eureka.server.use-read-only-response-cache |
com.netflix.eureka.registry.ResponseCache Saat ini menggunakan strategi penembolokan dua tingkat untuk respons.
readWrite Cache dengan kebijakan kedaluwarsa, dan readonly cache yang menyimpan cache tanpa kedaluwarsa. |
true |
eureka.server.disable-delta |
Memeriksa untuk melihat apakah informasi delta dapat dilayani kepada klien atau tidak. | false |
eureka.server.retention-time-in-m-s-in-delta-queue |
Dapatkan waktu di mana informasi delta harus di-cache agar klien mengambil nilai tanpa melewatkannya. | 0 |
eureka.server.delta-retention-timer-interval-in-ms |
Dapatkan interval waktu saat tugas pembersihan harus bangun dan periksa informasi delta yang kedaluwarsa. | 0 |
eureka.server.eviction-interval-timer-in-ms |
Dapatkan interval waktu dengan tugas yang kedaluwarsa instans harus bangun dan berjalan. | 60000 |
eureka.server.sync-when-timestamp-differs |
Memeriksa apakah akan menyinkronkan instans ketika tanda waktu berbeda. | true |
eureka.server.rate-limiter-enabled |
Menunjukkan apakah pembatas tarif harus diaktifkan atau dinonaktifkan. | false |
eureka.server.rate-limiter-burst-size |
Pembatas tarif, properti algoritma wadah token. | 10 |
eureka.server.rate-limiter-registry-fetch-average-rate |
Pembatas tarif, properti algoritma wadah token. Menentukan tingkat permintaan yang diberlakukan rata-rata. | 500 |
eureka.server.rate-limiter-privileged-clients |
Daftar klien bersertifikat. Ini selain klien eureka Java standar. | N/A |
eureka.server.rate-limiter-throttle-standard-clients |
Menunjukkan apakah batas tarif klien standar. Jika diatur ke false , hanya klien nonstandar yang memiliki tarif terbatas. |
false |
eureka.server.rate-limiter-full-fetch-average-rate |
Pembatas tarif, properti algoritma wadah token. Menentukan tingkat permintaan yang diberlakukan rata-rata. | 100 |
Konfigurasi umum
- Konfigurasi terkait pengelogan:
logging.level.*
logging.group.*
- Konfigurasi lain di bawah
logging.*
namespace harus dilarang - misalnya, menulis file log dengan menggunakanlogging.file
harus dilarang.
Panggilan antar aplikasi
Contoh ini menunjukkan kepada Anda cara menulis kode Java untuk memanggil antara aplikasi yang terdaftar dengan komponen Eureka Server for Spring. Ketika aplikasi kontainer terikat dengan Eureka, mereka berkomunikasi satu sama lain melalui server Eureka.
Contohnya membuat dua aplikasi, pemanggil dan penerima panggilan. Kedua aplikasi berkomunikasi satu sama lain menggunakan komponen Eureka Server for Spring. Aplikasi callee mengekspos titik akhir yang dipanggil oleh aplikasi pemanggil.
Buat aplikasi callee. Aktifkan klien Eureka di aplikasi Spring Boot Anda dengan menambahkan
@EnableDiscoveryClient
anotasi ke kelas utama Anda.@SpringBootApplication @EnableDiscoveryClient public class CalleeApplication { public static void main(String[] args) { SpringApplication.run(CalleeApplication.class, args); } }
Buat titik akhir di aplikasi callee yang dipanggil oleh aplikasi pemanggil.
@RestController public class CalleeController { @GetMapping("/call") public String calledByCaller() { return "Hello from Application callee!"; } }
Atur nama aplikasi callee dalam file konfigurasi aplikasi - misalnya, di application.yml.
spring.application.name=callee
Buat aplikasi pemanggil.
@EnableDiscoveryClient
Tambahkan anotasi untuk mengaktifkan fungsionalitas klien Eureka. Selain itu, buatWebClient.Builder
kacang dengan@LoadBalanced
anotasi untuk melakukan panggilan seimbang beban ke layanan lain.@SpringBootApplication @EnableDiscoveryClient public class CallerApplication { public static void main(String[] args) { SpringApplication.run(CallerApplication.class, args); } @Bean @LoadBalanced public WebClient.Builder loadBalancedWebClientBuilder() { return WebClient.builder(); } }
Buat pengontrol di aplikasi pemanggil yang menggunakan
WebClient.Builder
untuk memanggil aplikasi callee menggunakan nama aplikasinya, callee.@RestController public class CallerController { @Autowired private WebClient.Builder webClientBuilder; @GetMapping("/call-callee") public Mono<String> callCallee() { return webClientBuilder.build() .get() .uri("http://callee/call") .retrieve() .bodyToMono(String.class); } }
Sekarang Anda memiliki aplikasi penelepon dan callee yang berkomunikasi satu sama lain menggunakan komponen Eureka Server for Spring Java. Pastikan kedua aplikasi berjalan dan mengikat dengan server Eureka sebelum menguji /call-callee
titik akhir di aplikasi pemanggil.
Batasan
- Komponen Eureka Server Java dilengkapi dengan konfigurasi default,
eureka.server.enable-self-preservation
, diatur kefalse
. Konfigurasi default ini membantu menghindari waktu ketika instans tidak dihapus setelah pemeliharaan mandiri diaktifkan. Jika instans dihapus terlalu dini, beberapa permintaan mungkin diarahkan ke instans yang tidak ada. Jika Anda ingin mengubah pengaturan ini menjaditrue
, Anda dapat menimpanya dengan mengatur konfigurasi Anda sendiri di komponen Java. - Dasbor Eureka tidak tersedia di Azure China 21Vianet.
Langkah berikutnya
Konten terkait
Mengintegrasikan Admin terkelola untuk Spring dengan Eureka Server untuk Spring