1 Star 0 Fork 0

张璐月/go_micro

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
broadcast_test.go 3.47 KB
一键复制 编辑 原始数据 按行查看 历史
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)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/luyue_zhang/go_rpc_2.git
git@gitee.com:luyue_zhang/go_rpc_2.git
luyue_zhang
go_rpc_2
go_micro
master

搜索帮助