RabbitMQ 1
RabbitMQ消息基本通信原理和RabbitMQ高级特性的理解
使用消息队列的场景:系统集成 (堆技术 流数据 消息通讯)
集成方法:让系统往数据库的某几张表写入数据,然后让新的系统定时的去轮询取出数据并处理。这就是消息队列的雏形:其中数据库就是消息队列,他定义了消息的标准结构,并存待处理的消息。
消息通信是一种至关重要的能力:让软件相互连接得以扩展 本质上是异步的, 他通过了分隔了数据的发送和接收来解耦应用。最奇妙的地方在该连接模式在任何模式下以相同的方式工作
Rabbitmq是一个开源的消息代理和队列服务器,用通过普通的协议在完全不同的应用间共享数据,或简单的作业排队让分布式服务器进行处理。
可以用Rabbitmq队列存放作业,并让服务器为你做负载均衡和作业分派。
一章
AMQP高级消息队列协议 解决了众多消息队列需求和拓扑结构问题 任何人执行这一标准,都可以和amqp供应商 提供的mq进行交互 通过一条软件总线实时动态连接起来 (可靠,集群简单,除qpid,amqp标准的标准服务器)
启动 $sbin/rabbitmq-server status 可以
二章 理解消息通信
Amqp像邮箱那样为离线消费者存储信息 但是可以直接存储二进制数据
不同于IM协议,隐去了消息的放送方和接收方 。也没有存在这个概念。因此这个灵活的基础设置鼓励你解耦一个应用程序之间的通信。可以一对一 也可以一对多 im只能一对一
生产者和消费者 生产者创造消息 然后发布到代理服务器 (rabbitMQ)
消息包含两部分:有效载荷和 标签 有效载荷你想传输的数据 标签描述有效载荷
一种发后既忘得单向模式 生产者创建消息并设置标签
TCP连接 就像光前电缆 可以创建无数条信道 tcp打开就是amqp信道 无论发布 订阅 接受 都是通过信道完成 有了amqp,可以灵活的使用多个信道的、满足应用程序得需求,而不会有众多tcp连接得开销。 可以当作加强版得传输层,可以尽可能多的创建并行的传输层,而不被tcp连接限制。可以看成软件得路由器。
AMQP消息路由必须有三部分:交换器,队列和绑定。
队列如同邮箱。消息最终到达队列中并等待消费;消费者通过两种方式从特定队列中接收消息。
1. 通过AMQP的basic,consume命令订阅。将信道设置为接受模式,直到取消对队列的订阅为止。
2.获得单条消息而不是持续订阅 获得单条消息通过basic.get
在收到消息后,想要明确拒绝而不是确认收到该消息时,只要消息未确认你有两个选择:
1.把消费者从rabbitrmq服务器断开,可以使rebbitmq自动重新把消息发送给另一个消费者
好处所有版本都支持 缺点增加负担
2.使用2.0.0版本或更新 接口可以使用basic.reject命令 允许消费者拒绝rabbit发来的消息
命令的参数设置为true 消息会重修发到下一个消费者 false会移除消息
queuqe.declare 命令创建队列
队列设置的有用参数: exclusive 设置为true 队列便私有 只有你的应用程序才能消费。限制队列只有一个消费者很有帮助。
auto-delete 最后一个消费者取消订阅时,自动移除队列
队列AMQP消息通讯的基础模块:
为消息提供了住所 ,消息再次等待消费
负载均衡 ,队列时绝佳方案。只需附加消费者 并让RabbitMQ一循环的方式均匀地分配来的消息。
队列是RabbitMQ、中消息的最后的终点 ( 除非消息进入了黑洞)