SpringCloud Ribbonの例

6793 ワード

ターゲット
eurekaに基づいて、バックエンドサービスを作成し、異なるポートで3つのインスタンスを実行し、clientサービスを作成し、ribbonによってバックエンドサービスを呼び出し、負荷分散効果を検証します.
eureka serverの作成
artifactId:eureka-server,spring boot: 1.5.16、依存:

        
            org.springframework.cloud
            spring-cloud-starter-eureka-server
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.9.6
        
        
            com.fasterxml.jackson.core
            jackson-core
            2.9.6
        

        
            com.fasterxml.jackson.core
            jackson-annotations
            2.9.6
        
    

起動クラス注釈@EnableEurekaServer、プロファイル:
spring.application.name=eurekaserver
server.port=8082
 
eureka.instance.hostname=localhost
 
eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

起動、ページの表示http://localhost:8082、正常に表示されているかどうかを確認します.
バックエンドサービスの作成
artifactId:backend-service,依存:

            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-eureka
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.9.6
        
        
            com.fasterxml.jackson.core
            jackson-core
            2.9.6
        

        
            com.fasterxml.jackson.core
            jackson-annotations
            2.9.6
        

起動クラス@EnableEurekaClient、プロファイル:
spring.application.name=server
server.port = 9090
 
eureka.client.serviceUrl.defaultZone= http://localhost:8082/eureka/
eureka.client.healthcheck.enabled= true
eureka.instance.leaseRenewalIntervalInSeconds= 1
eureka.instance.leaseExpirationDurationInSeconds= 2

テストインタフェース:
@RestController
public class MyRestController {
 
    @Autowired
    Environment environment;
 
    @GetMapping("/")
    public String health() {
        return "I am Ok";
    }
 
    @GetMapping("/backend")
    public String backend() {
        System.out.println("Inside MyRestController::backend...");
 
        String serverPort = environment.getProperty("local.server.port");
 
        System.out.println("Port : " + serverPort);
 
        return "Hello form Backend!!! " + " Host : localhost " + " :: Port : " + serverPort;
    }
}

起動して、インタフェースにアクセスして、正常かどうかを確認します.
ribbon clientサービスの作成
artifactId:ribbon-client,依存:
    
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-eureka
        
        
            org.springframework.cloud
            spring-cloud-starter-ribbon
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.9.6
        
        
            com.fasterxml.jackson.core
            jackson-core
            2.9.6
        
        
            com.fasterxml.jackson.core
            jackson-annotations
            2.9.6
        
    

プロファイル:
spring.application.name=client
server.port=8888
 
eureka.client.serviceUrl.defaultZone= http://localhost:8082/eureka/
eureka.client.healthcheck.enabled= true
eureka.instance.leaseRenewalIntervalInSeconds= 1
eureka.instance.leaseExpirationDurationInSeconds= 2
 
server.ribbon.eureka.enabled=true
server.ribbon.ServerListRefreshInterval=1000

ribbon構成クラス:
public class RibbonConfiguration {
 
    @Autowired
    IClientConfig config;
    
    @Bean
    public IPing ribbonPing(IClientConfig config) {
        return new PingUrl();
    }
 
    @Bean
    public IRule ribbonRule(IClientConfig config) {
        return new AvailabilityFilteringRule();
    }
}

起動クラス:
@SpringBootApplication
@EnableDiscoveryClient
@RibbonClient(name = "server", configuration = RibbonConfiguration.class)
public class RibbonClientApplication {

    @Bean
    @LoadBalanced
    public RestTemplate proviceRestTemplate() {
        return new RestTemplate();
    }
    
    public static void main(String[] args) {
        SpringApplication.run(RibbonClientApplication.class, args);
    }
}

テストクラス:
@RestController
public class HelloController {
    @Autowired
    private RestTemplate restTemplate;
    
    @GetMapping("/hi")
    public String hi() {
        return restTemplate.getForObject("http://server/backend", String.class);
    }
}

テストの実行
eureka serverを起動し、3つのバックエンドサービスを起動します.
java -jar -Dserver.port=9090 target/backend-service-0.0.1-SNAPSHOT.jar
java -jar -Dserver.port=9091 target/backend-service-0.0.1-SNAPSHOT.jar
java -jar -Dserver.port=9092 target/backend-service-0.0.1-SNAPSHOT.jar

ribbon clientを起動し、テストインタフェースにアクセスします.
http://localhost:8888/hi

複数のリフレッシュを行うと、異なるポート番号が表示され、ロード・バランシングが有効になることを示します.