Bagikan melalui


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

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.

  1. 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.
  2. Masuk ke Azure dengan Azure CLI.

    az login
    
  3. Buat grup sumber daya.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. 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.

  1. 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
    
  2. 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

  1. 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
    
  2. 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.

  1. 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 dalam AssignableScopes nilai dengan ID langganan Anda.

  2. 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)
    
  3. 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.

  4. 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.

    Cuplikan layar yang memperlihatkan dasbor Eureka Server for Spring.

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 menggunakan logging.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.

  1. 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);
      }
    }
    
  2. 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!";
        }
    }
    
  3. Atur nama aplikasi callee dalam file konfigurasi aplikasi - misalnya, di application.yml.

    spring.application.name=callee
    
  4. Buat aplikasi pemanggil.

    @EnableDiscoveryClient Tambahkan anotasi untuk mengaktifkan fungsionalitas klien Eureka. Selain itu, buat WebClient.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();
      }
    }
    
  5. 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 ke false. 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 menjadi true, Anda dapat menimpanya dengan mengatur konfigurasi Anda sendiri di komponen Java.
  • Dasbor Eureka tidak tersedia di Azure China 21Vianet.

Langkah berikutnya

Mengintegrasikan Admin terkelola untuk Spring dengan Eureka Server untuk Spring