Spring Boot中使用Ribbon軟負載

問題

後臺服務依賴第三方服務,第三方服務是服務器集羣的形式對外提供服務。致使Http客戶端須要配置多個ip地址來訪問第三方服務的問題。這個問題,這裏是使用大Spring中內置的Ribbon客戶端。java

build.gradle

ext {
    springCloudVersion = "Finchley.SR2"
}


dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

dependencies {
    implementation "org.springframework.cloud:spring-cloud-starter-netflix-ribbon"
}

application.yml

src/main/resources/application.ymlweb

say-hello:
  ribbon:
    eureka:
      enabled: false
    listOfServers: 10.158.17.60:80,10.158.17.61:80
    ServerListRefreshInterval: 15000

這裏主要作了三件事情:spring

  • 禁用ribbon中的eureka註冊
  • listOfServers配置第三方服務器集羣地址
  • ServerListRefreshInterval第三方服務器集羣數據刷新時間

Application.java

@SpringBootApplication
@RibbonClient(name = "say-hello")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @LoadBalanced
    @Bean
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

這裏主要注意@RibbonClien @LoadBalanced的配置:服務器

  • @RibbonClien主要配置第三方的調用的服務使用ribbon來請求
  • @LoadBalanced告訴RestTemplate須要啓動負載均衡

使用

@RequestMapping("/hi")
  public String hi(@RequestParam(value="name", defaultValue="Artaban") String name) {
    String greeting = this.restTemplate.getForObject("http://say-hello/greeting", String.class);
    return String.format("%s, %s!", greeting, name);
  }

參考

相關文章
相關標籤/搜索