微服务RestTemplate + 服务名远程调用

微服务RestTemplate + 服务名远程调用远程调用

微服务远程调用有feign和RestTemplate两种选择,虽然feign是更好的选择,但有时也会出现需要使用RestTemplate方式调用的情况,在此记录。

原理

  1. 服务发现

    RestRemplate远程调用微服务接口,是建立在服务发现和服务注册的基础上的,所以首先需要保证服务的消费者和服务的生产者,都注册在微服务上,通过http://eurekaServerIp:port/eureka来查看eureka上注册的微服务实例,如果服务未成功注册到同一个eureka上,调用时会报 host错误,无法解析 ${服务名} hostname。

    eureka操作记录:
    强制服务下线:http://ip:port/eureka/apps/appID/instanceID/status?value=OUT_OF_SERVICE
    服务上线:http://ip:port/eureka/apps/serverName/instanceId/status?value=UP
    删除实例:http://ip:port/eureka/apps/appID/instanceID	注意,这个要发DELETE	请求
    

    eureka这种操作地址

  2. 服务调用
    创建一个RestTemplate对象,通过RestTemplate对象发送http请求,调用远程接口:

/**
 *  创建Rest Template对象
 **/
 @Bean
 @LoadBalance
 public RestTemplate createRestTemplate(){
 		return new RestTemplate(); 		
 }

当服务已经成功注册到eureka,并且如上述代码,创建RestTemplate后,已经可以通过服务名代替调用url中的ip进行远程调用了,但是还得加上服务端口,才能找到具体的服务请求地址,因为RestTemplate是没有装在服务IP和端口功能的,所以还需要对RestTemplate增加@LoadBalance注解,此注解在旨在完成负载均衡相关功能,会对服务调用进行选择服务和装载服务,因此,加上@LoadBalance注解后,就可以通过服务名直接找到需要调用的服务了。

总结

RestTemplate + 服务名远程的调用只需要实现两步:
1. 将服务生产者和消费者都注册到eureka上
2. 创建一个RestTemplate对象进行调用,需要给RestTemplate对象增加负载均衡的注解(@LoadBalance)
至于RestTemplate使用方式,网上有很多,就不再重复了。

你可能感兴趣的:(Springboot,java,eureka,resttemplate,微服务)