TestEndpoints 测试Endpoints是否可用
(endpoints []string)
| 172 | |
| 173 | // TestEndpoints 测试Endpoints是否可用 |
| 174 | func (this *RPCClient) TestEndpoints(endpoints []string) bool { |
| 175 | if len(endpoints) == 0 { |
| 176 | return false |
| 177 | } |
| 178 | |
| 179 | var wg = sync.WaitGroup{} |
| 180 | wg.Add(len(endpoints)) |
| 181 | |
| 182 | var ok = false |
| 183 | |
| 184 | for _, endpoint := range endpoints { |
| 185 | go func(endpoint string) { |
| 186 | defer wg.Done() |
| 187 | |
| 188 | u, err := url.Parse(endpoint) |
| 189 | if err != nil { |
| 190 | return |
| 191 | } |
| 192 | |
| 193 | ctx, cancelFunc := context.WithTimeout(context.Background(), 5*time.Second) |
| 194 | defer func() { |
| 195 | cancelFunc() |
| 196 | }() |
| 197 | var conn *grpc.ClientConn |
| 198 | if u.Scheme == "http" { |
| 199 | conn, err = grpc.DialContext(ctx, u.Host, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock()) |
| 200 | } else if u.Scheme == "https" { |
| 201 | conn, err = grpc.DialContext(ctx, u.Host, grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{ |
| 202 | InsecureSkipVerify: true, |
| 203 | })), grpc.WithBlock()) |
| 204 | } else { |
| 205 | return |
| 206 | } |
| 207 | if err != nil { |
| 208 | return |
| 209 | } |
| 210 | if conn == nil { |
| 211 | return |
| 212 | } |
| 213 | defer func() { |
| 214 | _ = conn.Close() |
| 215 | }() |
| 216 | |
| 217 | var pingService = pb.NewPingServiceClient(conn) |
| 218 | _, err = pingService.Ping(this.Context(), &pb.PingRequest{}) |
| 219 | if err != nil { |
| 220 | return |
| 221 | } |
| 222 | |
| 223 | ok = true |
| 224 | }(endpoint) |
| 225 | } |
| 226 | wg.Wait() |
| 227 | |
| 228 | return ok |
| 229 | } |
| 230 | |
| 231 | // 初始化 |