速记两笔,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
要支持消息粒度的过期控制就需要在消息属性上附加过期时间,填写一个可以解析为整形的字符串.
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/
最后小图一张 关于如何思考 如何解决问题 如何倾听: