在微服务某些场景中,我们需要在服务中调用别的服务,比如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 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐