dubbo.apache.org/dubbo-go/v3@v3.1.1/registry/servicediscovery/synthesizer/rest/rest_subscribed_urls_synthesizer.go (about) 1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package rest 19 20 import ( 21 "net/url" 22 "strings" 23 ) 24 25 import ( 26 "dubbo.apache.org/dubbo-go/v3/common" 27 "dubbo.apache.org/dubbo-go/v3/common/constant" 28 "dubbo.apache.org/dubbo-go/v3/registry" 29 "dubbo.apache.org/dubbo-go/v3/registry/servicediscovery/synthesizer" 30 ) 31 32 func init() { 33 synthesizer.AddSynthesizer(NewRestSubscribedURLsSynthesizer()) 34 } 35 36 // SubscribedURLsSynthesizer implementation for rest protocol 37 type RestSubscribedURLsSynthesizer struct{} 38 39 func (r RestSubscribedURLsSynthesizer) Support(subscribedURL *common.URL) bool { 40 return "rest" == subscribedURL.Protocol 41 } 42 43 func (r RestSubscribedURLsSynthesizer) Synthesize(subscribedURL *common.URL, serviceInstances []registry.ServiceInstance) []*common.URL { 44 urls := make([]*common.URL, len(serviceInstances)) 45 for i, s := range serviceInstances { 46 splitHost := strings.Split(s.GetHost(), ":") 47 u := common.NewURLWithOptions(common.WithProtocol(subscribedURL.Protocol), common.WithIp(splitHost[0]), 48 common.WithPort(splitHost[1]), common.WithPath(subscribedURL.GetParam(constant.InterfaceKey, subscribedURL.Path)), 49 common.WithParams(url.Values{}), 50 common.WithParamsValue(constant.SideKey, constant.ProviderProtocol), 51 common.WithParamsValue(constant.ApplicationKey, s.GetServiceName()), 52 common.WithParamsValue(constant.RegistryKey, "true"), 53 ) 54 urls[i] = u 55 } 56 return urls 57 } 58 59 func NewRestSubscribedURLsSynthesizer() RestSubscribedURLsSynthesizer { 60 return RestSubscribedURLsSynthesizer{} 61 }