为什么需要消息队列?使用消息队列有什么好处?

为什么需要消息队列

当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。“ 消息 ”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。消息被发送到队列中,“ 消息队列 ”是在消息的传输过程中保存消息的容器 。

举几个例子:

(1) 业务系统触发短信发送申请,但短信发送模块速度跟不上,需要将来不及处理的消息暂存一下,缓冲压力。就可以把短信发送申请丢到消息队列,直接返回用户成功,短信发送模块再慢慢去消息队列中取消息进行处理。

(2) 调远程系统下订单成本较高,且因为网络等因素,不稳定,攒一批一起发送。

(3) 任务处理类的系统,先把用户发起的任务请求接收过来存到消息队列中,然后后端开启多个应用程序从队列中取任务进行处理。

使用消息队列有什么好处?

提高系统响应速度

使用了消息队列,生产者一方,把消息往队列里一扔,就可以立马返回,响应用户了。无需等待处理结果。

处理结果可以让用户稍后自己来取,如医院取化验单。也可以让生产者订阅(如:留下手机号码或让生产者实现listener接口、加入监听队列),有结果了通知。获得约定将结果放在某处,无需通知。

提高系统稳定性

考虑电商系统下订单,发送数据给生产系统的情况。电商系统和生产系统之间的网络有可能掉线,生产系统可能会因维护等原因暂停服务。如果不使用消息队列,电商系统数据发布出去,顾客无法下单,影响业务开展。两个系统间不应该如此紧密耦合。应该通过消息队列解耦。同时让系统更健壮、稳定。

异步化、解耦、消除峰值

为什么需要分布式

多系统协作需要分布式

消息队列中的数据需要在多个系统间共享数据才能发挥价值。所以必须提供分布式通信机制、协同机制。

单系统内部署环境需要分布式

单系统内部,为了更好的性能、为了避免单点故障,多为集群环境。集群环境中,应用运行在多台服务器的多个JVM中;数据也保存在各种类型的数据库或非数据库的多个节点上。为了满足多节点协作需要,需要提供分布式的解决方案。

分布式环境下需要解决哪些问题?

并发问题

需进行良好的并发控制。确保“线程安全“。不要出现一个订单被出货两次。不要出现顾客A下的单,发货发给了顾客B等情况。

简单的、统一的操作机制

需定义简单的,语义明确的,业务无关的,恰当稳妥的统一的访问方式。

容错

控制好单点故障,确保数据安全。

可横向扩展

可便捷扩容。

 

参考:

 

posted @ 2021-11-29 22:12  残城碎梦  阅读(373)  评论(0编辑  收藏  举报