消息队列的实现中,RabbitMQ以其健壮和可靠见长.公司的项目中选择了它作为消息队列的实现.关于MQ的机制和原理网上有很多文章可以看,这里就不再赘述,只讲几个比较容易混淆的问题
1,binding key和routing key
binding key和routing key是都不过是自己设置的一组字符,只是用的地方不同,binding key是在绑定交换机和队列时候通过方法传递的字符串,routing key是在发布消息时候,顺便带上的字符串,有些人说这两个其实是一个东西,也对也不对,说对,是因为这两个可以完全一样,说不对,是因为这两个起的作用不同,一个交换机可以绑定很多队列,但是每个队列也许需要的消息类型不同,binding key就是这个绑定时候留在交换机和队列之间的提示信息,当消息发送出来后,随着消息一起发送的routing key如果和binding key一样就说明消息是这个队列要的东西,如果不一样那就不要给这个队列,交换机你找找下个队列看看要不要.明白了吧,这两个key就是暗号,对上了就是自己人,对不上那麻烦你再找找去.
binding key和routing key的配对其实也不是就要完全一样,还可以'相似'配对,建立交换机的时候,就要告诉MQ,我要声明的这个交换机和它上面的队列之间传输消息时候要求routing key和binding key完全一样,这种模式叫Direct,如果routing key和binding key可以'模糊'匹配,这种模式叫Topic,如果不需要匹配,尽管发,叫Fanout.
2,持久化
交换机和队列都可以在创建时候设置为持久化,重启以后会回复,但是其中的消息未不会,如果要消息也恢复,将消息发布到交换机的时候,可以指定一个标志“Delivery Mode”(投递模式), 1为非持久化,2为持久化.
3,流控机制
当消息生产的速度更快,而进程的处理能力低时,消息就会堆积起来,占用内存越来越多,导致MQ崩溃,所以rabbitmq有一个流控机制,当超过限定时候就会阻止接受消息,mq流控有三种机制
yum install ncurses-devel unixODBC unixODBC-devel
wget http://www.erlang.org/download/ otp_src_17.3.tar.gz tar zxvf otp_src_17.3.tar.gz cd otp_src_17.3 ./configure --without-javac #忽略警告 make && make install
3,安装rabbitmq依赖文件,安装rabbitmq
yum install xmlto wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.4.1/rabbitmq-server-3.4.1.tar.gz tar zxvf rabbitmq-server-3.4.1.tar.gz cd rabbitmq-server-3.4.1/ make TARGET_DIR=/usr/rabbitmq SBIN_DIR=/usr/rabbitmq/sbin MAN_DIR=/usr/rabbitmq/man DOC_INSTALL_DIR=/usr/rabbitmq/doc make TARGET_DIR=/usr/rabbitmq SBIN_DIR=/usr/rabbitmq/sbin MAN_DIR=/usr/rabbitmq/man DOC_INSTALL_DIR=/usr/rabbitmq/doc install /usr/rabbitmq/sbin/rabbitmq-server -detached 启动rabbitmq /usr/rabbitmq/sbin/rabbitmqctl status 查看状态 /usr/rabbitmq/sbin/rabbitmqctl stop 关闭rabbitmq
4,启用管理插件
mkdir /etc/rabbitmq cd /usr/rabbitmq/sbin ./rabbitmq-plugins enable rabbitmq_management (启用插件) ./rabbitmq-plugins disable rabbitmq_management (禁用插件) # 重启rabbitmq # 访问 http://127.0.0.1:15672/ # 如果有iptables # vi /etc/sysconfig/iptables 增加 # -A INPUT -m state --state NEW -m tcp -p tc