为什么要把点替换成下划线
Author: ckkkfCreated Jun 2, 2025Updated Jul 26, 2026
Question:为什么要把点替换成下划线
src/main/java/com/alibaba/otter/canal/connector/rabbitmq/producer/CanalRabbitMQProducer.java:
public void send(final MQDestination destination, Message message, Callback callback) {
ExecutorTemplate template = new ExecutorTemplate(sendExecutor);
try {
if (!StringUtils.isEmpty(destination.getDynamicTopic())) {
// 动态topic
Map<String, Message> messageMap = MQMessageUtils
.messageTopics(message, destination.getTopic(), destination.getDynamicTopic());
for (Map.Entry<String, com.alibaba.otter.canal.protocol.Message> entry : messageMap.entrySet()) {
final String topicName = entry.getKey().replace('.', '_');
final com.alibaba.otter.canal.protocol.Message messageSub = entry.getValue();
template.submit(() -> send(destination, topicName, messageSub));
}
template.waitForResult();
} else {
send(destination, destination.getTopic(), message);
}
callback.commit();
} catch (Throwable e) {
logger.error(e.getMessage(), e);
callback.rollback();
} finally {
template.clear();
}
}中的final String topicName = entry.getKey().replace('.', '_');
我rabbitMQ的queue和routeKey都使用了canal.sync,结果消息能到交换机到不了队列,跟源码才发现这里被替换成下划线了
Source: alibaba/canal