2017-03-08 9 views
0

GRPC/Javaを使用したロードバランシングでサーバセット管理メカニズムを構築しようとしています。 APIドキュメントを見ることによってGRPCロードバランサの例

、のようなクラスがあります:など ロードバランサ、RoundRobinLoadBalancerFactory、

名前を見ることによって、彼らは私がやりたい何をすべきように、それはそうです。 しかし、私はこれらのクラスを使ってコードサンプルを見つけることができませんでした。

一方、私はこのようないくつかのFinagle /スリフト例が見つかりました:誰でもいくつかの作業GRPCの例を共有することができればhttps://github.com/benjumanji/finagle-serverset-example

が、私は疑問に思って?ありがとう!

答えて

0

gRPC LoadBalancerNameResolverで動作します。 NameResolverはアドレスをLoadBalancerに送信し、LoadBalancerはリクエストごとに接続(Subchannels)とpicking a Subchannelの作成を決定します。

NameResolverおよび/またはLoadBalancerは、チャネルに使用するset to ManagedChannelBuilderにすることができます。

インターフェイスは存在しますが、基本的なDnsNameResolverおよびRoundRobinLoadBalancerではなく、多くの在庫実装がありません。 PickFirstBalancerFactoryは、実際にバランスをとらないデフォルトの「LoadBalancer」です。

DNSに複数のアドレスを持つアドレスがある場合は、RoundRobinLoadBalancerを使用しているときにラウンドロビンの動作を観察します。しかし、ZooKeeperなどのサービス発見システムからアドレスを取得したいと思います。そのためにNameResolverを実装する必要があります。あなたが選んだ発見システムに精通しているなら、それは難しいはずはありません。私たちは、ここで見つけることができ、非常に簡単なexempleをリリースしジュスト

0

https://github.com/cloudtrust/lbclient/blob/master/grpc/staticResolver.go

package grpc 

import (
"google.golang.org/grpc/naming" 
) 

type staticResolver struct{ 
    updates []*naming.Update 
} 

type staticWatcher struct { 
    updates chan []*naming.Update 
} 

func NewStaticResolver(addr []string) naming.Resolver { 
    var ups []*naming.Update 
    for _,a := range addr { 
     ups = append(ups, &naming.Update{naming.Add, a, ""}) 
    } 
    return &staticResolver{ups} 
} 

func (w *staticWatcher) Next() ([]*naming.Update, error) { 
    return <-w.updates, nil 
} 

func (w *staticWatcher) Close() { 
    close(w.updates) 
} 

func (r *staticResolver) Resolve(target string) (naming.Watcher, error) { 
    var ch chan []*naming.Update = make(chan []*naming.Update, 1) 
    ch <- r.updates 
    return &staticWatcher{ch}, nil 
} 

は、私たちは、これが、あなたを助け、あなたは何が必要な場合はお気軽にことを願っています。

+0

ありがとうございました!あなたはJavaのバージョンの例がありますか? –