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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐