栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springcloud+nacos服务之间调用的几种方式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springcloud+nacos服务之间调用的几种方式

1. springcloud内置的负载均衡客户端获取服务ip和端口
    @Autowired
    private LoadBalancerClient loadBalancerClient;

	//通过服务名获取到服务的ip和端口,随后通过restTemplate或者okhttp等请求
    public void test() {
    	ServiceInstance choose = loadBalancerClient.choose("jzhy-order");
    	String url = "http://" + choose.getServiceId() + ":" + choose.getPort();
    	System.out.println(url);
    	System.out.println(choose.getHost());
    	System.out.println(choose.getUri());
    	
	}
2. nacos通过服务名称获取服务ip和端口
	//获取nacos管理,由于nacos的bug,只能注入一下两个类来实现
	@Autowired
	private NacosServiceManager nacosServiceManager;
	@Autowired
	private NacosDiscoveryProperties nacosDiscoveryProperties;

	public void test(){
		String url = "";
		try {
			NamingService namingService = nacosServiceManager
					.getNamingService(nacosDiscoveryProperties.getNacosProperties());
			Instance instance = namingService.selectOneHealthyInstance(ServiceNameConstants.JZHY_FILE_SERVICE);
			url = StrUtil.format("http://{}:{}/upload", instance.getIp(), instance.getPort());

		} catch (NacosException e) {
			e.printStackTrace();
			throw new CustomException("从注册中心获取文件服务异常", e);
		}
	}

	//同样根据服务名称获取到服务ip和端口,直接发起http请求
3. FeignClient 远程调用
// 先写个客户端

@FeignClient(contextId = "remoteOrderService", value = ServiceNameConstants.JZHY_ORDER, fallbackFactory = RemoteOrderFallbackFactory.class)
public interface RemoteOrderService
{
    @GetMapping("/test")
    public String getUserInfo();
}

// 再来个Factory
@Component
public class RemoteOrderFallbackFactory implements FallbackFactory
{
    private static final Logger log = LoggerFactory.getLogger(RemoteOrderFallbackFactory.class);

    @Override
    public RemoteOrderService create(Throwable throwable)
    {
        log.error("order服务调用失败:{}", throwable.getMessage());
        return new RemoteOrderService()
        {

			@Override
			public String getUserInfo() {
				return "获取失败:" + throwable.getMessage();
			}};
    }
}

// 继续在 meta-INF/spring.factories 文件中声明Factory

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/603207.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号