Enterprise Distributed Application Service (EDAS), Nacos kayıt defterinin genel kullanıma sunulan (GA) sürümünü sağlar. Nacos ile oluşturulan Spring Cloud uygulamaları, kod değişikliği yapmadan bu paylaşılan kayıt defterine bağlanabilir; uygulamaları EDAS'a dağıttığınızda platform kayıt defteri bağlantısını otomatik olarak yönetir.
Bu konuda, hizmet keşfi için Nacos'a kayıt olan iki Spring Cloud mikroservisinin (bir hizmet sağlayıcı ve bir hizmet tüketici) nasıl oluşturulacağı adım adım anlatılmaktadır. İşlem sonunda şunlara sahip olacaksınız:
Tekil modda çalışan yerel bir Nacos Server.
Nacos'a kayıt olan ve bir REST uç noktası sunan bir hizmet sağlayıcı.
Sağlayıcıyı hem RestTemplate hem de FeignClient aracılığıyla keşfeden bir hizmet tüketici.
Uçtan uca hizmet keşfinin yerel ortamda doğrulanması.
Yerel doğrulamadan sonra her iki uygulamayı da EDAS'a dağıtın. Ayrıntılı bilgi için bkz. Uygulamaları ECS örneklerine dağıtma veya Uygulamaları Kubernetes kümelerine dağıtma.
EDAS; Nacos, Eureka, ZooKeeper ve Consul (kendi kendine yönetilen veya Microservice Engine (MSE) üzerinden) dahil olmak üzere birden çok kayıt defterini destekler. Kullandığınız kayıt defterinden bağımsız olarak EDAS, dağıtımdan sonra uygulama yönetimi, mikroservis yönetişimi ve cloud-native PaaS yetenekleri sunar.
Ön koşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
Maven yüklü ve ortam değişkenleri yapılandırılmış
En son Nacos Server indirilmiş ve çıkarılmış
Nacos Server'ı başlatma
nacos/bindizinine gidin.-
Nacos Server'ı tekil modda başlatın:
-
Linux, UNIX veya macOS:
sudo sh startup.sh -m standalone Windows:
startup.cmddosyasına çift tıklayın.
-
Nacos Server'ın çalıştığını doğrulamak için tarayıcınızda
http://127.0.0.1:8848/nacosadresini açın. Varsayılan kullanıcı adı ve parolanacosdeğeridir.
Proje yapısı
Bu konuda iki bağımsız Maven projesi oluşturulur:
nacos-service-provider/
├── pom.xml
└── src/main/
├── java/com/aliware/edas/
│ ├── ProviderApplication.java
│ └── EchoController.java
└── resources/
└── application.properties
nacos-service-consumer/
├── pom.xml
└── src/main/
├── java/com/aliware/edas/
│ ├── ConsumerApplication.java
│ ├── EchoService.java
│ └── TestController.java
└── resources/
└── application.properties
Tam demo projelerini indirin: service-provider | service-consumer.
Hizmet sağlayıcıyı oluşturma
1. Adım: Maven projesini ayarlama
nacos-service-provider adında bir Maven projesi oluşturun ve aşağıdaki bağımlılıkları pom.xml dosyasına ekleyin. Bu örnekte Spring Boot 2.1.4.RELEASE ve Spring Cloud Greenwich.SR1 kullanılmaktadır:
Spring Cloud Alibaba sürümü, kullandığınız Spring Cloud sürümüyle eşleşmelidir:
| Spring Cloud sürümü | Spring Cloud Alibaba sürümü |
|---|---|
| Greenwich | 2.1.1.RELEASE |
| Finchley | 2.0.1.RELEASE |
| Edgware | 1.5.1.RELEASE |
Spring Cloud Edgware kullanım ömrünü tamamlamıştır. Yeni projelerde Edgware kullanmayın.
2. Adım: Uygulama sınıfını oluşturma
src/main/java dizininde com.aliware.edas paketini oluşturun, ardından ProviderApplication.java dosyasını ekleyin:
package com.aliware.edas;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient // Enables service registration and discovery
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
3. Adım: REST denetleyicisi ekleme
Aynı pakette, /echo/{string} uç noktasını sunmak için EchoController.java dosyasını oluşturun:
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;
}
}
4. Adım: Kayıt defteri adresini yapılandırma
src/main/resources dizininde application.properties dosyasını oluşturun:
spring.application.name=service-provider
server.port=18081
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
Nacos Server farklı bir makinede çalışıyorsa 127.0.0.1 IP adresini Nacos Server'ınızın IP adresiyle değiştirin. Ek yapılandırma seçenekleri için bkz. Yapılandırma referansı.
5. Adım: Kaydı doğrulama
Hizmeti başlatmak için
ProviderApplicationsınıfınınmainyöntemini çalıştırın.Nacos konsolunu
http://127.0.0.1:8848/nacosadresinde açın (kullanıcı adı/parola:nacos/nacos).Service Management > Services seçeneğine gidin. Hizmet listesinde
service-providergörünür. Örnek IP adresi ve bağlantı noktası gibi kayıt ayrıntılarını görüntülemek için Details öğesini tıklayın.
Hizmet tüketiciyi oluşturma
Tüketici, sağlayıcıyı çağırma konusunda iki yaklaşımı gösterir: İstemci tarafı yük dengeleme ile RestTemplate ve bildirim temelli HTTP istemcisi olarak FeignClient.
1. Adım: Maven projesini ayarlama
nacos-service-consumer adında bir Maven projesi oluşturun ve aşağıdaki bağımlılıkları pom.xml dosyasına ekleyin:
2. Adım: Feign istemci arabirimini tanımlama
src/main/java dizininde com.aliware.edas paketini oluşturun, ardından EchoService.java dosyasını ekleyin:
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") // Refers to the provider's registered service name
public interface EchoService {
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
String echo(@PathVariable("str") String str);
}
3. Adım: Uygulama sınıfını oluşturma
Aynı pakette ConsumerApplication.java dosyasını oluşturun:
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 // Enables service registration and discovery
@EnableFeignClients // Activates FeignClient scanning
public class ConsumerApplication {
@LoadBalanced // Integrates RestTemplate with service discovery for client-side load balancing
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
Ek açıklama özeti:
@EnableDiscoveryClient-- bu uygulamayı Nacos'a kaydeder.@EnableFeignClients--@FeignClientarabirimlerini tarar ve proxy bean'leri oluşturur.@LoadBalanced-- RestTemplate'in DNS yerine kayıt defteri aracılığıyla hizmet adlarını (örneğinservice-provider) çözmesini sağlar.
4. Adım: Test denetleyicisi ekleme
Aynı pakette, sağlayıcıyı farklı yaklaşımlarla çağıran iki uç noktaya sahip TestController.java dosyasını oluşturun:
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;
// Uses RestTemplate with service discovery to call the provider
@RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)
public String rest(@PathVariable String str) {
return restTemplate.getForObject("http://service-provider/echo/" + str,
String.class);
}
// Uses FeignClient to call the provider
@RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)
public String feign(@PathVariable String str) {
return echoService.echo(str);
}
}
5. Adım: Kayıt defteri adresini yapılandırma
src/main/resources dizininde application.properties dosyasını oluşturun:
spring.application.name=service-consumer
server.port=18082
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
Nacos Server farklı bir makinede çalışıyorsa 127.0.0.1 IP adresini Nacos Server'ınızın IP adresiyle değiştirin.
6. Adım: Kaydı doğrulama
Hizmeti başlatmak için
ConsumerApplicationsınıfınınmainyöntemini çalıştırın.Nacos konsolunu
http://127.0.0.1:8848/nacosadresinde açın.Service Management > Services seçeneğine gidin. Hizmet listesinde
service-providerile birlikteservice-consumergörünür.
Hizmet keşfini yerel olarak test etme
Her iki uygulama da çalışırken uçtan uca hizmet keşfini test edin. Tüketici, service-provider hizmet adını Nacos aracılığıyla çözer ve her isteği sağlayıcıya iletir.
Linux, UNIX veya macOS:
# Test with RestTemplate
curl http://127.0.0.1:18082/echo-rest/rest-rest
# Test with FeignClient
curl http://127.0.0.1:18082/echo-feign/feign-rest
Windows: Aşağıdaki URL'leri tarayıcınızda açın:
http://127.0.0.1:18082/echo-rest/rest-resthttp://127.0.0.1:18082/echo-feign/feign-rest
Beklenen çıktı:
| Uç nokta | Beklenen yanıt |
|---|---|
/echo-rest/rest-rest |
rest-rest |
/echo-feign/feign-rest |
feign-rest |
Her iki uç nokta da yol parametresi değerini döndürüyorsa hizmet kaydı ve keşfi doğru şekilde çalışıyor demektir.
EDAS'a dağıtma
Yerel doğrulamadan sonra her iki uygulamayı da EDAS'a dağıtın. EDAS yönetilen bir Nacos kayıt defteri sağladığından uygulamalarınız kod değişikliği yapmadan buna otomatik olarak bağlanır.
Dağıtım talimatları için bkz.:
Yapılandırma referansı
Nacos Discovery, application.properties dosyasındaki aşağıdaki yapılandırma özelliklerini destekler:
| Yapılandırma öğesi | Anahtar | Varsayılan değer | Açıklama |
|---|---|---|---|
| Sunucu adresi | spring.cloud.nacos.discovery.server-addr |
Yok | Nacos Server'ın IP adresi ve bağlantı noktası |
| Hizmet adı | spring.cloud.nacos.discovery.service |
${spring.application.name} |
Hizmeti kaydetmek için kullanılan ad |
| NIC adı | spring.cloud.nacos.discovery.network-interface |
Yok | IP adresi kaydedilen ağ arabirimi. Belirtilmezse varsayılan olarak ilk NIC kullanılır |
| Kaydedilen IP adresi | spring.cloud.nacos.discovery.ip |
Yok | Otomatik algılanan IP adresini geçersiz kılar. En yüksek önceliğe sahiptir |
| Kaydedilen bağlantı noktası | spring.cloud.nacos.discovery.port |
-1 | Varsayılan olarak otomatik algılanır |
| Ad alanı | spring.cloud.nacos.discovery.namespace |
Yok | Hizmetleri ortamlar arasında yalıtır (örneğin, geliştirme, hazırlama, üretim) |
| Meta veri | spring.cloud.nacos.discovery.metadata |
Yok | Hizmet örneğine eklenen özel anahtar-değer çiftleri. Harita biçiminde yapılandırılır |
| Küme | spring.cloud.nacos.discovery.cluster-name |
DEFAULT | Nacos küme adı |
| Uç nokta | spring.cloud.nacos.discovery.endpoint |
UTF-8 | Dinamik sunucu adresi çözümlemesi için alan adı. EDAS'a dağıtıldığında gerekli değildir |
| Ribbon entegrasyonu | ribbon.nacos.enabled |
true | Nacos ile Ribbon tabanlı yük dengelemeyi etkinleştirir. Yalnızca gerektiğinde değiştirin |
Tam referans için GitHub'daki Nacos Discovery sayfasına bakın.