RabbitMQ

1. 消息中间件概述

1.1. 什么是消息中间件

MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。多用于分布式系统之间进行通信。


为什么使用MQ:
   在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从
   而提高了系统的吞吐量。
   
   1、任务异步处理:
     将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。
     
   2、应用程序解耦合:
     MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。
     比如订单系统要远程调用库存系统、支付系统、物流系统,这样会耦合,修改参数时候麻烦。
     使用消息队列后,订单系统给消息MQ发送一条消息就算成功了
     
   3、削峰填谷:
     如订单系统,在下单的时候就会往数据库写数据。但是数据库只能支撑每秒1000左右的并发写入,并发量再高就容易宕机。
     低峰期的时候并发也就100多个,但是在高峰期时候,并发量会突然激增到5000以上,这个时候数据库肯定卡住,甚至宕机。
     
     
 使用mq后,在大并发下,比如每秒1000个数据写入数据库,那么就会有大量的消息数据积压在mq中,高峰就被削掉了,不会有大量请求打到数   据库,在经过高峰期后,消费消息的速度依然保持不变,那么被积压的消息就会被消费完,这叫做填谷。	

1.2.消息目的地

1.队列(queue):点对点消息通信 (point-to-point)
  --消息发送者发送消息,消息代理将其放入一个队列中,消息接受者从队列获取消息内容,
    消息读取后被移出队列
    
  --消息只有唯一的发送者和接收者,但并不是说只能有一个接收者(指的是消息只能被众多的消费者者     中的其中一个消费)

2.主题(topic):发布(publish) / 订阅(subscribe)消息通信

  --发送者(发布者)发送消息到主题,多个接收者(订阅者)监听(订阅)这个主题,那么就会在消息到达时     同时接收消息

1.3.消息通信的模型

MQ是消息通信的模型;
   实现MQ的大致有两种主流方式:AMQP、JMS。
   
  JMS(java Message service)java消息服务:
    --是一个Java平台中关于面向消息中间件(MOM)的API
    --基于jvm消息代理的规范。ActiveMq,HornetMq是JMS实现的。
    
   
  AMQO(Advanced Message Queuing Protocol):
    --是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,
      并不受客户端/中间件不同产品,不同的开发语言等条件的限制
    
    --AMQP是一种协议,更准确的说是一种binary wire-level protocol(链接协议),
      这是其和JMS的本质差别,AMQP不从API层进行限定,而是直接定义网络交换的数据格式,类比HTTP。
      
    --高级消息队列协议,也是一个消息代理的规范,兼容JMS
    --RabbitMQ是AMQP的实现。

1.4.通信模型的区别

 

 

 

2.RabbitMQ概念

2.1.message

消息他又消息头和消息体组成。消息体是不透明的,而消息头则是由一系列的可选属性组成,这些属性包括route-key(路由键),priority(相对于其他信息的优先权),delivery-mode(指出该消息可能需要持久性存储)等

2.2.publisher

消息的生产者,也是一个向交换器发布消息的客户端应用程序

2.3.exchange

交换器,用来接收生产者发送的消息并将消息路由给服务器中的队列。
exchange有四种类型:direct(默认),fanout,topic和headers。
不同类型的exchange转发的消息的策略有所区别

2.4.queue

消息队列,用来保存消息直到发送给消费者,它是消息的容器,也是消息的终点,一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接达到这个队列将其取走。

2.5.binding

绑定,用于消息队列和交换器之间的关联,一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。

exchange和queue的绑定可以是多对多的关系

2.6.connection

网络连接,比如一个tcp连接

2.7.channel

信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的tcp连接内的虚拟连接,AMQP命令都是通过信道发出去的,不管是发布消息,订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁tcp都是非常昂贵的开销,所以引入了信道的概念,以复用一条tcp连接。

2.8.consumer

消息的消费者,,表示一个从消息队列中取得消息的客户端应用程序

2.9.virtual host

虚拟主机,表示一批交换机,消息队列和相关对象。虚拟主机是贡献相同的身份认证和加密环境的独立服务器域,每个虚拟主机本质上就是一个mini版的RabbitMQ服务器,拥有自己的队列,交换器,绑定和权限机制,虚拟主机是AMQP概念的基础,必须在连接时指定,RabbitMQ默认的虚拟主机是/ 

2.10.broker

表示消息队列服务器实体

2.11.流程图

 

其中虚拟主机就是将bro
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值