微服务远程调用
背景:若服务1想调用服务2,为自己对应的dao1添加dao2的值,可通过RestTemplate实现远程服务调用
步骤
1.注册 RestTemplate
在服务1的启动类中注册RestTemplate
@MapperScan(...)
@SpringBootApplication
public class Application1{
public static void main(){...}
@Bean
public RestTemplate restTemplate(){
return new RestTemplate;
}
}
2.发起http请求
在service层利用RestTemplate发起http请求
@Service
public class service1{
@Autowired
private RestTemplate restTemplate;
....
public Dao1 queryDao1ById(Long Dao1Id){
...
String url = "http://127.0.0.1:8080/Application2/"+dao1.getDao2Id();
//发起http请求,实现远程调用,可以自动将json反序列化为对象
Dao2 dao2 = restTemplate.getForObject(url,Dao2.class);
dao1.setDao2(dao2);
return dao1;
}
}
总结:想要通过服务间远程调用,需要通过restTemplate的getForObject方法即可发送http请求,返回自动处理后的对象数据。
提供者与消费者
服务提供者
一次业务中被其他微服务调用的服务
服务消费者
一次业务中,调用其他微服务的服务
特别的:一个服务既可以是提供者也可以是消费者 ,业务不同,角色不同
集群情况下
集群情况下无法采用硬编码,服务消费中怎么选择服务提供者,并判断提供者的状态是否正常?此时引入Eureka进行服务的状态记录,为消费者提供被消费者的信息,消费者在eureka-client上通过负载均衡选择合适的提供者服务器,实现远程调用
Eureka
1.eureka-server注册中心:保存服务提供者信息(服务器端口等),并动态刷新状态正常的服务提供者。
2.消费者根据服务名称向eureka拉取提供者信息后,利用负载均衡算法选择服务器,最后远程调用
3.服务提供者梅30秒向EurekaServer发送心跳请求,报告健康状态,心跳不正常会被删除信息,因此,消费者可以拉取到最新的信息
eurake的注册配置后续待更新。。。
本文介绍如何使用RestTemplate实现微服务之间的远程调用,并探讨了在集群环境下如何利用Eureka进行服务发现与负载均衡。
3575

被折叠的 条评论
为什么被折叠?



