速記兩筆,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/
最后小圖一張 關於如何思考 如何解決問題 如何傾聽: