没有不变的工作,只有不变的能力
RabbitMQ简介:
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
RabbitMQ的主要特性:
(1)可靠性:RabbitMQ可通过队列持久化,交换机持久化,消息持久化及ACK回应等机制保证可靠性
(2)支持多种语言与协议:RabbitMQ几乎支持所有的编程语言,还支持AMQP,STOMP,MQTT等多种协议
(3)管理界面:RabbitMQ有一个可视化的管理界面可以用来直观的查看RabbitMQ的状态及运行情况,本地安装默认网址为:http://localhost:15672/#/
(4)可灵活的扩展:多个RabbitMQ节点可以组成一个集群,队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队仍然可用
RabbitMQ的适用场景:
解耦、异步处理、处理日志、流量削峰
基本流程:
模式1:简单模式 “Hello World!”
简单的P(producer)->queue->C(consumer)
模式2:工作模式(Work单发送多接收)Work queues
一个生产者端,多个消费者端。
轮询模式—》各消费者所接收的消息数相同,不会受服务器或网速等限制。
公平分发—》根据消费者的消费能力进行公平分发,处理快的处理的多,处理慢的处理的少;按劳分配;
3、发布与订阅模式 Publish/Subscribe
使用场景:发布、订阅模式,生产者端发送消息,多个消费者同时接收所有的消息。
4、路由模式 Routing
在fanout模式上增添了Routing key进行匹配 可给指定的key进行消息发送
5、主题模式Topics
主题模式 在direct基础上增加了通配符 ‘*’ 与 ‘#’
*:有且至少有一个
#: 可有可无,可多可少
6、远程过程调用RPC
RPC工作流程
(1)对于RPC请求,客户端发送一条具有两个属性的消息:一个是为请求创建的匿名排他队列,它被设置 为一个匿名独占队列;另一个是针对每个请求设置为唯一值的corRelationId。
(2)请求被发送到一个新的RPC_Queue队列。
(3)RPC工作人员(又名:server)正在等待该队列上的请求。当一个请求出现时,它会执行这个任务,并将一个带有结果的消息发送回客户端,这将使用来自ReveryTo字段的队列。
(4)客户端等待应答队列中的数据。当消息出现时,它会检查correlationId属性。如果它与请求中的值匹配,它将返回对应用程序的响应。
7、发送确认 Publisher Confirms
实现方式:
1:单条消息发布确认
2、分批发布消息
3、异步处理发布服务器确认
rabbitmq常用命令
rabbitmq-service install 安装服务
rabbitmq-service start 开始服务
Rabbitmq-service stop 停止服务
Rabbitmq-service enable 使服务有效
Rabbitmq-service disable 使服务无效
rabbitmq-service help 帮助
当rabbitmq-service install之后默认服务是enable的,如果这时设置服务为disable的话,rabbitmq- service start就会报错。
当rabbitmq-service start正常启动服务之后,使用disable是没有效果的
Rabbitmq 管理插件启动,可视化界面
rabbitmq-plugins enable rabbitmq_management 启动
rabbitmq-plugins disable rabbitmq_management 关闭