速记两笔,RabbitMQ 3.0的一些 Breaking Change. Mirror queue policies 还记得之前是怎样创建镜像队列的么?x-ha-policy [​​Link​​]在新版本,使用这个参数不会报错但是已经镜像不会再生效.替换方案是使用policies.这样修改的动因是:无法在运行时状态判断哪些队列是镜像队列,新方案是把镜像队列也做到配置里面.同样支持运行时管理,比如:

rabbitmqctl set_policy HA '^(?!amq\.).*' '{"ha-mode": "all"}'



[1] Mirrored Queue 的新文档 ​​http://www.rabbitmq.com./ha.html​​​ [2] rabbitmqctl 新增的方法 ​​http://www.rabbitmq.com/parameters.html​ New federation federation配置有较大变化.x-federation exchange type不复存在,替换方案是使用类似Mirrored queue的policy.这样变更的理由是:应用程序不应该知道federation的事情,应该隐藏掉这部分信息. 对于已经使用federation的应用迁移可以使用rabbitmq_federation配合修改rabbitmq.config完成


​rabbitmq-plugins disable rabbitmq_federation​


​rabbitmq-plugins enable rabbitmq_old_federation​


New Clustering 还记得创建RabbitMQ集群的那几板斧么?rabbitmqctl cluster命令修改为 rabbitmqctl join_cluster,而且不必先调用rabbitmqctl reset ,不必枚举所有的节点 如果列出多个节点,就会与多个节点组成集群,是dick node还是RAM node可以通过 --disc --ram指定集群角色,默认是disc node.这个真的比​​以前的集群构建方式​​清晰多了. frame_max 新版本如果client发送的frame比协商的frame_max值大,Rabbitmq会直接断开该client的链接.这样做的原因是:有问题的client可能发送非常大的frame导致服务器内存耗尽.默认值是128kb,​​配置文件说明文档链接​JSON-RPC management plugin侦听端口修改为15672.JSON_RPC侦听端口修改为15670.修改的动因是避开​​ ephemeral port ​​ STOMP plugin依然使用61313端口. expiration property 要支持消息粒度的过期控制就需要在消息属性上附加过期时间,填写一个可以解析为整形的字符串. 这里有个例子:​​http://www.rabbitmq.com/ttl.html#per-message-ttl​

Map<String, Object> args = new HashMap<String, Object>(); args.put("x-message-ttl", 60000); channel.queueDeclare("myqueue", false, false, false, args);



了解详情,还是去官网: What’s new in RabbitMQ 3.0? ​​http://www.rabbitmq.com/blog/2012/11/20/whats-new-in-rabbitmq-3-0/​​​ Breaking things with RabbitMQ 3.0 ​​http://www.rabbitmq.com/blog/2012/11/19/breaking-things-with-rabbitmq-3-0/​​ 最后小图一张 关于如何思考 如何解决问题 如何倾听:

[Erlang 0093] RabbitMQ 3.0的一些变化_json