微服务之间是如何独立通信的?

本文探讨了微服务架构中的通信机制,包括同步和异步通信方式,详细介绍了RestTemplate的三种调用方式及负载均衡配置。同时,文章分析了消息队列中间件的选型因素,如协议、持久化需求、吞吐量等,并以RabbitMQ为例,说明其在微服务通信中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、微服务通信机制
  系统之间各个服务是可以独立部署,是松耦合的。每个服务仅关注于完成一个任务并很好的完成该任务。
围绕业务能力组织服务,自动化部署,智能端点,对语言和数据的去中心话控制。

  • 将组建定义为可被独立替换和升级的软件单元。
  • 以业务能力为出发点组织服务的策略。
  • 倡导谁开发谁运营的开发运维一体化方法。
  • RestFul Http协议是微服务架构中最常用的通讯机制。
  • 每个微服务可以考虑采用最佳微服务完成(如不同的编程语言)。
  • 允许不同的微服务采用不同的数据持久化技术。
  • 微服务非常注重建立架构和业务相关指标的实时监控和日志机制,必须考虑每个服务的失败容错机制。
  • 注重快速更新,因此系统会随着时间不断变化和演进。可替代性模块化设计。

二、微服务通信方式

  同步:RPC ,REST等。
  异步:消息队列,要考虑消息的可靠传输、高性能,以及编程模型的变化等。

RestTemplate通信的三种方式:

第一种调用方式

  RestTemplate restTemplate = new RestTemplate();
  String data = restTemplate.getForObject("http://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("http://%s:%s",serviceInstance.getHost(),serviceInstance.getPort());
  String data = restTemplate.getForObject(url,String.class);

第三种调用方式(使用server_id):

  RestTemplate restTemplate = new RestTemplate();
  String data =  restTemplate.getForObject("http://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=com.netflix.loadbalancer.RandomRule

三、消息队列中间件如何选型?

1.协议:AMQP、STOMP、MQTT、私有协议等。
2.消息是否需要持久化。
3.吞吐量。
4.高可用支持,是否单点。
5.分布式扩展能力。
6.消息堆积能力和重放能力。
7.开发便捷,易于维护。
8.社区成熟度。

RabbitMQ是一个实现了AMQP(高级消息队列协议)协议的消息队列中间件。RabbitMQ支持其中的最多一次和最少一次两种。网易蜂巢平台的服务架构,服务间通过RabbitMQ实现通信。

文章来源:https://blog.youkuaiyun.com/qyj19920704/article/details/83927432
https://blog.youkuaiyun.com/u012632466/article/details/90236984

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值