訂閱關係一致__最佳實踐_消息隊列 MQ-阿裏雲
MQ 裏的一個 Consumer ID 代表一個 Consumer 實例群組。對於大多數分布式應用來說,一個 Consumer ID 下通常會掛載多個 Consumer 實例。訂閱關係一致指的是同一個 Consumer ID 下所有 Consumer 實例的處理邏輯必須完全一致。一旦訂閱關係不一致,消息消費的邏輯就會混亂,甚至導致消息丟失。
由於 MQ 的訂閱關係主要由 Topic+Tag 共同組成,因此,保持訂閱關係一致意味著同一個 Consumer ID 下所有的實例需在以下兩方麵均保持一致:
訂閱的 Topic 必須一致;
訂閱的 Topic 中的 Tag 必須一致。
下麵舉幾個反麵例子:
【例一】以下例子中,同一個 Consumer ID 下的兩個實例訂閱的 Topic 不一致。
Consumer 實例 1-1:
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, "CID_jodie_test_1");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("jodie_test_A", "*", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println(message.getMsgID());
return Action.CommitMessage;
}
});
Consumer 實例1-2:
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, " CID_jodie_test_1");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("jodie_test_B ", "*", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println(message.getMsgID());
return Action.CommitMessage;
}
});
【例二】以下例子中,同一個 Consumer ID 下訂閱 Topic 的 Tag 不一致。Consumer 實例2-1 訂閱了 TagA,而 Consumer 實例2-2 未指定 Tag。
Consumer 實例2-1:
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, "CID_jodie_test_2");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("jodie_test_A", "TagA", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println(message.getMsgID());
return Action.CommitMessage;
}
});
Consumer 實例2-2:
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, " CID_jodie_test_2");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("jodie_test_A ", "*", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println(message.getMsgID());
return Action.CommitMessage;
}
});
【例三】此例中,錯誤的原因有倆個:
- 同一個 Consumer ID 下訂閱 Topic 個數不一致。
- 同一個 Consumer ID 下訂閱 Topic 的 Tag 不一致。
Consumer 實例3-1:
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, "CID_jodie_test_3");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("jodie_test_A", "TagA", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println(message.getMsgID());
return Action.CommitMessage;
}
});
consumer.subscribe("jodie_test_B", "TagB", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println(message.getMsgID());
return Action.CommitMessage;
}
});
Consumer 實例3-2:
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, " CID_jodie_test_3");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("jodie_test_A ", "TagB", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println(message.getMsgID());
return Action.CommitMessage;
}
});
最後更新:2016-11-23 16:04:17
上一篇:
消息重試__最佳實踐_消息隊列 MQ-阿裏雲
下一篇:
消費冪等__最佳實踐_消息隊列 MQ-阿裏雲
查詢實例SSL鏈路__實例管理_API 參考_雲數據庫 RDS 版-阿裏雲
智能解析線路__解析記錄操作_產品使用手冊_雲解析-阿裏雲
格式支持__附錄_API使用手冊_媒體轉碼-阿裏雲
條件更新__Java-SDK (NEW)_SDK 參考_表格存儲-阿裏雲
雲資源授權__安全管理_快速入門_數據管理-阿裏雲
推送通知給android__API列表_OpenAPI 1.0_移動推送-阿裏雲
行駛證識別__API介紹_文字識別_人工智能圖像類-阿裏雲
阿裏雲付費用戶破100萬;騰訊人均薪酬40萬;李強調研世界物聯網博覽會籌備
報表管理__製作報表_Quick BI-阿裏雲
簡單操作 OSS 文件__Spark_開發人員指南_E-MapReduce-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲