嘉兴电子网站建设,项目计划书范文免费,如何创立一个网站,亚马逊 怎么做国外网站MQ是Message Queue的缩写#xff0c;也就是消息队列的意思#xff0c;它是一种应用程序对应用程序的通信方法#xff0c;使得应用程序能够通过读写出入列队的消息来进行通信#xff0c;而无需要使用专用的连接来链接它们。消息队列中间件是分布式系统中重要的组件#xff… MQ是Message Queue的缩写也就是消息队列的意思它是一种应用程序对应用程序的通信方法使得应用程序能够通过读写出入列队的消息来进行通信而无需要使用专用的连接来链接它们。消息队列中间件是分布式系统中重要的组件主要解决应用解耦异步消息流量削峰等问题。实现高性能高可用可伸缩和最终一致性架构在消息队列中有生产者和消费者两种角色生产者负责发送消息到消息队列而消费者从消息队列中取出数据进行处理这种方式实现生产者和消费者之间的解耦使得他们可以独立运行和扩展。
优点 应用解耦
消息队列允许生产者和消费者之间松耦合生产者只需要将消息发送到队列而不需要关心消息这何时处理或者如何处理这些消息
异步处理
消息队列允许异步处理消息这意味着接收者可以在自己方便的时候处理消息而不是立即相应这可以提高系统的吞吐量和响应时间
流量削峰
在高并发的场景下消息队列可以起到缓冲的作用平滑突发流量保护后端系统免受冲击
缺点
可用性降低
如果消息队列服务成为单边故障整个系统可能受到影响因此需要实施高可用性和容错策略一般解决方式是非MQ架集群
复杂性提高
引入消息队列会增加系统的复杂性因为需要配置和管理消息队列服务同时还需要处理可能的消息丢失重复或顺序错乱等问题。
一致性问题
在分布式系统中使用消息队列时如果消息队列发生了消息的丢失与重复则可能会造成数据一致性的问题。
消息队列的应用场景主要分为以下三种 1.异步处理应用在实时性要求不高的一些场景例如用户注册发送验证码、下单通知发送优惠券等。这些场景下服务方只需要把协商好的消息发送到消息队列剩下的由消费者的消息服务去处理不需要等待消费者的返回结果就可以直接返回给客户端返回给业务层面 2.应用解耦可以把一些相关的但是耦合度不高的一些系统关联起来比如订单系统与优惠券积分系统有关联度但是没有那么紧密每个系统之间只需要把一些约定好的消息发送到MQ另外的系统直接去消费就可以了它可以允许各类系统间采用不同的一些框架和语言来实现从而大大增加了整个系统的灵活度 3.流量削峰应用在大流量入口的一些短时间的业务短时间内业务需求处理不完的一些服务例如双十一秒杀、演唱会抢票等。为了权衡高可用把大量的一些并行任务发送给MQ。根据MQ的存储和分发功能平稳的去处理后续的一些业务从而起到大流量缓冲的作用
说说RabbitMQ的基本架构设计 RabbitMQ的基本架构由以下几个部分组成 1.生产者Producer生产者是消息的发送方负责产生并发生消息到RabbitMQ。生产者通常将消息发生给交换机Exchange从而使其消费者没有强关联。 2.交换机Exchange交换机是消息的分发中心负责将接收到的消息路由到一个或多个消息队列。它定义了消息的传递规则可以根据规则将消息发送到一个或多个队列中。
直连交换机Direct Exchange将消息路由到与消息中的路由键Routing Key完全匹配的队列 主题交换机Topic Exchange根据通配符匹配路由键Routing Key将消息路由到一个或多个队列 扇出交换机Fanout Exchange将消息广播到所有与交换机绑定的队列忽略路由键 头部交换机Headers Exchange根据消息头中的属性进行匹配将消息路由到与消息头匹配的队列。 3.队列Queue队列是消息的存储区用于存储生产者发送的消息。消息最终会被消费者从队列中取出并处理。每个队列都有一个名称并且可以绑定到一个或多个交换机。 4.消费者Consumer消费者是消息的接收方负责从队列中获取消息并进行处理。消费者通过订阅队列来接收消息。 5.绑定binding绑定是交换机和队列之间的关联关系。生产者将消息发送到交换机而队列通过绑定与交换机相连从而接收消息。 6.虚拟主机Virtual Host虚拟主机是RabbitMQ的基本工作单元每个虚拟主机都拥有自己独立的用户、权限、交换机、队列等资源完全隔离于其他虚拟主机。 7.连接Connection连接是指生产者、消费者与RabbitMQ之间的网络连接。每个连接都可以包含多个信道Channel每个信道是一个独立的会话通道可以进行独立的消息传递。 8.消息Message消息是生产者和消费者之间传递的数据单元。消息通常会包含消息体和可选的属性如路由键等