mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
@@ -0,0 +1,66 @@
|
||||
package com.alibaba.otter.canal.connector.core.spi;
|
||||
|
||||
import com.alibaba.otter.canal.connector.core.config.MQProperties;
|
||||
import com.alibaba.otter.canal.connector.core.producer.MQDestination;
|
||||
import com.alibaba.otter.canal.connector.core.util.Callback;
|
||||
import com.alibaba.otter.canal.protocol.Message;
|
||||
import java.util.Properties;
|
||||
|
||||
public class ProxyCanalMQProducer implements CanalMQProducer {
|
||||
|
||||
private CanalMQProducer canalMQProducer;
|
||||
|
||||
public ProxyCanalMQProducer(CanalMQProducer canalMQProducer) {
|
||||
this.canalMQProducer = canalMQProducer;
|
||||
}
|
||||
|
||||
private ClassLoader changeCL() {
|
||||
ClassLoader cl = Thread.currentThread().getContextClassLoader();
|
||||
Thread.currentThread().setContextClassLoader(canalMQProducer.getClass().getClassLoader());
|
||||
return cl;
|
||||
}
|
||||
|
||||
private void revertCL(ClassLoader cl) {
|
||||
Thread.currentThread().setContextClassLoader(cl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Properties properties) {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
canalMQProducer.init(properties);
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public MQProperties getMqProperties() {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
return canalMQProducer.getMqProperties();
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send(MQDestination canalDestination, Message message, Callback callback) {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
canalMQProducer.send(canalDestination, message, callback);
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
canalMQProducer.stop();
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package com.alibaba.otter.canal.connector.core.spi;
|
||||
|
||||
import com.alibaba.otter.canal.connector.core.consumer.CommonMessage;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class ProxyCanalMsgConsumer implements CanalMsgConsumer {
|
||||
|
||||
private CanalMsgConsumer canalMsgConsumer;
|
||||
|
||||
public ProxyCanalMsgConsumer(CanalMsgConsumer canalMsgConsumer) {
|
||||
this.canalMsgConsumer = canalMsgConsumer;
|
||||
}
|
||||
|
||||
private ClassLoader changeCL() {
|
||||
ClassLoader cl = Thread.currentThread().getContextClassLoader();
|
||||
Thread.currentThread().setContextClassLoader(canalMsgConsumer.getClass().getClassLoader());
|
||||
return cl;
|
||||
}
|
||||
|
||||
private void revertCL(ClassLoader cl) {
|
||||
Thread.currentThread().setContextClassLoader(cl);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void init(Properties properties, String topic, String groupId) {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
canalMsgConsumer.init(properties, topic, groupId);
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void connect() {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
canalMsgConsumer.connect();
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CommonMessage> getMessage(Long timeout, TimeUnit unit) {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
return canalMsgConsumer.getMessage(timeout, unit);
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void ack() {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
canalMsgConsumer.ack();
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rollback() {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
canalMsgConsumer.rollback();
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disconnect() {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
canalMsgConsumer.disconnect();
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user