diff --git a/client/pom.xml b/client/pom.xml index aa31390a..28ca8d27 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -101,12 +101,9 @@ ${spring_version} test - org.apache.rocketmq rocketmq-client - 4.3.0 - provided @@ -122,6 +119,10 @@ junit test + + com.aliyun.openservices + aliware-apache-rocketmq-cloud + diff --git a/client/src/main/java/com/alibaba/otter/canal/client/rocketmq/RocketMQCanalConnector.java b/client/src/main/java/com/alibaba/otter/canal/client/rocketmq/RocketMQCanalConnector.java index 2cf92a36..05849e43 100644 --- a/client/src/main/java/com/alibaba/otter/canal/client/rocketmq/RocketMQCanalConnector.java +++ b/client/src/main/java/com/alibaba/otter/canal/client/rocketmq/RocketMQCanalConnector.java @@ -1,5 +1,7 @@ package com.alibaba.otter.canal.client.rocketmq; +import com.aliyun.openservices.apache.api.impl.authority.SessionCredentials; +import com.aliyun.openservices.apache.api.impl.rocketmq.ClientRPCHook; import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; @@ -10,8 +12,10 @@ import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache.rocketmq.client.consumer.listener.ConsumeOrderlyContext; import org.apache.rocketmq.client.consumer.listener.ConsumeOrderlyStatus; import org.apache.rocketmq.client.consumer.listener.MessageListenerOrderly; +import org.apache.rocketmq.client.consumer.rebalance.AllocateMessageQueueAveragely; import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.common.message.MessageExt; +import org.apache.rocketmq.remoting.RPCHook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,6 +51,9 @@ public class RocketMQCanalConnector implements CanalMQConnector { private long batchProcessTimeout = 60 * 1000; private boolean flatMessage; private volatile ConsumerBatchMessage lastGetBatchMessage = null; + private String accessKey; + private String secretKey; + public RocketMQCanalConnector(String nameServer, String topic, String groupName, boolean flatMessage){ this.nameServer = nameServer; @@ -56,8 +63,25 @@ public class RocketMQCanalConnector implements CanalMQConnector { this.messageBlockingQueue = new LinkedBlockingQueue<>(1024); } + public RocketMQCanalConnector(String nameServer, String topic, String groupName, + String accessKey, String secretKey, boolean flatMessage){ + this(nameServer, topic, groupName, flatMessage); + this.accessKey = accessKey; + this.secretKey = secretKey; + } + public void connect() throws CanalClientException { - rocketMQConsumer = new DefaultMQPushConsumer(groupName); + + RPCHook rpcHook = null; + if(null != accessKey && accessKey.length() > 0 + && null != secretKey && secretKey.length() > 0){ + SessionCredentials sessionCredentials = new SessionCredentials(); + sessionCredentials.setAccessKey(accessKey); + sessionCredentials.setSecretKey(secretKey); + rpcHook = new ClientRPCHook(sessionCredentials); + } + rocketMQConsumer = new DefaultMQPushConsumer(groupName, rpcHook, new AllocateMessageQueueAveragely()); + rocketMQConsumer.setVipChannelEnabled(false); if (!StringUtils.isBlank(nameServer)) { rocketMQConsumer.setNamesrvAddr(nameServer); } diff --git a/pom.xml b/pom.xml index 0bb4bc11..92d8a530 100644 --- a/pom.xml +++ b/pom.xml @@ -302,6 +302,16 @@ jsr305 3.0.2 + + com.aliyun.openservices + aliware-apache-rocketmq-cloud + 1.0 + + + org.apache.rocketmq + rocketmq-client + 4.3.0 + diff --git a/server/pom.xml b/server/pom.xml index 3d3084e7..fd1225f4 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -40,7 +40,6 @@ org.apache.rocketmq rocketmq-client - 4.3.0 @@ -55,5 +54,9 @@ junit test + + com.aliyun.openservices + aliware-apache-rocketmq-cloud + diff --git a/server/src/main/java/com/alibaba/otter/canal/common/MQProperties.java b/server/src/main/java/com/alibaba/otter/canal/common/MQProperties.java index 3bc3394b..2e6fbe69 100644 --- a/server/src/main/java/com/alibaba/otter/canal/common/MQProperties.java +++ b/server/src/main/java/com/alibaba/otter/canal/common/MQProperties.java @@ -22,6 +22,8 @@ public class MQProperties { private boolean flatMessage = true; private String compressionType = "none"; private String acks = "all"; + private String aliyunAccessKey = ""; + private String aliyunSecretKey = ""; public static class CanalDestination { @@ -168,4 +170,19 @@ public class MQProperties { this.acks = acks; } + public String getAliyunAccessKey() { + return aliyunAccessKey; + } + + public void setAliyunAccessKey(String aliyunAccessKey) { + this.aliyunAccessKey = aliyunAccessKey; + } + + public String getAliyunSecretKey() { + return aliyunSecretKey; + } + + public void setAliyunSecretKey(String aliyunSecretKey) { + this.aliyunSecretKey = aliyunSecretKey; + } } diff --git a/server/src/main/java/com/alibaba/otter/canal/rocketmq/CanalRocketMQProducer.java b/server/src/main/java/com/alibaba/otter/canal/rocketmq/CanalRocketMQProducer.java index 3501930b..74e3920b 100644 --- a/server/src/main/java/com/alibaba/otter/canal/rocketmq/CanalRocketMQProducer.java +++ b/server/src/main/java/com/alibaba/otter/canal/rocketmq/CanalRocketMQProducer.java @@ -7,12 +7,15 @@ import com.alibaba.otter.canal.common.MQProperties; import com.alibaba.otter.canal.protocol.FlatMessage; import com.alibaba.otter.canal.server.exception.CanalServerException; import com.alibaba.otter.canal.spi.CanalMQProducer; +import com.aliyun.openservices.apache.api.impl.authority.SessionCredentials; +import com.aliyun.openservices.apache.api.impl.rocketmq.ClientRPCHook; import org.apache.rocketmq.client.exception.MQBrokerException; import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.client.producer.MessageQueueSelector; import org.apache.rocketmq.common.message.Message; import org.apache.rocketmq.common.message.MessageQueue; +import org.apache.rocketmq.remoting.RPCHook; import org.apache.rocketmq.remoting.exception.RemotingException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,10 +33,19 @@ public class CanalRocketMQProducer implements CanalMQProducer { @Override public void init(MQProperties rocketMQProperties) { this.mqProperties = rocketMQProperties; - defaultMQProducer = new DefaultMQProducer(); + RPCHook rpcHook = null; + if(rocketMQProperties.getAliyunAccessKey().length() > 0 + && rocketMQProperties.getAliyunSecretKey().length() > 0){ + SessionCredentials sessionCredentials = new SessionCredentials(); + sessionCredentials.setAccessKey(rocketMQProperties.getAliyunAccessKey()); + sessionCredentials.setSecretKey(rocketMQProperties.getAliyunSecretKey()); + rpcHook = new ClientRPCHook(sessionCredentials); + } + + defaultMQProducer = new DefaultMQProducer(rocketMQProperties.getProducerGroup(), rpcHook); defaultMQProducer.setNamesrvAddr(rocketMQProperties.getServers()); - defaultMQProducer.setProducerGroup(rocketMQProperties.getProducerGroup()); defaultMQProducer.setRetryTimesWhenSendFailed(rocketMQProperties.getRetries()); + defaultMQProducer.setVipChannelEnabled(false); logger.info("##Start RocketMQ producer##"); try { defaultMQProducer.start();