代码拉取完成,页面将自动刷新
package round_robin
import (
"context"
"fmt"
"github.com/stretchr/testify/require"
"go-rpc-2/interceptor/interceptor"
"go-rpc-2/route_strategy/balancer/round_robin"
"google.golang.org/grpc/balancer"
"google.golang.org/grpc/balancer/base"
"go-rpc-2/balancer/server"
grpc2 "go-rpc-2/grpc"
"go-rpc-2/grpc/gen"
client2 "go-rpc-2/interceptor/client"
register2 "go-rpc-2/server_register_and_found/register"
"go-rpc-2/server_register_and_found/register/etcd"
"go-rpc-2/server_register_and_found/resolver"
clientv3 "go.etcd.io/etcd/client/v3"
"google.golang.org/grpc"
"testing"
"time"
)
func TestResolverBroadcast(t *testing.T) {
go func() {
etcdClient, err := clientv3.New(clientv3.Config{
Endpoints: []string{"127.0.0.1:2379"},
})
require.NoError(t, err)
var register register2.Register
register, err = etcd.NewRegister(etcdClient)
require.NoError(t, err)
s := server.NewServer("user_service", server.WithRegister(register, time.Second*10))
gen.RegisterUserServiceServer(s, &grpc2.UserService{
Count: 1,
})
err = s.Start("tcp", "127.0.0.1:8080")
require.NoError(t, err)
}()
go func() {
etcdClient, err := clientv3.New(clientv3.Config{
Endpoints: []string{"127.0.0.1:2379"},
})
require.NoError(t, err)
var register register2.Register
register, err = etcd.NewRegister(etcdClient)
require.NoError(t, err)
s := server.NewServer("user_service", server.WithRegister(register, time.Second*10))
gen.RegisterUserServiceServer(s, &grpc2.UserService{
Count: 2,
})
err = s.Start("tcp", "127.0.0.1:8081")
require.NoError(t, err)
}()
go func() {
etcdClient, err := clientv3.New(clientv3.Config{
Endpoints: []string{"127.0.0.1:2379"},
})
require.NoError(t, err)
var register register2.Register
register, err = etcd.NewRegister(etcdClient)
require.NoError(t, err)
s := server.NewServer("user_service", server.WithRegister(register, time.Second*10))
gen.RegisterUserServiceServer(s, &grpc2.UserService{
Count: 3,
})
err = s.Start("tcp", "127.0.0.1:8082")
require.NoError(t, err)
}()
time.Sleep(time.Second * 2)
etcdClient, err := clientv3.New(clientv3.Config{
Endpoints: []string{"127.0.0.1:2379"},
})
require.NoError(t, err)
var register register2.Register
register, err = etcd.NewRegister(etcdClient)
require.NoError(t, err)
builder := resolver.NewBuilder(register, time.Second*10)
balanceBuilder := base.NewBalancerBuilder("round_robin", &round_robin.Builder{}, base.Config{HealthCheck: true})
balancer.Register(balanceBuilder)
interceptorBuilder := interceptor.NewBroadcastBuilder("user_service", register, grpc.WithInsecure())
c := client2.NewClient(client2.WithInsecure(), client2.WithResolverBuilders(builder), client2.WithBalancerName("round_robin"), client2.WithInterceptor(interceptorBuilder.Build()))
var conn *grpc.ClientConn
conn, err = c.Dial("dns:///user_service")
require.NoError(t, err)
defer conn.Close()
client := gen.NewUserServiceClient(conn)
broadcastResp := make(chan interceptor.Resp, 1)
//go func() {
// // 接收最快响应
// resp := <-broadcastResp
// require.NoError(t, resp.Err)
// fmt.Println(resp.Data)
//}()
go func() {
// 接受全部响应
for resp := range broadcastResp {
require.NoError(t, resp.Err)
// 期望: 三个不同的值
fmt.Println(resp.Data.(*gen.GetUserByIdResponse).Data.Age)
}
}()
ctx := interceptor.SetBroadcast(context.Background(), broadcastResp)
_, err = client.GetUserById(ctx, &gen.GetUserByIdRequest{
Id: "555",
})
require.NoError(t, err)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。