Hizmet ağ geçidi, URL yolu, üstbilgiler veya sorgu parametreleri gibi yapılandırılabilir kurallara dayanarak gelen istemci isteklerini arka uç mikro hizmetlere yönlendirir. Bu konuda, Nacos'u hizmet kayıt defteri olarak kullanarak Spring Cloud Gateway veya Spring Cloud Netflix Zuul ile bir ağ geçidinin nasıl oluşturulacağı açıklanmaktadır.
Adım adım kurulum sürecini atlamak istiyorsanız eksiksiz demo projelerini indirin:
Spring Cloud Gateway istekleri nasıl yönlendirir
Spring Cloud Gateway, istekleri üç temel yapı taşı üzerinden işler:
| Yapı | Açıklama |
|---|---|
| Route (Rota) | Temel yapı taşıdır. Her rota, gelen bir isteği bir arka uç hizmetine eşler; bir kimlik (ID), hedef URI, bir veya daha fazla predicate ve isteğe bağlı filter'lardan oluşur. |
| Predicate | Gelen istekle (yol, üstbilgi, sorgu parametresi vb.) karşılaştırılan bir eşleşme koşuludur. Tüm predicate'ler true döndüğünde rota eşleşmiş olur. |
| Filter | İstek aşağı akışa iletilmeden önce veya sonra isteği ya da yanıtı değiştiren bir işleme adımıdır. Örneğin, StripPrefix=1 kod bloğu, istek aşağıya gönderilmeden önce ilk yol segmentini kaldırır. |
İstek akışı şu şekildedir: İstemci -> Ağ Geçidi İşleyici Eşlemesi (predicate'leri değerlendirerek bir rotayla eşleştirir) -> Ağ Geçidi Web İşleyicisi (filter zincirini çalıştırır) -> Arka Uç Hizmeti. Filter'lar, proxy edilen istekten önce ve sonra çalışarak üstbilgileri değiştirmenize, yolları yeniden yazmanıza veya kimlik doğrulamayı ağ geçidi düzeyinde eklemenize olanak tanır.
Ön koşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
Ortam değişkenleri yapılandırılmış şekilde Maven yüklü olmalıdır.
En son Nacos Server indirilmiş olmalıdır.
-
İsteğe bağlı:
Nacos Server'ı başlatın
İndirilen Nacos Server paketini açın.
-
nacos/bindizinine gidin ve Nacos Server'ı tek başına modda başlatın:-
Linux, UNIX veya macOS için:
sh startup.sh -m standalone Windows için:
startup.cmddosyasına çift tıklayın.
-
Spring Cloud Gateway ile hizmet ağ geçidi oluşturma
Spring Cloud Gateway, Project Reactor ve Spring WebFlux üzerine kuruludur ve engellemeyen, reaktif bir ağ geçidi sağlar.
1. Adım: Ağ geçidi projesini oluşturun
spring-cloud-gateway-nacosadında bir Maven projesi oluşturun.-
Aşağıdaki bağımlılıkları
pom.xmldosyasına 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> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </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> -
GatewayApplicationadlı başlangıç sınıfını oluşturun:@SpringBootApplication @EnableDiscoveryClient public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } }
2. Adım: Yönlendirme kurallarını yapılandırın
Aşağıdaki yapılandırmayı application.yaml dosyasına ekleyin. Nacos Server farklı bir makinede çalışıyorsa 127.0.0.1:8848 adresini gerçek Nacos Server adresinizle değiştirin.
server:
port: 18012
spring:
application:
name: spring-cloud-gateway-nacos
cloud:
gateway:
routes:
- id: service-provider
uri: lb://service-provider
predicates:
- Path=/provider1/**
filters:
- StripPrefix=1
nacos:
discovery:
server-addr: 127.0.0.1:8848
Bu rota yapılandırması aşağıdaki şekilde çalışır:
| Bileşen | Değer | Açıklama |
|---|---|---|
| Predicate | Path=/provider1/** |
Yolu /provider1/ ile başlayan tüm istekleri eşleştirir. |
| URI | lb://service-provider |
Eşleşen istekleri istemci tarafı yük dengeleme kullanarak service-provider hizmetine iletir. |
| Filter | StripPrefix=1 |
İletmeden önce ilk yol segmentini kaldırır. Örneğin, /provider1/echo/hello adresi /echo/hello haline gelir. |
3. Adım: Ağ geçidini başlatın ve kaydı doğrulayın
Ağ geçidini başlatmak için
GatewayApplicationana işlevini çalıştırın.Varsayılan kullanıcı adı ve şifre (
nacos) ilehttp://127.0.0.1:8848/nacosadresinden Nacos Server konsolunu açın.Sol gezinme bölmesinde Service Management > Services seçeneğini belirleyin. Hizmet listesinde
spring-cloud-gateway-nacosöğesinin göründüğünü onaylayın.
Spring Cloud Netflix Zuul ile hizmet ağ geçidi oluşturma
Zuul, engelleyen G/Ç modeline dayalı alternatif bir ağ geçidi seçeneğidir. Netflix OSS yığınını zaten kullanan uygulamalar için uygundur.
1. Adım: Ağ geçidi projesini oluşturun
spring-cloud-zuul-nacosadında bir Maven projesi oluşturun.-
Aşağıdaki bağımlılıkları
pom.xmldosyasına ekleyin. Bu örnekte Spring Boot 2.1.4.RELEASE, Spring Cloud Greenwich.SR1 ve Spring Cloud Alibaba 0.9.0 kullanılmaktadır:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </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> -
ZuulApplicationadlı başlangıç sınıfını oluşturun:@SpringBootApplication @EnableZuulProxy @EnableDiscoveryClient public class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); } }
2. Adım: Yönlendirme kurallarını yapılandırın
Aşağıdaki yapılandırmayı application.properties dosyasına ekleyin. Nacos Server farklı bir makinede çalışıyorsa 127.0.0.1:8848 adresini gerçek Nacos Server adresinizle değiştirin.
spring.application.name=spring-cloud-zuul-nacos
server.port=18022
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
zuul.routes.opensource-provider1.path=/provider1/**
zuul.routes.opensource-provider1.serviceId=service-provider
Bu yapılandırma, yolu /provider1/ ile başlayan tüm istekleri service-provider arka uç hizmetine yönlendirir.
3. Adım: Ağ geçidini başlatın ve kaydı doğrulayın
Ağ geçidini başlatmak için
ZuulApplicationana işlevini çalıştırın.Varsayılan kullanıcı adı ve şifre (
nacos) ilehttp://127.0.0.1:8848/nacosadresinden Nacos Server konsolunu açın.Sol gezinme bölmesinde Service Management > Services seçeneğini belirleyin. Hizmet listesinde
spring-cloud-zuul-nacosöğesinin göründüğünü onaylayın.
Hizmet sağlayıcı oluşturma
Hem Spring Cloud Gateway hem de Zuul, istekleri iletmek için bir aşağı akış hizmetine ihtiyaç duyar. Ayrıntılar için bkz. Hizmet kaydı ve keşfi uygulama.
Aşağıdaki örnek, tek bir /echo/{string} uç noktasına sahip minimal bir hizmet sağlayıcı oluşturur:
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
@RestController
public class EchoController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return string;
}
}
}
İstek iletimini doğrulama
Yerel ortamda doğrulama
Hem ağ geçidini hem de hizmet sağlayıcıyı başlatın, ardından ağ geçidi üzerinden bir istek gönderin.
Spring Cloud Gateway için (bağlantı noktası 18012):
curl http://127.0.0.1:18012/provider1/echo/hello
Zuul için (bağlantı noktası 18022):
curl http://127.0.0.1:18022/provider1/echo/hello
Başarılı bir yanıt hello değerini döndürür; bu durum ağ geçidinin isteği service-provider hizmetine ilettiğini ve /provider1 ön ekini kaldırdığını doğrular.

EDAS'a dağıtım
Uygulamayı Enterprise Distributed Application Service (EDAS) ortamına dağıtın. Dağıtım talimatları için bkz. Hizmet kaydı ve keşfi uygulama.
EDAS hizmet kayıt defteri, Nacos'un ticari bir sürümüdür. EDAS'a dağıtım yapılırken platform, Nacos bağlantı ayrıntılarını (IP adresi, hizmet bağlantı noktası, ad alanı, AccessKey ID, AccessKey secret ve bağlam yolu) otomatik olarak yapılandırır. Ek yapılandırma gerekmez. Orijinal şirket içi Nacos ayarlarını ihtiyaca göre koruyun veya kaldırın.
Sürüm uyumluluğu
| 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 yaşam döngüsünün sonuna ulaşmıştır. Yeni uygulamalarda kullanmayın.