RabbitMQ 简介
基于AMQP协议实现,主要作用是解耦,冗余,扩展性(增大消息入队和处理的频率变得很容易),平滑峰值,可恢复性,送达保证(ACK机制 消费者消费消息后必须返回相应的ACK),顺序保证等.
文章当中使用的RabbitMQ的版本是RabbitMQ 3.6.6.
关键概念
Exchange交换机
启动RabbitMQ相关的服务,会默认创建一个不可以删除的Exchange.
绑定规则:RoutingKey与队列名称相等(Direct).
1.Direct exchange (直接交换)
如果 Binding key 匹配, 那么Message就会被传递到相应的queue中.
2.Fanout exchange(广播类型)
多个队列会接收到这个消息
会向响应的queue广播。
3.Topic exchange (对key进行模式匹配)
routing key为一个句点号”.”分隔的字符串(我们将被句点号“. ”分隔开的每一段独立的字符串称为一个单词)
4.headers(通过headers里的键值对进行路由)
这里需要了解一下RabbitMQ的协议,可以通过rabbitmq官网下载AMQP协议.
headers类型的Exchange不依赖于routing key匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。
在绑定Queue与Exchange时指定一组键值对;当消息发送到Exchange时,RabbitMQ会取到该消息的headers(也是一个键值对的形式),对比其中的键值对是否完全匹配Queue与Exchange绑定时指定的键值对.如果完全匹配则消息会路由到该Queue,否则不会路由到该Queue。
Queue:队列
Consumer:消费者
Binding:绑定
Vhsot:虚拟主机
虚拟主机,这个概念与nginx 虚拟域名类似,主要是一些权限的管理,vhsot的相关配置不可以跨越,完全隔离环境.
Broker/Cluster
RabbitMQ可靠性
接下来写一些重点需要介绍的内容,可靠性也与可用性息息相关.
ACK与Confirm
生产者的Confirm,与消费者的ACK类似,但是需要注意的生产者发送消息是多条消息,所以需要Confirm这个机制来保证消息被正确接收,还有Transaction机制保证消息的事务处理.
HeartBeat:心跳包
HeartBeat 作用防止TCP网络连接中断,帮助RabbitMQServer找出断开的连接.也可以用来断开空闲的连接.
消费者与生产者
这里需要注意下生产发送到消息到多个镜像队列可能会引起一些性能问题,因为需要等待每个队列的ACK.
RabbitMQ高可用
每当接受到生产者生产的消息,MASTER首先会处理消息,然后推送到备用镜像.
HA-MODE
故障恢复机制
RabbitMQ的安装
下载RabbitMQ的rpm,wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el6.noarch.rpm
yum install rabbitmq-server-3.6.6-1.el6.noarch.rpm
发现错误,安装依赖Requires: socat 。
更新源wget –no-cache http://www.convirture.com/repos/definitions/rhel/6.x/convirt.repo -O /etc/yum.repos.d/convirt.repo
yum install socat
yum install rabbitmq-server-3.6.6-1.el6.noarch.rpm
rabbitmq-server start
注意修改在iptables修改相应的端口号
浏览器访问:http://IP:15672
其它
如何查看没有ACK的消息
sudo rabbitmqctl list_queues name messages_ready messages_unacknowledged
消费者需要注意处理在故障恢复情况下的重复消息的处理,保证处理的幂等性.在一些场景尤为注意,如下单,转账等.
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233956.html原文链接:https://javaforall.net