SpringBoot--負荷分散Ribbon
8172 ワード
Ribbon負荷等化
RibbonはHTTPとTCPクライアントの負荷等化に基づいている.サーバlistをポーリングする方式で負荷均衡を行う.Eurekaと統合すると、サービス登録センターのserverがserver listとしてポーリングされます.
統合Ribbon
RibbonServer moduleを作成しorgを導入する.springframework.cloud:spring-cloud-starter-ribbon、org.springframework.cloud:spring-cloud-starter-eureka、org.springframework.boot:spring-boot-starter-web
build.gradle
アプリケーションを作成し、@LoadBalancedを使用して負荷分散機能を取得
serverとcontrollerの作成
Ribbonが必要なserverを呼び出すことができるかどうかを検証したいだけなので、2つのcontrollerを1つはサービスリクエスト者として、もう1つはサービスプロバイダとして書きました.
サービスリクエスト
RestTemplateを介してサービスribbonserverを呼び出し、起動したサービスのためにサービス登録センターに登録されたサービスId
サービスプロバイダ
server
application.yml
他のような特別な構成はありません
全行程についてはRibbonに何の動きもなかったが、私たちは彼を使った.
RibbonがEurekaと統合されると、ribbonはclient Ribbon server listに相当し、Eureka上のサービスリストを取得するために書き換えられ、Eurekaを閉じることができます.
コード#コード#
コードはGithubリファレンスアドレスに移動してください
質問があれば公衆番号(K 171)を付けてください.役に立つと思ったらgithub start
RibbonはHTTPとTCPクライアントの負荷等化に基づいている.サーバlistをポーリングする方式で負荷均衡を行う.Eurekaと統合すると、サービス登録センターのserverがserver listとしてポーリングされます.
統合Ribbon
RibbonServer moduleを作成しorgを導入する.springframework.cloud:spring-cloud-starter-ribbon、org.springframework.cloud:spring-cloud-starter-eureka、org.springframework.boot:spring-boot-starter-web
build.gradle
apply plugin: 'org.springframework.boot'
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:" + springCloudVersion
mavenBom "org.springframework.boot:spring-boot-starter:"+ springBootVersion }
}
dependencies {
compile ('org.springframework.cloud:spring-cloud-starter-ribbon')
compile('org.springframework.cloud:spring-cloud-starter-eureka')
compile ('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-starter-log4j2')
compile('org.apache.logging.log4j:log4j-1.2-api:'+ log4jAPIVersion)
testCompile ('org.springframework.boot:spring-boot-starter-test')
testCompile group: 'junit', name: 'junit', version: '4.11'
}
configurations {
all*.exclude module: 'spring-boot-starter-logging'
all*.exclude module: 'logback-classic'
all*.exclude module: 'log4j-over-slf4j'
all*.exclude module: 'snappy-java'
}
jar {
baseName = 'ribbonserver-bootcwenao'
}
アプリケーションを作成し、@LoadBalancedを使用して負荷分散機能を取得
/**
* @author cwenao
* @version $Id RibbonServerApplication.java, v 0.1 2017-01-14 16:50 cwenao Exp $$
*/
@SpringBootApplication(scanBasePackages = {"com.bootcwenao.ribbonserver"})
@EnableDiscoveryClient
@EnableCircuitBreaker
public class RibbonServerApplication {
@Bean
@LoadBalanced
public RestTemplate restTemplate () {
RestTemplate restTemplate = new RestTemplate();
SimpleClientHttpRequestFactory factory = (SimpleClientHttpRequestFactory) restTemplate.getRequestFactory();
//TODO there can do some for request
return restTemplate;
}
public static void main(String[] args) {
new SpringApplicationBuilder(RibbonServerApplication.class).web(true).run(args);
}
}
serverとcontrollerの作成
Ribbonが必要なserverを呼び出すことができるかどうかを検証したいだけなので、2つのcontrollerを1つはサービスリクエスト者として、もう1つはサービスプロバイダとして書きました.
サービスリクエスト
RestTemplateを介してサービスribbonserverを呼び出し、起動したサービスのためにサービス登録センターに登録されたサービスId
/**
* @author cwenao
* @version $Id RibbonController.java, v 0.1 2017-01-15 10:46 cwenao Exp $$
*/
@Controller
public class RibbonController {
@Autowired
RestTemplate restTemplate;
private final static String serverURI = "http://ribbonserver/";
@RequestMapping("/test")
public String testRibbon(String content) {
System.out.println(content);
restTemplate.getForEntity(serverURI+"testRealRibbon?content="+content,String.class);
return "index";
}
}
サービスプロバイダ
/**
* @author cwenao
* @version $Id RibbonRealVontroller.java, v 0.1 2017-01-15 11:33 cwenao Exp $$
*/
@RestController
public class RibbonRealVontroller {
@Autowired
private RibbonBootcwenaoServer ribbonBootcwenaoServerImpl;
@RequestMapping("/testRealRibbon")
public String testRealRibbon(String content) {
String resultStr = ribbonBootcwenaoServerImpl.testRibbon(content);
System.out.println(resultStr);
return resultStr;
}
}
server
@Service("ribbonBootcwenaoServerImpl")
public class RibbonBootcwenaoServerImpl implements RibbonBootcwenaoServer{
public String testRibbon(String content) {
return content + " for Spring Boot";
}
}
application.yml
他のような特別な構成はありません
全行程についてはRibbonに何の動きもなかったが、私たちは彼を使った.
RibbonがEurekaと統合されると、ribbonはclient Ribbon server listに相当し、Eureka上のサービスリストを取得するために書き換えられ、Eurekaを閉じることができます.
ribbon:
eureka:
enabled: false
コード#コード#
コードはGithubリファレンスアドレスに移動してください
質問があれば公衆番号(K 171)を付けてください.役に立つと思ったらgithub start