WebプロジェクトでのZuulの使用については、上記の「Spring BootでのZuulの使用」を参照してください。次の例は、SpringCloudでのZuulの使用です。
開発ツール:IntelliJ IDEA 2019.2.3
1つは、サーバー側です
1.プロジェクトを作成します
IDEAで「zuul-eureka-server」という名前の新しいSpringBootプロジェクトを作成し、SpringBootバージョン2.1.10を選択して、依存関係インターフェースでSpring Cloud Discovery-> EurekaServerを選択します。
pom.xmlの完全な内容は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>zuul-eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zuul-eureka-server</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR4</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</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>
</project>
2.構成application.ymlを変更します
ポート番号を8761に変更します。Eurekaサーバーへの情報の登録をキャンセルし、Eurekaサーバーから登録情報を取得しないでください。
server:
port: 8761
eureka:
client:
register-with-eureka: false
fetch-registry: false
3.スタートアップコードを変更します
アノテーションを追加@EnableEurekaServer
package com.example.zuuleurekaserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class ZuulEurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulEurekaServerApplication.class, args);
}
}
2.サービスプロバイダー
1.プロジェクトを作成します
名前が「zuul-provider」であることを除いて、IDEAで新しいSpringBootプロジェクトを作成します。他の手順は、上記のサーバー側での作成と同じです。
2.構成application.ymlを変更します
server:
port: 8000
spring:
application:
name: zuul-provider
eureka:
instance:
hostname: localhost
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
3.エンティティクラスUser.javaを追加します
package com.example.zuulprovider;
public class User {
String name;
Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
4.スタートアップコードを変更します
package com.example.zuulprovider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableEurekaClient
@RestController
public class ZuulProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulProviderApplication.class, args);
}
@RequestMapping(value="/user/{name}", produces = MediaType.APPLICATION_JSON_VALUE)
public User user(@PathVariable String name) {
User u = new User();
u.setName(name);
u.setAge(30);
return u;
}
}
3、サービスの発信者
1.プロジェクトを作成します
IDEAで新しいSpringBootプロジェクトを作成します。名前は「zuul-invoker」、SpringBootバージョン選択2.1.10、依存関係(依存関係)インターフェイスの選択で、Spring Cloud Discovery-> Eureka Server、Spring Cloud Routing-> OpenFeignを確認します。
pom.xmlの完全な内容は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>zuul-invoker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zuul-invoker</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR4</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</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>
</project>
2.構成application.ymlを変更します
server:
port: 9000
spring:
application:
name: zuul-invoker
eureka:
instance:
hostname: localhost
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
3.エンティティクラスUser.javaを追加します
package com.example.zuulinvoker;
public class User {
String name;
Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
4.クライアントインターフェイスUserClient.javaを追加します
package com.example.zuulinvoker;
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("zuul-provider")
public interface UserClient {
@RequestMapping(method = RequestMethod.GET, value = "/user/{name}")
User getUser(@PathVariable("name") String name);
}
5.スタートアップクラスコードCloudInvokerApplication.javaを変更します
アノテーション@EnableEurekaClientと@EnableFeignClientsを追加します
package com.example.zuulinvoker;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ZuulInvokerApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulInvokerApplication.class, args);
}
}
6.コントローラーInvokerController.javaを追加します
package com.example.zuulinvoker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
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 InvokerController {
@Autowired
private UserClient userClient;
@RequestMapping(value = "/invokeUser/{name}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public User invokeUser(@PathVariable String name){
User user = userClient.getUser(name);
return user;
}
}
第四に、ゲートウェイズール
1.
IDEAで新しいSpringBootプロジェクトを作成します。名前は「zuul-gateway」で、SpringBootのバージョンは2.1.10です。依存関係の選択インターフェイスで、Spring Cloud Discovery-> Eureka Server、Spring Cloud Routing-> Zuulを確認します。
pom.xmlの完全な内容は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>zuul-gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zuul-gateway</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR4</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</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>
</project>
2.スタートアップコードを変更します
アノテーションを追加@EnableZuulProxy
package com.example.zuulgateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableZuulProxy
public class ZuulGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulGatewayApplication.class, args);
}
}
3.構成application.ymlを変更します
ゲートウェイプロジェクトをEurekaサーバーに登録し、
すべての/ user / **リクエストが処理のためにIdzuul-invokerを使用してサービスに転送されることを宣言します。
server:
port: 8080
spring:
application:
name: zuul-gateway
eureka:
instance:
hostname: localhost
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
zuul:
routes:
user:
path: /user/**
serviceId: zuul-invoker
5、テスト
1.サーバーを起動します。
ブラウザアクセスhttp:// localhost:8761 /、通常
2.サービスプロバイダーを起動します
ブラウザアクセスhttp:// localhost:8000 / user / Xiaoming
ページ出力:{"name": "Xiaoming"、 "age":30}
3 。サービスの呼び出し元を開始します。
ブラウザにアクセスhttp:// localhost:9000 / invokeUser / Xiaoming
ページ出力:{"name": "Xiaoming"、 "age":30}
4.ゲートウェイ
http:// localhost:8080 / user / invokeUser / Xiaoming
ページを開始します出力:{"name": "小明"、 "age":30}
正常に転送および処理されたことがわかります。