模块之间不直接相连
传统的应用程序之间通讯需要通过调用操作系统的网络接口来实现网络通讯,并且需要自己来关注使用何种通讯协议。在使用了消息队列的系统中,模块之间的通讯只需要调用消息队列产品的API,网络通讯由消息中间件来负责,模块之间的网络通讯对于应用程序来说是透明的。
异步通讯
程序之间的任务请求不在需要阻塞等待响应,任务消息一直保存在消息队列中直到服务提供方在方便时候处理掉客户端的请求,然后队列中的消息被移除掉,这样应用程序之间就达到了解耦的效果。
业务模块分离
使用消息队列,我们可以将一个庞大的应用程序分割成多个独立的模块,模块间通过队列来通讯,等到各个模块完成任务以后统一返回结果,这样就完成了业务的分离,并且对于耗时的业务模块更易于水平扩展。
消息驱动
可以使用队列的触发器,当接到消息时候处罚启动任务。如果有必要也可以在消息处理结束时候关闭程序,这样达到了节约计算机资源目的。
事件驱动
应用程序可以被设计为根据消息队列的状态来启动或者关闭。例如只有当队列中有50个普通或者高优先级别请求时候才启动。
任务级别可指定
我们也可以给消息设置优先级别,优先级别高的消息将率先被服务提供方处理掉。
安全
配合一些安全服务软件可以对特殊资源的请求进行认证。
数据完整
在传统软件中,任务请求可能存在丢失的情况,这样应用程序就需要实现容错处理。使用消息队列后,消息队列可以保证消息的同步提交和消费,这样简化了应用程序的开发。
数据恢复
生产和消费的每条消息都会记录在日志中,系统出现异常故障后重启时候可以恢复发生异常的数据。
综合以上消息队列的特性,它可以解耦我们的应用程序,使得应用程序之间可以达到异步通讯,实现更加灵活,从而轻松构建出分布式高可用系统。
领取专属 10元无门槛券
私享最新 技术干货