7-3 Ribbon之初体验



新建一个配置文件




准备好的配置文件

# Max number of retries on the same server (excluding the first try)
jiangzh-client.ribbon.MaxAutoRetries=1

# Max number of next servers to retry (excluding the first server)
jiangzh-client.ribbon.MaxAutoRetriesNextServer=1

# Whether all operations can be retried for this client
jiangzh-client.ribbon.OkToRetryOnAllOperations=true

# Interval to refresh the server list from the source
jiangzh-client.ribbon.ServerListRefreshInterval=2000

# Connect timeout used by Apache HttpClient
jiangzh-client.ribbon.ConnectTimeout=3000

# Read timeout used by Apache HttpClient
jiangzh-client.ribbon.ReadTimeout=3000

# Initial list of servers, can be changed via Archaius dynamic property at runtime
jiangzh-client.ribbon.listOfServers=www.baidu.com:80,www.jd.com:80

 



复制到新建的配置文件里


主要的是listOfServer这个配置节点。

创建包ribbon

在下面创建App的类


准备好的测试类


先把包都导入到那里。这些在官方的演示里面其实都有。

Ribbon官方文档有段时间没有更新了。它的官方文档和它的版本已经不一致了。 
下面复制过来并且抛出了异常。

读取的是自己创建的配置文件

在再制下面一段代码,并抛出URI的异常

 

executeWidthLoadBalancer需要抛出ClientException的异常。





执行测试

默认以这种轮询的方式在访问。

另外一种方式


抛出异常

上面的代码先注释掉

for循环代码注释掉。保留RestClient和HttpRequest





把上面的代码放开,不注释了,一起输出看下效果



下面是演示的动态修改serverList

很明显动态修改服务的地址比固定的好。
动态修改也存在一个问题,serverList从哪里来。没有任何情况比从注册中来是更好的。

下面就看着正式环境Ribbon怎么和eureka做整合。

 

package com.mooc.meetingfilm.consumer.ribbon;

import com.netflix.client.ClientException;
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.HttpClientRequest;
import com.netflix.niws.client.http.RestClient;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class App {
    public static void main(String[] args) throws IOException, ClientException, URISyntaxException, InterruptedException {
        ConfigurationManager.loadPropertiesFromResources("jiangzh.properties");  // 1
        System.err.println(ConfigurationManager.getConfigInstance().getProperty("jiangzh-client.ribbon.listOfServers"));
        //构建一个HttpClient
        RestClient client = (RestClient) ClientFactory.getNamedClient("jiangzh-client");  // 2
        HttpRequest request = HttpRequest.newBuilder().uri(new URI("/")).build(); // 3
        for (int i = 0; i < 5; i++)  {
            HttpResponse response = client.executeWithLoadBalancer(request); // 4
            System.err.println("Status code for " + response.getRequestedURI() + "  :" + response.getStatus());
        }

        //另外一种方式
        ZoneAwareLoadBalancer lb = (ZoneAwareLoadBalancer) client.getLoadBalancer();
        System.err.println(lb.getLoadBalancerStats());
        ConfigurationManager.getConfigInstance().setProperty(
                "jiangzh-client.ribbon.listOfServers", "www.qq.com:80,www.taobao.com:80"); // 5
        System.err.println("changing servers ...");
        Thread.sleep(3000); // 6
        for (int i = 0; i < 5; i++)  {
            HttpResponse response = client.executeWithLoadBalancer(request);
            System.err.println("Status code for " + response.getRequestedURI() + "  : " + response.getStatus());
        }
        System.out.println(lb.getLoadBalancerStats()); // 7

    }
}

 

结束


posted @ 2020-04-26 00:32  高山-景行  阅读(255)  评论(0编辑  收藏  举报