热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AMQP的应用场景

1.什么是AMQP?在异步通讯中,消息不会立刻到达接收方,而是被存放到一个容器中,当满

1. 什么是AMQP?

在异步通讯中,消息不会立刻到达接收方,而是被存放到一个容器中,当满足一定的条件之后,消息会被容器发送给接收方,这个容器即消息队列,而完成这个功能需要双方和容器以及其中的各个组件遵守统一的约定和规则,AMQP就是这样的一种协议,消息发送与接受的双方遵守这个协议可以实现异步通讯。这个协议约定了消息的格式和工作方式。


2. 为什么使用AMQP

  为什么使用AMQP或者AMQP解决了什么问题?

  在分布式的系统中,子系统之间如果使用socket连接进行通讯,有很多问题需要解决。比如:

  1)信息的发送者和接受者如何维持这个连接?如果一方中断,这期间的数据如何防止丢失?

  2)如何降低发送者和接受者的耦合度?

  3)如何让优先级高的接受者先接到数据?

  4)如何做到load balance? 均衡接受者的负载?高并发场景

  5)如何将信息发送到相关的接收者,如果接受者订阅了不同的数据,如何正确的分发到接受者?

  6)如何做到可扩展,将通信模块发到集群上去?异构系统

  7)如何保证接受者接到了完整,正确或是有序的数据? 

AMQP解决了这些问题。与此同时,基于AMQP实现的产品相比其他类似产品(AcitveMQ)有着自己的特点。基于AMQP的RabbitMQ具有路由灵活,消息可靠等特点,如果路由策略多样化和消息需要可靠传输的需求的情况下可考虑使用基于AMQP的产品。


3. AMQP 的模型和原理

3.1 AMQP 中包含的主要元素

生产者(Producer):向Exchange发布消息的应用。 消费者(Consumer):从消息队列中消费消息的应用。 

消息队列(Message Queue):服务器组件,用于保存消息,直到发送给消费者。 消息(Message):传输的内容。 

交换器(exchange):路由组件,接收Producer发送的消息,并将消息路由转发给消息队列。 

虚拟主机(Virtual Host): 一批交换器,消息队列和相关对象。虚拟主机是共享相同身份认证和加密环境的独立服务器域。 

Broker :AMQP的服务端称为Broker。 

连接(Connection):一个网络连接,比如TCP/IP套接字连接。 

信道(Channel):多路复用连接中的一条独立的双向数据流通道,为会话提供物理传输介质。 

绑定器(Binding):消息队列和交换器直接的关联。

3.2 AMQP 的组件结构图

 

3.3 AMQP 如何实现通信的

1)建立连接Connection。由producer和consumer创建连接,连接到broker的物理节点上。

2)建立消息Channel。Channel是建立在Connection之上的,一个Connection可以建立多个Channel。

 producer连接Virtual Host 建立Channel,Consumer连接到相应的queue上建立Channel。

3)发送消息。由Producer发送消息到Broker中的exchange中。

4)路由转发。exchange收到消息后,根据一定的路由策略,将消息转发到相应的queue中去。

5)消息接收。Consumer会监听相应的queue,一旦queue中有可以消费的消息,queue就将消息发送给Consumer端。

6)消息确认。当Consumer完成某一条消息的处理之后,需要发送一条ACK消息给对应的Queue。Queue收到ACK信息后,才会认为消息处理成功,并将消息从Queue中移除;如果在对应的Channel断开后,Queue没有收到这条消息的ACK信息,该消息将被发送给另外的Channel。至此一个消息的发送接收流程走完了。消息的确认机制提高了通信的可靠性。

 

  3.4 exchange 与 Queue 的路由机制

exchange 将消息发送到哪一个queue是由exchange type 和bing 规则决定的,目前常用的有3种exchange,

Direct exchange, Fanout exchange, Topic exchange 。

Direct exchange 直接转发路由,其实现原理是通过消息中的routkey,与queue 中的routkey 进行比对,若二者匹配,则将消息发送到这个消息队列。   Fanout exchange

    复制分发路由,该路由不需要routkey,当exchange收到消息后,将消息复制多份转发给与自己绑定的消息队列。

    topic exchange 通配路由,是direct exchange的通配符模式,消息中的routkey可以写成通配的模式,exchange

   支持“#”和“*” 的通配。收到消息后,将消息转发给所有符合匹配表达式的queue。

需要注意的一点只有queue具有保持消息的功能,exchange不能保存消息。


4. AQMP 的应用场景

AQMP是实现消息机制的一种协议,消息队列主要有以下几种应用场景:

4.1 异步处理

比如公司新入职一个员工,需要开通系统账号,有几件事情要做,开通系统账号,发短信通知用户,发邮件给员工,在公司内部通讯系统中发送消息给员工。其中发短信,发邮件,发内部通讯系统消息,这三件事情可以串行也可以并行,并行的好处就是可以提高效率,这时可以应用MQ来实现并行。

4.2 应用解耦

在公司内部系统中,有人事系统,OA系统,财务系统,外围应用系统等等,当人事发生变动的时候(离职入职调岗),人事系统需要将这些变动通知给其他系统,这时只需人事系统发送一条消息,各个外围系统订阅该消息,就可得知人事变动,与实时服务调用相比,如果人事系统挂掉,各个外围系统不会受到影响,继续运行。

4.3 流量缓冲

在有些流量会瞬间暴增的场景下,如秒杀,为了防止流量突然增大而使得应用挂掉,可以引入MQ,将请求存入MQ中,如果超过了MQ的长度,就把请求丢弃掉,这样来限制流量。

4.4 日志处理

将消息队列引入到日志处理中,如kafka的应用,解决了大量日志的传输问题。日志客户端(生产者)负责采集日志数据,并定期写入kafka队列,kafka负责接收,存储和转发日志,日志处理系统(消费者)订阅并消费kafka中的日志数据。

5. AMQP 与 RabbitMQ

AMQP 是一种协议, RabbitMQ是一个由erlang开发的AMQP的开源实现,目前使用比较广泛的MQ有RabbitMQ,ActiveMQ,KafKa等等,其中ActiveMQ是基于JMS的一个开源实现,JMS 是一个接口标准或者说是一个API消息服务的规范(JAVA Message Service,java消息服务),KafKa是一种高吞吐量的分布式发布订阅消息系统,通常有吞吐量需求的日志处理和日志聚合应用会使用Kafka,性能要优于Rabbit,但是稳定性和可靠性相对而言RabbitMQ要成熟一些。

 




推荐阅读
  • 随着分布式系统的规模和复杂度提高,往往会出现如下问题:(1)系统间同步通信,客户端发出调用后,必 ... [详细]
  • 分布式消息_58分布式消息队列WMB设计与实践
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了58分布式消息队列WMB设计与实践相关的知识,希望对你有一定的参考价值。 ... [详细]
  • CentOs 7.3中搭建RabbitMQ 3.6单机多实例服务的步骤与使用
    CentOs7.3中搭建RabbitMQ3.6单机多实例服务的步骤与使用-RabbitMQ简介RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 一、RabbitMQ是什么1、MQ的主要作用是:异步、消峰、解耦2、高并发、高可用的成熟方案,支持多种消息协议,易于部署和使用Rabbit ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了看大数据时代下的IT架构业界消息队列对比相关的知识,希望对你有一定的参考价值。一、MQ(MessageQue ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
author-avatar
Yao2524_420
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有