微服务14-消息队列

目录

消息队列

软件下载

Dubbo远程调用的性能问题

什么是消息队列

消息队列的特征

常见消息队列软件

消息队列的事务处理


消息队列

软件下载

doc.canglaoshi.org网站中的kafka

Dubbo远程调用的性能问题

Dubbo调用普遍存在于我们的微服务项目中

这些Dubbo调用全部是同步的操作

这里的"同步"指:消费者A调用生产者B之后,A的线程会进入阻塞状态,等待生产者B运行结束返回之后,A才能运行之后的代码

Dubbo消费者发送调用后进入阻塞状态,这个状态表示该线程仍占用内存资源,但是什么动作都不做

如果生产者运行耗时较久,消费者就一直等待,如果消费者利用这个时间,那么可以处理更多请求,业务整体效率会提升

实际情况下,Dubbo有些必要的返回值必须等待,但是不必要等待的服务返回值,我们可以不等待去做别的事情

这种情况下我们就要使用消息队列

什么是消息队列

消息队列(Message Queue)简称MQ,也称:"消息中间件"

消息队列是采用"异步(两个微服务项目并不需要同时完成请求)"的方式来传递数据完成业务操作流程的业务处理方式

消息队列的特征

常见面试题:消息队列的特征(作用)

  • 利用异步的特性,提高服务器的运行效率,减少因为远程调用出现的线程等待\阻塞时间

  • 削峰填谷:在并发峰值超过当前系统处理能力时,我们将没处理的信息保存在消息队列中,在后面出现的较闲的时间中去处理,直到所有数据依次处理完成,能够防止在并发峰值时短时间大量请求而导致的系统不稳定

  • 消息队列的延时:因为是异步执行,请求的发起者并不知道消息何时能处理完,如果业务不能接受这种延迟,就不要使用消息队列

常见消息队列软件

  • Kafka:性能好\功能弱:适合大数据量,高并发的情况,大数据领域使用较多
  • RabbitMQ:功能强\性能一般:适合发送业务需求复杂的消息队列,java业务中使用较多
  • RocketMQ:阿里的
  • ActiveMQ:前几年流行的,老项目可能用到

消息队列的事务处理

当接收消息队列中信息的模块运行发送异常时,怎么完成事务的回滚?

当消息队列中(stock)发生异常时,在异常处理的代码中,我们可以向消息的发送者(order)发送消息,然后通知发送者(order)处理,消息的发送者(order)接收到消息后,一般要手写代码回滚,如果回滚代码过程中再发生异常,就又要思考回滚方式,如果一直用消息队列传递消息的话,可能发生异常的情况是无止境的

所以我们在处理消息队列异常时,经常会设置一个"死信队列",将无法处理的异常信息发送到这个队列中

死信队列没有任何处理者,通常情况下会有专人周期性的处理死信队列的消息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一个开源的消息队列中间件,可以用于实现异步处理。下面是一种常见的使用RabbitMQ实现异步处理的方法: 1. 安装RabbitMQ:首先,你需要安装RabbitMQ并启动它。 2. 创建消息生产者:在应用程序中,你需要创建一个消息生产者,负责将需要异步处理的任务封装成消息并发送到RabbitMQ。 3. 创建消息消费者:接下来,你需要创建一个或多个消息消费者,负责从RabbitMQ接收消息并进行异步处理。这些消费者可以运行在单独的进程或服务器上。 4. 定义消息格式:你需要定义消息的格式,包括消息的内容和其他相关信息。例如,你可以使用JSON格式来定义消息。 5. 发送消息消息生产者通过RabbitMQ的API将消息发送到指定的队列。你可以指定队列的名称和其他属性。 6. 接收消息消息消费者通过订阅相应的队列来接收消息。当有新消息到达时,消费者会自动从队列中获取并处理消息。 7. 异步处理:消息消费者接收到消息后,可以根据消息的内容进行相应的异步处理。例如,可以将任务放入线程池或使用其他异步处理机制来执行任务。 8. 确认消息:当消息成功处理后,消费者需要向RabbitMQ发送确认消息,告知RabbitMQ该消息已经被处理。这样,RabbitMQ可以从队列中删除该消息。 9. 错误处理:在异步处理过程中,可能会出现错误。你需要对错误进行适当的处理,例如记录错误日志或发送通知。 通过使用RabbitMQ,你可以实现高效可靠的异步处理,提高应用程序的性能和可扩展性。同时,RabbitMQ还提供了许多其他功能,如消息持久化、消息优先级等,可以根据具体需求进行配置和使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值