HSF çerçevesinde RESTful uygulamalar geliştirin ve hizmet kaydı ile keşfi uygulayın. SAE artık yerel Spring Cloud uygulamalarını desteklediğinden bu geliştirme yöntemi yeni kullanıcılar için önerilmez.
Arka plan bilgileri
Yerel Spring Cloud çerçevesini kullanarak hizmetlerin nasıl geliştirileceğini öğrenmek için bkz. ve Spring Cloud uygulamalarını SAE'de barındırın.
Hizmet kaydı ve keşfi
Bu bölümde, hizmet kaydı ve keşfi özelliklerine sahip yerel bir RESTful uygulamanın nasıl geliştirileceği adım adım açıklanmaktadır.
Demo kaynak kodunu indirin:
-
Bir hizmet sağlayıcı oluşturun.
Bu hizmet sağlayıcı basit bir echo hizmeti sunar ve kendini hizmet kayıt defterine kaydeder.
sc-vip-server adlı bir RESTful uygulama projesi oluşturun.
-
Gerekli bağımlılıkları pom.xml dosyasına ekleyin.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-vipclient</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-pandora</artifactId> <version>1.3</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR4</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Projenin üst öğesini
spring-boot-starter-parentolarak ayarlamak istemiyorsanız birdependencyManagementbölümü ekleyebilir ve bağımlılıkları yönetmek içinscope="import"değerini ayarlayabilirsiniz.<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.8.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> -
Hizmet sağlayıcı uygulamasını oluşturun. Hizmet kaydı ve keşfini etkinleştirmek için @EnableDiscoveryClient ek açıklamasını kullanın.
@SpringBootApplication @EnableDiscoveryClient public class ServerApplication { public static void main(String[] args) { PandoraBootstrap.run(args); SpringApplication.run(ServerApplication.class, args); PandoraBootstrap.markStartupAndWait(); } } -
Basit bir echo hizmeti sağlamak için bir EchoController oluşturun.
@RestController public class EchoController { @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET) public String echo(@PathVariable String string) { return string; } } -
resources dizinindeki application.properties dosyasında uygulama adını ve dinleme bağlantı noktasını yapılandırın.
spring.application.name=service-provider server.port=18081
-
Bir hizmet tüketici oluşturun.
Bu örnekte hizmet sağlayıcıyı RestTemplate, AsyncRestTemplate ve FeignClient kullanarak çağıran bir hizmet tüketici oluşturulur.
sc-vip-client adlı bir RESTful uygulama projesi oluşturun.
-
Gerekli bağımlılıkları pom.xml dosyasına ekleyin.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-vipclient</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-pandora</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR4</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Bu örnekte gösterim amacıyla FeignClient kullanılır. Hizmet sağlayıcıdan (sc-vip-server) farklı olarak tüketicinin pom.xml dosyasında ek bir
spring-cloud-starter-feignbağımlılığı bulunur. -
RestTemplate, AsyncRestTemplate ve FeignClient kullanmak için sc-vip-server'da yaptığınız gibi hizmet kaydı ve keşfini etkinleştirin ve aşağıdaki iki yapılandırmayı ekleyin.
RestTemplate ve AsyncRestTemplate'i hizmet keşfi ile entegre etmek için @LoadBalanced ek açıklamasını ekleyin.
-
FeignClient'i etkinleştirmek için @EnableFeignClients ek açıklamasını ekleyin.
@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class ConsumerApplication { @LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); } @LoadBalanced @Bean public AsyncRestTemplate asyncRestTemplate(){ return new AsyncRestTemplate(); } public static void main(String[] args) { PandoraBootstrap.run(args); SpringApplication.run(ConsumerApplication.class, args); PandoraBootstrap.markStartupAndWait(); } }
-
EchoService için FeignClient'i kullanmadan önce hizmet adını yapılandırın ve yöntemi ilgili HTTP isteğine eşleyin. sc-vip-server projesinde hizmet adı service-provider olarak yapılandırılmıştır.
@FeignClient(name = "service-provider") public interface EchoService { @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET) String echo(@PathVariable("str") String str); } -
Hizmet çağrılarını test etmek için bir Controller oluşturun.
@RestController public class Controller { @Autowired private RestTemplate restTemplate; @Autowired private AsyncRestTemplate asyncRestTemplate; @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-async-rest/{str}", method = RequestMethod.GET) public String asyncRest(@PathVariable String str) throws Exception{ ListenableFuture<ResponseEntity<String>> future = asyncRestTemplate. getForEntity("http://service-provider/echo/"+str, String.class); return future.get().getBody(); } @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET) public String feign(@PathVariable String str) { return echoService.echo(str); } }Kod, test amaçlı üç uç nokta uygular:
/echo-rest/: RestTemplate kullanılarak hizmet sağlayıcıya yapılan çağrıyı doğrular./echo-async-rest/: AsyncRestTemplate kullanılarak hizmet sağlayıcıya yapılan çağrıyı doğrular./echo-feign/: FeignClient kullanılarak hizmet sağlayıcıya yapılan çağrıyı doğrular.
-
Uygulama adını ve dinleme bağlantı noktasını yapılandırın.
spring.application.name=service-consumer server.port=18082
-
Yerel ortamda geliştirin ve hata ayıklayın.
-
Hafif yapılandırma merkezini başlatın.
Yerel geliştirme ve hata ayıklama işlemleri için hafif yapılandırma merkezini kullanın. Bu merkez
EDAS
ve
SAE
tarafından kullanılan sunucu tarafı hizmet kaydı ve keşif bileşeninin hafif bir sürümünü sağlar. Daha fazla bilgi için bkz.
Hafif yapılandırma ve kayıt merkezini başlatın
.
-
Uygulamayı başlatın.
-
IDE üzerinden başlatma
Uygulamayı IDE'nizden başlatmak için
-Dvipserver.server.port=8080VM seçeneğini ekleyin ve ardından ana yöntemi çalıştırın. Not: Bu parametre yalnızca hafif yapılandırma merkezi ile yerel geliştirme yaparken gereklidir. Uygulamayı veya SAE ortamına dağıttığınızda bu parametreyi kaldırmalısınız. Aksi takdirde uygulama hizmetleri yayınlamayabilir veya abone olmayabilir.Hafif yapılandırma merkezi ve uygulamanız farklı makinelerde bulunuyorsa ana bilgisayar bağlamalarını yapılandırın. Daha fazla bilgi için bkz. Hafif yapılandırma ve kayıt merkezini başlatın.
-
FatJar üzerinden başlatma
-
FatJar paketleme eklentisini ekleyin.
pandora-boot projesini Maven kullanarak FatJar olarak paketlemek için pom.xml dosyanıza aşağıdaki eklentiyi ekleyin. Çakışmaları önlemek için derleme yapılandırmasının <plugins> bölümüne başka FatJar eklentileri eklemeyin.
<build> <plugin> <groupId>com.taobao.pandora</groupId> <artifactId>pandora-boot-maven-plugin</artifactId> <version>2.1.9.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </build> Eklentiyi ekledikten sonra projenin kök dizininde
mvn clean packagekomutunu çalıştırın. FatJar dosyasıtargetdizininde oluşturulur.-
Uygulamayı bir Java komutu kullanarak başlatın.
java -Dvipserver.server.port=8080 -Dpandora.location=/Users/{$username}/.m2/repository/com/taobao/pandora/taobao-hsf.sar/dev-SNAPSHOT/taobao-hsf.sar-dev-SNAPSHOT.jar -jar sc-vip-server-0.0.1-SNAPSHOT.jarNot-Dpandora.location
ile belirtilen yol mutlak bir yol olmalı ve
-jar
bağımsız değişkeninden önce yerleştirilmelidir.
-
Hizmetleri başlatın ve uç noktaları çağırın. Çıktı tüm çağrıların başarılı olduğunu gösterir.
→ ~ curl http://localhost:18082/echo-rest/rest-test rest-test% → ~ curl http://localhost:18082/echo-async-rest/async-rest-test async-rest-test% → ~ curl http://localhost:18082/echo-feign/feign-test feign-test% -
-
-
Yaygın sorunları giderin.
-
AsyncRestTemplate hizmet keşfine bağlanamıyor.
AsyncRestTemplate kullanarak hizmet keşfi desteği Spring Cloud Dalston sürümünde eklenmiştir. Bu sürümü veya daha sonraki bir sürümü kullanmanız gerekir. Daha fazla bilgi için bu pull request adresine bakın.
-
FatJar paketleme eklentisi ile çakışmalar.
Çakışmaları önlemek için derleme yapılandırmasının <plugins> bölümüne başka FatJar eklentileri eklemeyin.
-
taobao-hsf.sar pakete dahil edilebilir mi?
Evet ancak bu önerilmez.
excludeSar
değerini
false
olarak ayarlayarak pandora-boot-maven-plugin yapılandırmasını değiştirebilirsiniz. Bu işlem taobao-hsf.sar dosyasının otomatik olarak pakete dahil edilmesini sağlar.
<plugin> <groupId>com.taobao.pandora</groupId> <artifactId>pandora-boot-maven-plugin</artifactId> <version>2.1.9.1</version> <configuration> <excludeSar>false</excludeSar> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>Bu şekilde Pandora konumunu yapılandırmadan uygulamayı başlatabilirsiniz.
java -jar -Dvipserver.server.port=8080 sc-vip-server-0.0.1-SNAPSHOT.jarUygulamayı veya SAE ortamına dağıtmadan önce SAR paketini hariç tutmak için varsayılan yapılandırmayı geri yükleyin.
-