nacos通过服务名获取服务的ip和端口
nacos
Nacos是由阿里巴巴开源的服务治理中间件,集成了动态服务发现、配置管理和服务元数据管理功能,广泛应用于微服务架构中,简化服务治理过程。
项目地址:https://gitcode.com/gh_mirrors/na/nacos
免费下载资源
·
在微服务某些场景中,我们需要在服务中调用别的服务,比如Java服务调用另外的Java服务时,可以通过引用jar包进行,但如果调用Python等其它服务,此时无法引用jar包,只能通过访问服务暴露的地址调用。
首先得保证已经添加了nacos的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
接着添加config(config也可以不用添加,待会解释一下什么情况下加,什么情况下不用加):
import com.alibaba.nacos.api.annotation.NacosProperties;
import com.alibaba.nacos.spring.context.annotation.discovery.EnableNacosDiscovery;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableNacosDiscovery(globalProperties = @NacosProperties(serverAddr = "nacos的ip地址:nacos的端口"))
public class NacosConfiguration {
}
编写Service通过服务名获取服务的ip及端口:
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.NacosServiceManager;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class NacosUrlService {
@Autowired
private NacosServiceManager nacosServiceManager;
@Autowired
private NacosDiscoveryProperties nacosDiscoveryProperties;
public Map<String, String> getServiceIpPort(String instanceName) {
Map<String, String> serviceMap = new HashMap<>();
NamingService namingService = nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());
Instance instance = null;
try {
instance = namingService.selectOneHealthyInstance(instanceName, nacosDiscoveryProperties.getGroup());
} catch (NacosException e) {
e.printStackTrace();
}
serviceMap.put("ip", instance.getIp());
serviceMap.put("port", instance.getPort());
return serviceMap;
}
}
点击进入NacosDiscoveryProperties源码中:
可以看到源码中有获取默认的nacos配置的地方,如果我们本身是在一个微服务中进行调用,本身已经在配置文件中配置了nacos地址,此时会直接获取到默认的这些配置, 就不需要再有config的配置了。
GitHub 加速计划 / na / nacos
29.83 K
12.75 K
下载
Nacos是由阿里巴巴开源的服务治理中间件,集成了动态服务发现、配置管理和服务元数据管理功能,广泛应用于微服务架构中,简化服务治理过程。
最近提交(Master分支:3 个月前 )
4334cd16
* Support custom client configuration timeout.(#12748)
* Add UT.(#12748) 19 天前
b04d2266
23 天前
更多推荐
已为社区贡献4条内容
所有评论(0)