github.com/polarismesh/polaris@v1.17.8/apiserver/grpcserver/discover/v1/server.go (about) 1 /** 2 * Tencent is pleased to support the open source community by making Polaris available. 3 * 4 * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. 5 * 6 * Licensed under the BSD 3-Clause License (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * https://opensource.org/licenses/BSD-3-Clause 11 * 12 * Unless required by applicable law or agreed to in writing, software distributed 13 * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 14 * CONDITIONS OF ANY KIND, either express or implied. See the License for the 15 * specific language governing permissions and limitations under the License. 16 */ 17 18 package v1 19 20 import ( 21 "github.com/polarismesh/polaris/service" 22 "github.com/polarismesh/polaris/service/healthcheck" 23 ) 24 25 type DiscoverServer struct { 26 namingServer service.DiscoverServer 27 healthCheckServer *healthcheck.Server 28 enterRateLimit func(ip string, method string) uint32 29 allowAccess func(method string) bool 30 } 31 32 func NewDiscoverServer(options ...Option) *DiscoverServer { 33 s := &DiscoverServer{} 34 35 for i := range options { 36 options[i](s) 37 } 38 39 return s 40 } 41 42 type Option func(s *DiscoverServer) 43 44 func WithNamingServer(svr service.DiscoverServer) Option { 45 return func(s *DiscoverServer) { 46 s.namingServer = svr 47 } 48 } 49 50 func WithHealthCheckerServer(svr *healthcheck.Server) Option { 51 return func(s *DiscoverServer) { 52 s.healthCheckServer = svr 53 } 54 } 55 56 func WithEnterRateLimit(f func(ip string, method string) uint32) Option { 57 return func(s *DiscoverServer) { 58 s.enterRateLimit = f 59 } 60 } 61 62 func WithAllowAccess(f func(method string) bool) Option { 63 return func(s *DiscoverServer) { 64 s.allowAccess = f 65 } 66 }