README.md

    Ribbon

    Ribbon is a client side IPC library that is battle-tested in cloud. It provides the following features

    • Load balancing
    • Fault tolerance
    • Multiple protocol (HTTP, TCP, UDP) support in an asynchronous and reactive model
    • Caching and batching

    To get ribbon binaries, go to maven central. Here is an example to add dependency in Maven:

    <dependency>
        <groupId>com.netflix.ribbon</groupId>
        <artifactId>ribbon</artifactId>
        <version>2.0-RC1</version>
    </dependency>

    Modules

    • ribbon: APIs that integrate load balancing, fault tolerance, caching/batching on top of other ribbon modules and Hystrix
    • ribbon-loadbalancer: Load balancer APIs that can be used independently or with other modules
    • ribbon-eureka: APIs using Eureka client to provide dynamic server list for cloud
    • ribbon-transport: Transport clients that support HTTP, TCP and UDP protocols using RxNetty with load balancing capability
    • ribbon-httpclient: REST client built on top of Apache HttpClient integrated with load balancers (deprecated and being replaced by ribbon module)
    • ribbon-example: Examples
    • ribbon-core: Client configuration APIs and other shared APIs

    Release notes

    See https://github.com/Netflix/ribbon/releases

    Code example

    Access HTTP resource using template (full example)

    HttpResourceGroup httpResourceGroup = Ribbon.createHttpResourceGroup("movieServiceClient",
                ClientOptions.create()
                        .withMaxAutoRetriesNextServer(3)
                        .withConfigurationBasedServerList("localhost:8080,localhost:8088"));
    HttpRequestTemplate<ByteBuf> recommendationsByUserIdTemplate = httpResourceGroup.newTemplateBuilder("recommendationsByUserId", ByteBuf.class)
                .withMethod("GET")
                .withUriTemplate("/users/{userId}/recommendations")
                .withFallbackProvider(new RecommendationServiceFallbackHandler())
                .withResponseValidator(new RecommendationServiceResponseValidator())
                .build();
    Observable<ByteBuf> result = recommendationsByUserIdTemplate.requestBuilder()
                            .withRequestProperty("userId", user1")
                            .build()
                            .observe();

    Access HTTP resource using annotations (full example)

    public interface MovieService {
        @Http(
                method = HttpMethod.GET,
                uri = "/users/{userId}/recommendations",
                )
        RibbonRequest<ByteBuf> recommendationsByUserId(@Var("userId") String userId);
    }
    
    MovieService movieService = Ribbon.from(MovieService.class);
    Observable<ByteBuf> result = movieService.recommendationsByUserId("user1").observe();

    Create an AWS-ready load balancer with Eureka dynamic server list and zone affinity enabled

            IRule rule = new AvailabilityFilteringRule();
            ServerList<DiscoveryEnabledServer> list = new DiscoveryEnabledNIWSServerList("MyVIP:7001");
            ServerListFilter<DiscoveryEnabledServer> filter = new ZoneAffinityServerListFilter<DiscoveryEnabledServer>();
            ZoneAwareLoadBalancer<DiscoveryEnabledServer> lb = LoadBalancerBuilder.<DiscoveryEnabledServer>newBuilder()
                    .withDynamicServerList(list)
                    .withRule(rule)
                    .withServerListFilter(filter)
                    .buildDynamicServerListLoadBalancer();   
            DiscoveryEnabledServer server = lb.chooseServer();         

    Use LoadBalancerCommand to load balancing IPC calls made by HttpURLConnection (full example)

    CommandBuilder.<String>newBuilder()
            .withLoadBalancer(LoadBalancerBuilder.newBuilder().buildFixedServerListLoadBalancer(serverList))
            .build(new LoadBalancerExecutable<String>() {
                @Override
                public String run(Server server) throws Exception {
                    URL url = new URL("http://" + server.getHost() + ":" + server.getPort() + path);
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    return conn.getResponseMessage();
                }
            }).execute();

    License

    Copyright 2014 Netflix, Inc.

    Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

    Questions?

    Email ribbon-users@googlegroups.com or join us

    项目简介

    🚀 Github 镜像仓库 🚀

    源项目地址

    https://github.com/Netflix/ribbon

    发行版本

    当前项目没有发行版本

    贡献者 51

    全部贡献者

    开发语言

    • Java 100.0 %