百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka,消息队列还缺啥

366 篇文章 2 订阅

一般来说,大型应用通常会被拆分成多个子系统,这些子系统可能会部署在多台机器上,也可能只是一台机器的多个进程中,这样的应用就是分布式应用。在讨论分布式应用时,很多初学者会把它和集群这个概念搞混,因为从部署形态上看,它们都是多台机器或多个进程部署, 而且都是为了实现一个业务功能。这里有一个简单的区分标准:如果是一个业务被拆分成多个子业务部署在不同的服务器上,那就是分布式应用:如果是同一个业务部署在多台服务器上,那就是集群。而分布式应用的子系统之间并不是完全独立的,它们需要相互通信来共同完成某个功能,这就涉及系统间通信了。

目前,业界通常有两种方式来实现系统间通信:

一种是基于远程过程调用的方式;

一种是基于消息队列的方式。

远程调用

前一种就是我们常说的RPC调用,客户端不需要知道调用的具体实现细节,只需直接调用实际存在于远程计算机上的某个对象即可,但调用方式看起来和调用本地应用程序中的对象一样

 

 

RPC是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

这句话至少有三个层面的含义。

①它是协议,说明这是一种规范,就需要有遵循这套规范的实现。典型的RPC实现包括Dubbo、Thrift、 GRPC等。

②网络通信的实现是透明的,调用方不需要关心网络之间的通信协议、网络I/O模型、通信的信息格式等。

③跨语言,调用方实际上并不清楚对端服务器使用的是什么程序语言。对于调用方来说,无论其使用的是何种程序语言,调用都应该成功,并且返回值也应按照调用方程序语言能理解的形式来描述。

消息队列(今天重点)

基于消息队列的方式是指由应用中的某个系统负责发送信息,由关心这条消息的相应系统负责接收消息,并在收到消息后进行各自系统内的业务处理。消息可以非常简单,比如只包含文本字符串;也可以很复杂,比如包含字节流、字节数组,还可能包含嵌入对象,甚至是Java对象(经过序列化的对象)。

消息在被发送后可以立即返回,由消息队列来负责消息的传递,消息发布者只管将消息发布到消息队列而不用管谁来取,消息使用者只管从消息队列中取消息而不管是谁发布的,这样发布者和使用者都不用知道对方的存在

 

应用场景

消息队列在实际应用中包括如下四个场景:

  • 应用耦合:多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败;
  • 异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,减少处理时间;
  • 限流削峰:广泛应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉的情况;
  • 消息驱动的系统:系统分为消息队列、消息生产者、消息消费者,生产者负责产生消息,消费者(可能有多个)负责对消息进行处理;

常用消息队列

常见的四种消息队列对比(RabbitMQ/ActiveMQ/RocketMQ/Kafka)

 

篇幅原因,也因为时间不够,所以,介绍就到这里了,想要更加深入学习消息队列的,给大家准备一份文档,我学习消息队列就是看的这份文档

需要这份文档的,关注+转发,然后私信“资料”查看获取方式

目录

 

内容展示

 

 

 

 

 

 

关注公众号:Java架构师联盟,每日更新技术好文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值