微服务之间是如何独⽴通信的?
⼀、微服务通信机制
  系统之间各个服务是可以独⽴部署,是松耦合的。每个服务仅关注于完成⼀个任务并很好的完成该任务。围绕业务能⼒组织服务,⾃动化部署,智能端点,对语⾔和数据的去中⼼话控制。
将组建定义为可被独⽴替换和升级的软件单元。
以业务能⼒为出发点组织服务的策略。
倡导谁开发谁运营的开发运维⼀体化⽅法。
RestFul Http协议是微服务架构中最常⽤的通讯机制。
每个微服务可以考虑采⽤最佳微服务完成(如不同的编程语⾔)。
允许不同的微服务采⽤不同的数据持久化技术。
微服务⾮常注重建⽴架构和业务相关指标的实时监控和⽇志机制,必须考虑每个服务的失败容错机制。
注重快速更新,因此系统会随着时间不断变化和演进。可替代性模块化设计。
⼆、微服务通信⽅式
同步:RPC ,REST等。
异步:消息队列,要考虑消息的可靠传输、⾼性能,以及编程模型的变化等。
RestTemplate通信的三种⽅式:
第⼀种调⽤⽅式
RestTemplate restTemplate = new RestTemplate();
String data = ForObject("localhost:8773/hi?name=ceshi",String.class);
ResposeResult responseFinishEntity = restTemplate.postForObject(urlNameString, inOrderVO, ResposeResult.class);第⼆种调⽤⽅式:
@Autowired
private LoadBalancerClient loadBalancerClient;
//第⼆种调⽤⽅式
分布式和微服务的关系RestTemplate restTemplate = new RestTemplate();
ServiceInstance serviceInstance = loadBalancerClient.choose("provider");
String url = String.format("%s:%s",Host(),Port());
String data = ForObject(url,String.class);
第三种调⽤⽅式(使⽤server_id):
RestTemplate restTemplate = new RestTemplate();
String data =  ForObject("service-provider/hi?name=" + name, String.class);
负载均衡:在启动类中加⼊RestTemplate中bean和LoadBalanced注解
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
再通过注解直接使⽤restTemplate
@Autowired
RestTemplate restTemplate;
配置负载均衡规则。默认是轮询规则
service-provider.ribbon.NFLoadBalancerRuleClassName=comflix.loadbalancer.RandomRule
三、消息队列中间件如何选型?
1.协议:AMQP、STOMP、MQTT、私有协议等。
2.消息是否需要持久化。
3.吞吐量。
4.⾼可⽤⽀持,是否单点。
5.分布式扩展能⼒。
6.消息堆积能⼒和重放能⼒。
7.开发便捷,易于维护。
8.社区成熟度。
RabbitMQ是⼀个实现了AMQP(⾼级消息队列协议)协议的消息队列中间件。RabbitMQ⽀持其中的最多⼀次和最少⼀次两种。⽹易蜂巢平台的服务架构,服务间通过RabbitMQ实现通信。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。