【RabbitMQ】二、RabbitMQ入门介绍

 

一.基本概念:

1.MQ简介:

  • MQ是消息通信的模型,并发具体实现。现在实现MQ的有两种主流方式:AMQP、JMS。
  • MQ:Message queue,消息队列,是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

2.AMQP和JMS的区别:  

  • JMS是Java消息服务,是Java内部的一种消息中间件,是Java的API规范接口;AMQP是通过规定协议来统一数据交互的格式
  • JMS限定了必须使用Java语言;AMQP只是一种协议,不规定实现方式,因此是跨语言的。
  • JMS规定了两种消息模型;而AMQP的消息模型更加丰富。

3.MQ特点:

  1. 先进先出:  不能先进先出,都不能说是队列了。消息队列的顺序在入队的时候就基本已经确定了,一般是不需人工干预的。而且,最重要的是,数据是只有一条数据在使用                              中。 这也是MQ在诸多场景被使用的原因。
  2. 发布订阅: 发布订阅是一种很高效的处理方式,如果不发生阻塞,基本可以当做是同步操作。这种处理方式能非常有效的提升服务器利用率,这样的应用场景非常广泛。
  3. 持久化: 持久化确保MQ的使用不只是一个部分场景的辅助工具,而是让MQ能像数据库一样存储核心的数据。
  4. 分布式:  在现在大流量、大数据的使用场景下,只支持单体应用的服务器软件基本是无法使用的,支持分布式的部署,才能被广泛使用。而且,MQ的定位就是一个高性能的中                     间件。

4.MQ典型应用场景:

  • 异步处理。把消息放入消息中间件中,等到需要的时候再去处理。
  • 流量削峰。例如秒杀活动,在短时间内访问量急剧增加,使用消息队列,当消息队列满了就拒绝响应,跳转到错误页面,这样就可以使得系统不会因为超负载而崩溃。
  • 日志处理
  • 应用解耦。假设某个服务A需要给许多个服务(B、C、D)发送消息,当某个服务(例如B)不需要发送消息了,服务A需要改代码再次部署;当新加入一个服务(服务E)需要服务A的消息的时候,也需要改代码重新部署;另外服务A也要考虑其他服务挂掉,没有收到消息怎么办?要不要重新发送呢?是不是很麻烦,使用MQ发布订阅模式,服务A只生产消息发送到MQ,B、C、D从MQ中读取消息,需要A的消息就订阅,不需要了就取消订阅,服务A不再操心其他的事情,使用这种方式可以降低服务或者系统之间的耦合。

5.常见MQ产品:

  • ActiveMQ:基于JMS

  • RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好

  • RocketMQ:基于JMS,阿里巴巴产品,目前交由Apache基金会

  • Kafka:分布式消息系统,高吞吐量

二.RabbitMQ:

1.rabbitMQ的官网:

         http://www.rabbitmq.com

2.RabbitMQ的介绍:

      官网是这样说的:

      RabbitMQ是消息代理:它接受并转发消息。您可以将其视为邮局:将您要发布的邮件放在邮箱中时,可以确保Mailperson先生或女士最终将邮件传递给您的收件人。以此类推,              RabbitMQ是一个邮政信箱,一个邮局和一个邮递员。

      RabbitMQ与邮局之间的主要区别在于,它不处理纸张,而是接收,存储和转发数据消息的二进制斑点。

3.AMQP协议:

      提到RabbitMQ,就不得不提AMQP协议。AMQP协议是具有现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为  面向消息的中间件设计。

  先了解一下AMQP协议中间的几个重要概念

  • Server:接收客户端的连接,实现AMQP实体服务。
  • Broker:简单来说就是消息队列服务器实体。
  • Connection:连接,应用程序与Server的网络连接,TCP连接。
  • Channel:信道,消息读写等操作在信道中进行。客户端可以建立多个信道,每个信道代表一个会话任务。
  • Message:消息,应用程序和服务器之间传送的数据,消息可以非常简单,也可以很复杂。有Properties和Body组成。Properties为外包装,可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body就是消息体内容。
  • Virtual Host(vhost):虚拟主机,用于逻辑隔离。一个broker里可以开设多个vhost,用作不同用户的权限分离;一个虚拟主机里面可以有若干个Exchange和Queue,同一个虚拟主机里面不能有相同名称的Exchange或Queue。
  • Exchange:交换器,接收消息,按照路由规则将消息路由到一个或者多个队列。如果路由不到,或者返回给生产者,或者直接丢弃。RabbitMQ常用的交换器常用类型有direct、topic、fanout、headers四种,后面详细介绍。
  • Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来,绑定中可以包含一个或者多个RoutingKey。
  • RoutingKey:路由键,生产者将消息发送给交换器的时候,会发送一个RoutingKey,用来指定路由规则,这样交换器就知道把消息发送到哪个队列。路由键通常为一个“.”分割的字符串,例如“com.rabbitmq”。
  • Queue:消息队列,用来保存消息,供消费者消费,每个消息都会被投入到一个或多个队列。
  • producer:消息生产者,就是投递消息的程序。
  • consumer:消息消费者,就是接受消息的程序。

4.RabbitMQ的工作原理:

      *下图是RabbitMQ的基本结构:

            

     *组成部分说明:

  1. Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue
  2. Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。
  3. Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的
  4. Producer:消息生产者,即生产方客户端,生产方客户端将消息发送
  5. Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。

5.常用交换器:

    RabbitMQ常用的交换器类型有direct、topic、fanout、headers四种。

    A.   Direct Exchange:

           a.  该类型的交换器将所有发送到该交换器的消息被转发到RoutingKey指定的队列中,也就是说路由到BindingKey和RoutingKey完全匹配的队列中。

            

     B.  Topic Exchange:

           a. 该类型的交换器将所有发送到Topic Exchange的消息被转发到所有RoutingKey中指定的Topic的队列上面。

           b. Exchange将RoutingKey和某Topic进行模糊匹配,其中“”用来匹配一个词,“#”用于匹配一个或者多个词。例如“com.#”能匹配到“com.rabbitmq.oa”和“com.rabbitmq”;                                而"login."只能匹配到“com.rabbitmq”。

           

     C.  Fanout Exchange:

           a.  该类型不处理路由键,会把所有发送到交换器的消息路由到所有绑定的队列中。优点是转发消息最快,性能最好。

          

    D.  Headers Exchange:

          a.  该类型的交换器不依赖路由规则来路由消息,而是根据消息内容中的headers属性进行匹配。headers类型交换器性能差,在实际中并不常用。

6.生产者发送消息流程:

     1、生产者和Broker建立TCP连接。

     2、生产者和Broker建立通道。

     3、生产者通过通道消息发送给Broker,由Exchange将消息进行转发。

     4、Exchange将消息转发到指定的Queue(队列)

7.消费者接收消息流程:

     1、消费者和Broker建立TCP连接

     2、消费者和Broker建立通道

     3、消费者监听指定的Queue(队列)

     4、当有消息到达Queue时Broker默认将消息推送给消费者。

     5、消费者接收到消息。

     6、ack回复
 

8.结尾:

       本文主要讲了RabbitMQ相关的介绍,为后面面代码的实现打下夯实的基础,只有了解了它的相关内容,在代码的实现才能游刃有余,加深记忆,下面的文章就是开始讲解Rabbit的不同工作模式及代码实现,希望能够看下去。。。。。。。。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值