Enterprise Distributed Application Service (EDAS) menyediakan versi ketersediaan umum (GA) dari registri Nacos. Aplikasi yang dikembangkan di Nacos dapat menggunakan registri bersama EDAS tanpa modifikasi kode. Anda hanya perlu menerapkan aplikasi ke EDAS. Topik ini menjelaskan cara mengembangkan sepasang aplikasi mikro layanan contoh Spring Cloud di lingkungan lokal berdasarkan Nacos, mencakup penyedia layanan dan konsumen layanan.
Informasi latar belakang
Aplikasi layanan mikro menggunakan registri untuk mengimplementasikan pendaftaran layanan dan penemuan layanan. Saat mengembangkan aplikasi, Anda dapat memilih registri sesuai dengan kebutuhan aktual Anda.
Anda dapat menggunakan Nacos, yang dijelaskan dalam topik ini, sebagai registri untuk mengimplementasikan pendaftaran layanan dan penemuan layanan untuk aplikasi Anda. Anda juga dapat menggunakan jenis registri lainnya, seperti Eureka, ZooKeeper, dan Consul yang dibuat pengguna atau dikelola di Microservice Engine (MSE). Setelah menerapkan aplikasi ke EDAS, Anda dapat memanfaatkan fitur manajemen aplikasi, tata kelola layanan mikro, dan Platform as a Service (PaaS) berbasis cloud native dari EDAS terlepas dari jenis registri.
Anda dapat mengimplementasikan pendaftaran layanan dan penemuan layanan untuk aplikasi Anda berdasarkan instruksi dalam topik ini. Anda juga dapat mengunduh demo aplikasi: penyedia-layanan dan konsumen-layanan.
Persiapan
Sebelum mengembangkan aplikasi, pastikan Anda telah menyelesaikan operasi berikut:
Unduh Maven dan atur variabel lingkungan.
Unduh versi terbaru dari Nacos Server.
Lakukan langkah-langkah berikut untuk memulai Nacos Server:
Dekompres paket Nacos Server yang diunduh.
Masuk ke direktori
nacos/binuntuk memulai Nacos Server.Di Linux, UNIX, atau macOS, jalankan perintah
sudo sh startup.sh -m standalone.Di Windows, klik dua kali file
startup.cmduntuk menjalankannya.
Buat penyedia layanan
Buat proyek aplikasi penyedia di lingkungan lokal, tambahkan dependensi, aktifkan fitur pendaftaran dan penemuan layanan, lalu tentukan Nacos Server sebagai registri.
Buat proyek Maven bernama
nacos-service-provider.Tambahkan dependensi ke file
pom.xml.Kode berikut memberikan contoh cara menambahkan dependensi. Spring Boot 2.1.4.RELEASE dan Spring Cloud Greenwich.SR1 digunakan dalam contoh ini.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>Spring Cloud Greenwich digunakan dalam contoh ini, dan versi Spring Cloud Alibaba adalah 2.1.1.RELEASE.
Jika Anda menggunakan Spring Cloud Finchley, versi Spring Cloud Alibaba adalah 2.0.1.RELEASE.
Jika Anda menggunakan Spring Cloud Edgware, versi Spring Cloud Alibaba adalah 1.5.1.RELEASE.
CatatanRilis Spring Cloud Edgware telah mencapai akhir masa layanannya. Oleh karena itu, kami sarankan Anda tidak menggunakan rilis ini untuk mengembangkan aplikasi.
Di
src\main\java, buat paket bernamacom.aliware.edas.Di paket
com.aliware.edas, buat kelas startup bernamaProviderApplicationuntuk penyedia layanan, dan tambahkan kode berikut.Anotasi
@EnableDiscoveryClientmenunjukkan bahwa fitur pendaftaran dan penemuan layanan harus diaktifkan untuk aplikasi.package com.aliware.edas; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } }Di paket
com.aliware.edas, buatEchoController.Di
EchoController, tentukan/echo/{string}sebagai pemetaan URL dan GET sebagai metode HTTP. Ambil parameter metode dari jalur URL, dan gema parameter yang diterima.package com.aliware.edas; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class EchoController { @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET) public String echo(@PathVariable String string) { return string; } }Di
src\main\resources, buat file bernamaapplication.propertiesdan tambahkan konfigurasi berikut keapplication.propertiesuntuk menentukan alamat IP Nacos Server.spring.application.name=service-provider server.port=18081 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848Dalam konfigurasi sebelumnya,
127.0.0.1adalah alamat IP Nacos Server. Jika Nacos Server Anda diterapkan di mesin lain, Anda harus mengubah nilainya menjadi alamat IP mesin tersebut. Jika Anda memiliki persyaratan lain, tambahkan item konfigurasi ke fileapplication.properties. Untuk informasi lebih lanjut, lihat Item Konfigurasi untuk Referensi.Verifikasi hasilnya.
Gunakan fungsi
maindariProviderApplicationdinacos-service-provideruntuk memulai aplikasi.Masuk ke konsol Nacos Server lokal di
http://127.0.0.1:8848/nacos.Nama pengguna dan kata sandi default konsol Nacos Server lokal adalah nacos.
Di panel navigasi sisi kiri, pilih Service Management > Services.
Anda dapat melihat bahwa
service-providermuncul dalam daftar layanan. Anda juga dapat menanyakan informasi detail tentang layanan di Details.
Buat konsumen layanan
Bagian ini menjelaskan fitur pendaftaran layanan dan menjelaskan bagaimana Nacos Server bekerja dengan RestTemplate dan FeignClient.
Buat proyek Maven bernama
nacos-service-consumer.Tambahkan dependensi ke file
pom.xml.<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>Di
src\main\java, buat paket bernamacom.aliware.edas.Di paket
com.aliware.edas, konfigurasikan RestTemplate dan FeignClient.Di paket
com.aliware.edas, buat kelas antarmuka bernamaEchoService, tambahkan anotasi@FeignClient, lalu konfigurasikan URL HTTP dan metode HTTP.package com.aliware.edas; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @FeignClient(name = "service-provider") public interface EchoService { @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET) String echo(@PathVariable("str") String str); }Di paket
com.aliware.edas, buat kelas startup bernamaConsumerApplicationdan tambahkan konfigurasi terkait.Gunakan anotasi
@EnableDiscoveryClientuntuk mengaktifkan pendaftaran dan penemuan layanan.Gunakan anotasi
@EnableFeignClientsuntuk mengaktifkan FeignClient.Tambahkan anotasi
@LoadBalanceduntuk mengintegrasikan RestTemplate dengan penemuan layanan.
package com.aliware.edas; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class ConsumerApplication { @LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
Di paket
com.aliware.edas, buat kelas bernamaTestControlleruntuk mendemonstrasikan dan memverifikasi fitur penemuan layanan.package com.aliware.edas; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class TestController { @Autowired private RestTemplate restTemplate; @Autowired private EchoService echoService; @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET) public String rest(@PathVariable String str) { return restTemplate.getForObject("http://service-provider/echo/" + str, String.class); } @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET) public String feign(@PathVariable String str) { return echoService.echo(str); } }Di
src\main\resources, buat file bernamaapplication.propertiesdan tambahkan konfigurasi berikut keapplication.propertiesuntuk menentukan alamat IP Nacos Server.spring.application.name=service-consumer server.port=18082 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848Dalam konfigurasi sebelumnya,
127.0.0.1adalah alamat IP Nacos Server. Jika Nacos Server Anda diterapkan di mesin lain, Anda harus mengubah nilainya menjadi alamat IP mesin tersebut. Jika Anda memiliki persyaratan lain, tambahkan item konfigurasi ke fileapplication.properties. Untuk informasi lebih lanjut, lihat Item Konfigurasi untuk Referensi.Verifikasi hasilnya.
Jalankan fungsi
maindariConsumerApplicationdinacos-service-consumeruntuk memulai aplikasi.Masuk ke konsol Nacos Server lokal di
http://127.0.0.1:8848/nacos.Nama pengguna dan kata sandi default konsol Nacos Server lokal adalah nacos.
Di panel navigasi sisi kiri, pilih Service Management > Services. Anda dapat melihat bahwa
service-consumermuncul dalam daftar layanan. Anda juga dapat menanyakan detail tentang layanan di Detail.
Uji hasilnya di lingkungan lokal
Inisiasi panggilan dari konsumen ke penyedia di lingkungan lokal dan uji hasilnya.
Di Linux, UNIX, atau macOS, jalankan perintah berikut:
curl http://127.0.0.1:18082/echo-rest/rest-rest curl http://127.0.0.1:18082/echo-feign/feign-restDi Windows, masukkan http://127.0.0.1:18082/echo-rest/rest-rest dan http://127.0.0.1:18082/echo-feign/feign-rest di browser.
Apa yang harus dilakukan selanjutnya
Setelah aplikasi dikembangkan, mereka dapat diterapkan ke EDAS. Untuk informasi lebih lanjut, lihat Ikhtisar dan Ikhtisar.
Item konfigurasi untuk referensi
Item konfigurasi | Kunci | Nilai default | Deskripsi |
Alamat server | spring.cloud.nacos.discovery.server-addr | Tidak ada | Alamat IP dan port tempat Nacos Server mendengarkan. |
Nama layanan | spring.cloud.nacos.discovery.service | ${spring.application.name} | Nama layanan saat ini. |
Nama Network Interface Controller (NIC) | spring.cloud.nacos.discovery.network-interface | Tidak ada | Jika tidak ada alamat IP yang ditentukan, alamat IP terdaftar adalah alamat IP NIC. Jika item konfigurasi ini tidak ditentukan, alamat IP NIC pertama digunakan secara default. |
Alamat IP terdaftar | spring.cloud.nacos.discovery.ip | Tidak ada | Item konfigurasi ini memiliki prioritas tertinggi. |
Port terdaftar | spring.cloud.nacos.discovery.port | -1 | Tidak diperlukan konfigurasi secara default. Sistem mendeteksi port secara otomatis. |
Namespace | spring.cloud.nacos.discovery.namespace | Tidak ada | Namespace banyak digunakan untuk mengisolasi sumber daya di lingkungan yang berbeda. Misalnya, Anda dapat menggunakan namespace untuk mengisolasi sumber daya seperti konfigurasi dan layanan di lingkungan pengembangan, pengujian, dan produksi. |
Metadata | spring.cloud.nacos.discovery.metadata | Tidak ada | Item ini harus dikonfigurasikan dalam format Map. Anda dapat menentukan informasi metadata yang terkait dengan layanan sesuai kebutuhan. |
Cluster | spring.cloud.nacos.discovery.cluster-name | DEFAULT | Nama kluster Nacos. |
Endpoint | spring.cloud.nacos.discovery.endpoint | UTF-8 | Nama domain layanan di wilayah tersebut. Anda dapat secara dinamis mengambil alamat server menggunakan nama domain ini. Anda tidak perlu menentukan item konfigurasi ini saat menerapkan layanan ke EDAS. |
Aktifkan integrasi Ribbon | ribbon.nacos.enabled | true | Ubah nilai hanya jika diperlukan. |
Untuk informasi lebih lanjut tentang Spring Cloud Alibaba Nacos Discovery, lihat versi open source dari Nacos Discovery.