springcloud(第六編)スプリングcloud ribon
spring cloud ribon
概要サービス発見、依存サービスのリスト が見つかりました.サービス選択規則は、複数のサービスの中でどのように1つの有効サービスを選択しますか? サービスの傍受、失効したサービスを検出し、失効したサービスを効率的に除去する .
netflix ribbon
簡単なデモ
設定ファイル:.構成ファイルをarchaiusでロードする . を取得した..構築要求 .loadBalancerを実行すると、呼び出したサービスが .対応サービス一覧を変更する .loadBalancer状態を取得する Rule-サービスリストから有効サービスを取得する方法 Ping-バックグラウンド実行スレッドは、サービスが利用可能かどうかを判断するために使用される . ServerList-サービスリスト spring cloud ribon
archaiusデフォルトローディングプロファイル
構成情報の変更が必要な場合は、
ok~it’s workmore about is here
概要
ribbon
を使用して負荷の等化を実現する.ソフト負荷の均衡を実現し、コアは三つあります.netflix ribbon
簡単なデモ
設定ファイル:
# Max number of retries on the same server (excluding the first try)
sample-client.ribbon.MaxAutoRetries=1
# Max number of next servers to retry (excluding the first server)
sample-client.ribbon.MaxAutoRetriesNextServer=1
# Whether all operations can be retried for this client
sample-client.ribbon.OkToRetryOnAllOperations=true
# Interval to refresh the server list from the source
sample-client.ribbon.ServerListRefreshInterval=2000
# Connect timeout used by Apache HttpClient
sample-client.ribbon.ConnectTimeout=3000
# Read timeout used by Apache HttpClient
sample-client.ribbon.ReadTimeout=3000
# Initial list of servers, can be changed via Archaius dynamic property at runtime
sample-client.ribbon.listOfServers=www.u51.xin:80,www.baidu.com:80,www.163.com:80,www.csdn.net:80
構成フォーマットは、clientName.spaceName.params
コア構成sample-client.ribbon.listOfServers
が有効であることを示すサービスリストである.BasicTest.java
package com.lkl.springcloud.ribbon;
import com.netflix.client.ClientFactory;
import com.netflix.client.http.HttpRequest;
import com.netflix.client.http.HttpResponse;
import com.netflix.config.ConfigurationManager;
import com.netflix.loadbalancer.ZoneAwareLoadBalancer;
import com.netflix.niws.client.http.RestClient;
import java.net.URI;
/** * Created by liaokailin on 16/5/6. */
public class BasicTest {
public static void main(String[] args) throws Exception{
ConfigurationManager.loadPropertiesFromResources("sample-client.properties"); // 1
System.out.println(ConfigurationManager.getConfigInstance().getProperty("sample-client.ribbon.listOfServers"));
RestClient client = (RestClient) ClientFactory.getNamedClient("sample-client"); // 2
HttpRequest request = HttpRequest.newBuilder().uri(new URI("/")).build(); // 3
for (int i = 0; i < 20; i++) {
HttpResponse response = client.executeWithLoadBalancer(request); // 4
System.out.println("Status code for " + response.getRequestedURI() + " :" + response.getStatus());
}
ZoneAwareLoadBalancer lb = (ZoneAwareLoadBalancer) client.getLoadBalancer();
System.out.println(lb.getLoadBalancerStats());
ConfigurationManager.getConfigInstance().setProperty("sample-client.ribbon.listOfServers",
"www.qq.com:80,www.u51.xin"); // 5
System.out.println("changing servers ...");
Thread.sleep(3000);
for (int i = 0; i < 20; i++) {
HttpResponse response = client.executeWithLoadBalancer(request);
System.out.println("Status code for " + response.getRequestedURI() + " : " + response.getStatus());
}
System.out.println(lb.getLoadBalancerStats()); // 6
}
}
ClientFactory
を介して指定名clientを取得し、この方法でloadBalancer listOfServers
リストのデータに切り替わることが分かります.ribbon
コアコンポーネントは三つあります.archaiusデフォルトローディングプロファイル
config.properties
ribbon配置情報config.properties
myclient.ribbon.listOfServers=www.u51.xin:80,www.baidu.com:80,www.163.com:80,www.csdn.net:80
application.properties
client名を設定するribbon.client.name=myclient
JAVAクラスに対応package com.lkl.springcloud.ribbon;
import com.netflix.loadbalancer.Server;
import com.netflix.loadbalancer.ServerList;
import com.netflix.loadbalancer.ZoneAwareLoadBalancer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/** * Created by liaokailin on 16/5/6. */
@SpringBootApplication
@RibbonClients
@RestController
public class RibbonDefaultConfigApplication {
@Autowired
private SpringClientFactory clientFactory;
@RequestMapping("/")
public void getServerList() throws Exception {
ZoneAwareLoadBalancer<Server> lb = (ZoneAwareLoadBalancer<Server>) clientFactory.getLoadBalancer("myclient");
ServerList<Server> serverList = lb.getServerListImpl();
List<Server> serverDetailList = serverList.getInitialListOfServers();
if (!CollectionUtils.isEmpty(serverDetailList)) {
for (Server s : serverDetailList) {
System.out.println(s.getHost() + "," + s.getPort());
}
} else {
System.out.println("no service");
}
}
public static void main(String[] args) {
SpringApplication app = new SpringApplicationBuilder(RibbonDefaultConfigApplication.class).build();
app.run(args);
}
}
@RibbonClients
を使用して注釈を付ける.getServerList
方法では、まずZoneAwareLoadBalancer
を取得し、その後serverListを取得し、serverListを取得した後に有効なサービスを選択して呼び出しを行うことができる.構成情報の変更が必要な場合は、
@RibbonClients
のdefaultConfiguration
によって構成されてもよい.@RibbonClients(defaultConfiguration=MyDefaultRibbonConfig.class)
のうち、MyDefaultRibbonConfig.class
はRibbonClientConfiguration.java
を参照することができる.ok~it’s workmore about is here