001/** 002 * Copyright (c) 2015-2022, Michael Yang 杨福海 (fuhai999@gmail.com). 003 * <p> 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * <p> 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * <p> 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package io.jboot.components.gateway.discovery; 017 018 019import io.jboot.Jboot; 020import io.jboot.utils.ConfigUtil; 021import io.jboot.core.spi.JbootSpiLoader; 022import io.jboot.utils.NetUtil; 023 024import java.util.Map; 025 026public class GatewayDiscoveryManager { 027 028 private static GatewayDiscoveryManager manager = new GatewayDiscoveryManager(); 029 030 private GatewayDiscoveryManager() { 031 } 032 033 public static GatewayDiscoveryManager me() { 034 return manager; 035 } 036 037 private GatewayDiscoveryConfig discoveryConfig; 038 private GatewayDiscovery gatewayDiscovery; 039 private boolean isInited = false; 040 041 042 public void init() { 043 discoveryConfig = Jboot.config(GatewayDiscoveryConfig.class); 044 045 gatewayDiscovery = createDiscovery(discoveryConfig); 046 047 exportLocalInstance(gatewayDiscovery); 048 049 isInited = true; 050 } 051 052 /** 053 * 暴露本地的示例到 nacos 等服务注册中心 054 * 055 * @param gatewayDiscovery 056 */ 057 private void exportLocalInstance(GatewayDiscovery gatewayDiscovery) { 058 if (gatewayDiscovery == null) { 059 return; 060 } 061 062 Map<String, GatewayInstanceConfig> instanceConfigMap = ConfigUtil.getConfigModels(GatewayInstanceConfig.class, "jboot.gateway.instance"); 063 for (GatewayInstanceConfig instanceConfig : instanceConfigMap.values()) { 064 065 GatewayInstance instance = new GatewayInstance(); 066 instance.setHealthy(true); 067 instance.setServiceName(instanceConfig.getName()); 068 instance.setUri(instanceConfig.toUri()); 069 070 instance.setHost(NetUtil.getLocalIpAddress()); 071 instance.setPort(Integer.parseInt(Jboot.configValue("undertow.port", "8080"))); 072 073 gatewayDiscovery.registerInstance(instance); 074 } 075 } 076 077 public GatewayDiscovery getGatewayDiscovery() { 078 if (!isInited){ 079 init(); 080 } 081 return gatewayDiscovery; 082 } 083 084 public GatewayDiscoveryConfig getDiscoveryConfig() { 085 return discoveryConfig; 086 } 087 088 public GatewayDiscovery createDiscovery(GatewayDiscoveryConfig config) { 089 if (config == null || !config.isConfigOk() || !config.isEnable()) { 090 return null; 091 } 092 093 switch (config.getType()) { 094 case GatewayDiscoveryConfig.TYPE_NACOS: 095 return new NacosGatewayDiscovery(); 096 default: 097 return JbootSpiLoader.load(GatewayDiscovery.class, config.getType()); 098 } 099 } 100 101 102} 103 104 105 106 107 108