订阅关系一致
来源:互联网 发布:微店淘宝搬家助手 编辑:程序博客网 时间:2024/06/14 08:12
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;
}
});
0 0
- 订阅关系一致
- 验证订阅服务器与发布服务器数据是否一致
- 验证订阅服务器与发布服务器数据是否一致
- 关于一致/非一致代码段与TSS 关系的个人看法
- 关系数据库的优化方法论基本是一致的
- 波和振动动的关系与时域和频域的关系一致吗
- 吃论扯谈---吃饭和Office 365订阅的关系
- 关于订阅号和自定义菜单的关系问题
- 关于订阅号和自定义菜单的关系问题
- 微信订阅号,服务号关系 一张图解释
- js事件编程的发布/订阅模式(一对一关系)
- [WSE]Web Service与Windows Service通过WSE2.0建立订阅/发布关系[更新版本]
- 一致表达
- 一致连续
- 一致hash
- 一致和非一致段
- bomb 多对多关系 查询问题:1)查询用户A所订阅的所有频道 2)查询订阅了频道B的所有用户
- Boost.Bind用法详解(一) 2008-05-09 15:50:50| 分类: C++ |字号 订阅 Boost.Bind 为函数和函数对象提供了一致的语法,对于值语义和指针语义也一样。
- 279. Perfect Squares
- SVN1-简介及基本使用
- C4.5算法
- CSS 设置一段文本超过规定字数,省略号显示
- 河南工业大学“玲珑杯”地狱飞龙(高数上微积分~~)
- 订阅关系一致
- Java中的嵌套类、内部类、静态内部类
- 二叉树的完整操作
- swift . 视图的添加及层次变动和基本动画
- 设计模式->结构型模式->桥接模式
- 消息重试
- ubuntu安装mysql
- 通过WinMain函数创建窗口
- python_随机调用一个浏览器打开网页