Birden fazla Spring Cloud mikroservisinin birbirini keşfetmesi ve çağırması gerektiğinde merkezi bir hizmet kayıt defteri sabit kodlanmış uç noktaları ortadan kaldırır ve dinamik yönlendirmeyi mümkün kılar. Microservices Engine (MSE), hizmet keşfi ve yapılandırma yönetimini sağlayan yönetilen bir Nacos kayıt defteri sunar; uygulama içinde kayıt defteri uç noktasını yapılandırırsınız ve uygulama başlatıldığında otomatik olarak kaydolur.
Bu kılavuzda bir sağlayıcı ve bir tüketici uygulaması oluşturma, her ikisini de bir MSE Nacos kayıt defterine kaydetme ve uçtan uca hizmet çağrılarını doğrulama adımları gösterilmektedir.
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
Ortam değişkenleri yapılandırılmış şekilde kurulu Maven
Bir MSE Nacos örneği. Bkz. Örnek oluşturma.
Bir ad alanı. Bkz. Ad alanı oluşturma. Bu kılavuzda varsayılan
Publicad alanı kullanılmaktadır.
MSE Nacos kayıt defterine İnternet üzerinden erişiyorsanız hem sağlayıcının hem de tüketicinin İnternet erişimine sahip olması gerekir. Genel IP adreslerini kayıt defterinin izin listesine ekleyin. Bkz. Genel IP adresi izin listesi yapılandırma.
Adım 1: Sağlayıcıyı oluşturma
Bir REST uç noktası sunan ve hizmet sağlayıcısı olarak MSE Nacos kayıt defterine kaydedilen bir Spring Cloud uygulaması oluşturun.
1. Maven projesi oluşturma
nacos-service-provider adlı bir Maven projesi oluşturun.
2. Bağımlılıkları ekleme
pom.xml dosyasına aşağıdakileri ekleyin. Bu örnekte Spring Boot 2.1.4.RELEASE ve Spring Cloud Greenwich.SR1 kullanılmaktadır.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<!-- Nacos service discovery -->
<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 Alibaba sürümü, Spring Cloud sürümüyle eşleşmelidir:
| Spring Cloud sürümü | Spring Cloud Alibaba sürümü | Durum |
|---|---|---|
| Greenwich | 2.1.1.RELEASE | Etkin |
| Finchley | 2.0.1.RELEASE | Etkin |
| Edgware | 1.5.1.RELEASE | Kullanımdan kaldırıldı |
Spring Cloud Edgware kullanımdan kaldırılmıştır. Yeni uygulamalarda kullanmayın.
3. Uygulama sınıfını oluşturma
src/main/java dizini altında com.aliware.edas adlı bir paket oluşturun. ProviderApplication adlı aşağıdaki sınıfı ekleyin.
@EnableDiscoveryClient açıklaması hizmet kaydı ve keşfini etkinleştirir.
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);
}
}
4. REST denetleyicisi oluşturma
Aynı com.aliware.edas paketi içinde GET isteklerini /echo/{string} yoluna eşleyen ve yol değişkenini döndüren EchoController adlı bir sınıf 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;
}
}
5. Nacos kayıt defteri uç noktasını yapılandırma
src/main/resources dizini altında application.properties adlı bir dosya oluşturun:
spring.application.name=service-provider
server.port=18081
spring.cloud.nacos.discovery.server-addr=mse.XX.nacos.mse.aliyuncs.com:8848
# To use a custom namespace, uncomment the following line:
# spring.cloud.nacos.discovery.namespace=<namespace-id>
mse.XX.nacos.mse.aliyuncs.com değerini MSE Nacos örneğinizin genel uç noktasıyla değiştirin. Bu değeri bulmak için MSE konsolunu açın, Microservices Registry > Instances seçeneğine gidin ve örnek ayrıntıları sayfasında uç noktayı bulun.
Nacos yerine bir MSE ZooKeeper veya Eureka kayıt defteri kullanıyorsanız kayıt defteri yapılandırmasını buna göre değiştirin. Bkz. Kullanım notları.
6. Sağlayıcı kaydını doğrulama
Sağlayıcıyı başlatmak için ProviderApplication öğesinin
mainyöntemini çalıştırın.MSE konsoluna giriş yapın ve üst gezinme çubuğundan bir bölge seçin.
Sol gezinme bölmesinde Microservices Registry > Instances seçeneğini belirleyin. Örnek adına tıklayın.
Service Management > Services seçeneğini belirleyin.
Services sayfasında
service-providerhizmetinin listelendiğini doğrulayın.
Adım 2: Tüketiciyi oluşturma
RestTemplate ve FeignClient kullanarak sağlayıcıyı çağıran ve aynı MSE Nacos kayıt defterine kaydedilen bir Spring Cloud uygulaması oluşturun.
1. Maven projesi oluşturma
nacos-service-consumer adlı bir Maven projesi oluşturun.
2. Bağımlılıkları ekleme
pom.xml dosyasına aşağıdakileri ekleyin. Sağlayıcıya kıyasla tüketici bildirim temelli REST çağrıları için spring-cloud-starter-openfeign bağımlılığını içerir.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<!-- Nacos service discovery -->
<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>
<!-- Declarative REST client -->
<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>
3. FeignClient arayüzünü oluşturma
src/main/java dizini altında com.aliware.edas adlı bir paket oluşturun. service-provider hizmetini işaret eden @FeignClient açıklamasına sahip EchoService adlı bir arayüz 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")
public interface EchoService {
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
String echo(@PathVariable("str") String str);
}
4. Uygulama sınıfını oluşturma
Aynı pakette aşağıdaki açıklamalara sahip ConsumerApplication adlı bir sınıf oluşturun:
@EnableDiscoveryClient-- hizmet kaydı ve keşfini etkinleştirir@EnableFeignClients-- FeignClient'i etkinleştirirRestTemplatebean'i üzerindeki@LoadBalanced-- RestTemplate'i istemci tarafı yük dengeleme için hizmet keşfi ile entegre eder
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);
}
}
5. Test denetleyicisi oluşturma
Aynı pakette her iki hizmet keşfi yöntemini de göstermek amacıyla biri RestTemplate diğeri FeignClient kullanan iki uç nokta sunan TestController adlı bir sınıf 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;
@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);
}
}
6. Nacos kayıt defteri uç noktasını yapılandırma
src/main/resources dizini altında application.properties adlı bir dosya oluşturun:
spring.application.name=service-consumer
server.port=18082
spring.cloud.nacos.discovery.server-addr=mse.XX.nacos.mse.aliyuncs.com:8848
# To use a custom namespace, uncomment the following line:
# spring.cloud.nacos.discovery.namespace=<namespace-id>
mse.XX.nacos.mse.aliyuncs.com değerini 1. Adım'ın 5. alt adımında açıklandığı gibi MSE Nacos örneğinizin genel uç noktasıyla değiştirin.
Nacos yerine bir MSE ZooKeeper veya Eureka kayıt defteri kullanıyorsanız kayıt defteri yapılandırmasını buna göre değiştirin. Bkz. Kullanım notları.
7. Tüketici kaydını doğrulama
Tüketiciyi başlatmak için ConsumerApplication öğesinin
mainyöntemini çalıştırın.MSE konsoluna giriş yapın ve üst gezinme çubuğundan bir bölge seçin.
Sol gezinme bölmesinde Microservices Registry > Instances seçeneğini belirleyin. Örnek adına tıklayın.
Service Management > Services seçeneğini belirleyin.
Services sayfasında
service-consumerhizmetinin listelendiğini doğrulayın.
Adım 3: Hizmet çağrılarını test etme
Her iki uygulama da çalışırken tüketicinin sağlayıcıyı keşfedip çağırabildiğini doğrulayın.
Linux, UNIX veya macOS:
curl http://127.0.0.1:18082/echo-rest/rest-rest
curl http://127.0.0.1:18082/echo-feign/feign-rest
Windows: Bir tarayıcı açın ve aşağıdaki URL'lere gidin:
http://127.0.0.1:18082/echo-rest/rest-resthttp://127.0.0.1:18082/echo-feign/feign-rest
RestTemplate uç noktası için beklenen çıktı:
rest-rest
FeignClient uç noktası için beklenen çıktı:
feign-rest
Her iki yanıt da eşleşiyorsa tüketici MSE Nacos kayıt defteri aracılığıyla sağlayıcıyı keşfetmiş ve çağırmıştır.
SSS
Hizmetler kayıt sonrasında MSE konsolunda görünmüyor
Varsayılan olarak genel IP adresi izin listesi 127.0.0.1/32 olarak ayarlanır ve bu durum tüm harici erişimi engeller. Sağlayıcı ve tüketici makinelerinizin genel IP adreslerini izin listesine ekleyin. Bkz. Genel IP adresi izin listesi yapılandırma.
MSE hangi Spring Cloud sürümlerini destekler?
| Spring Cloud sürümü | Spring Cloud Alibaba sürümü | Durum |
|---|---|---|
| Greenwich | 2.1.1.RELEASE | Etkin |
| Finchley | 2.0.1.RELEASE | Etkin |
| Edgware | 1.5.1.RELEASE | Kullanımdan kaldırıldı |
Spring Cloud Edgware kullanımdan kaldırılmıştır. Yeni uygulamalarda kullanmayın.