提交 2169e3c0 编写于 作者: S shutian.lzh

Make code compatible to OMS 0.3.0

上级 48476ae5
...@@ -70,6 +70,7 @@ public class BrokerStartup { ...@@ -70,6 +70,7 @@ public class BrokerStartup {
} }
log.info(tip); log.info(tip);
System.out.printf("%s%n", tip);
return controller; return controller;
} catch (Throwable e) { } catch (Throwable e) {
e.printStackTrace(); e.printStackTrace();
......
...@@ -49,7 +49,10 @@ public class ClientLoggerTest { ...@@ -49,7 +49,10 @@ public class ClientLoggerTest {
rocketmqCommon.info("common message {}", i, new RuntimeException()); rocketmqCommon.info("common message {}", i, new RuntimeException());
rocketmqRemoting.info("remoting message {}", i, new RuntimeException()); rocketmqRemoting.info("remoting message {}", i, new RuntimeException());
} }
try {
Thread.sleep(10);
} catch (InterruptedException ignore) {
}
String content = MixAll.file2String(LOG_DIR + "/rocketmq_client.log"); String content = MixAll.file2String(LOG_DIR + "/rocketmq_client.log");
Assert.assertTrue(content.contains("testClientlog")); Assert.assertTrue(content.contains("testClientlog"));
Assert.assertTrue(content.contains("RocketmqClient")); Assert.assertTrue(content.contains("RocketmqClient"));
......
...@@ -16,19 +16,20 @@ ...@@ -16,19 +16,20 @@
*/ */
package org.apache.rocketmq.example.openmessaging; package org.apache.rocketmq.example.openmessaging;
import io.openmessaging.Future;
import io.openmessaging.FutureListener;
import io.openmessaging.Message; import io.openmessaging.Message;
import io.openmessaging.MessagingAccessPoint; import io.openmessaging.MessagingAccessPoint;
import io.openmessaging.MessagingAccessPointFactory; import io.openmessaging.OMS;
import io.openmessaging.Producer; import io.openmessaging.producer.Producer;
import io.openmessaging.Promise; import io.openmessaging.producer.SendResult;
import io.openmessaging.PromiseListener;
import io.openmessaging.SendResult;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.concurrent.CountDownLatch;
public class SimpleProducer { public class SimpleProducer {
public static void main(String[] args) { public static void main(String[] args) {
final MessagingAccessPoint messagingAccessPoint = MessagingAccessPointFactory final MessagingAccessPoint messagingAccessPoint =
.getMessagingAccessPoint("openmessaging:rocketmq://IP1:9876,IP2:9876/namespace"); OMS.getMessagingAccessPoint("oms:rocketmq://localhost:9876/default:default");
final Producer producer = messagingAccessPoint.createProducer(); final Producer producer = messagingAccessPoint.createProducer();
...@@ -38,39 +39,40 @@ public class SimpleProducer { ...@@ -38,39 +39,40 @@ public class SimpleProducer {
producer.startup(); producer.startup();
System.out.printf("Producer startup OK%n"); System.out.printf("Producer startup OK%n");
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
producer.shutdown();
messagingAccessPoint.shutdown();
}
}));
{ {
Message message = producer.createBytesMessageToTopic("OMS_HELLO_TOPIC", "OMS_HELLO_BODY".getBytes(Charset.forName("UTF-8"))); Message message = producer.createBytesMessage("OMS_HELLO_TOPIC", "OMS_HELLO_BODY".getBytes(Charset.forName("UTF-8")));
SendResult sendResult = producer.send(message); SendResult sendResult = producer.send(message);
//final Void aVoid = result.get(3000L); //final Void aVoid = result.get(3000L);
System.out.printf("Send async message OK, msgId: %s%n", sendResult.messageId()); System.out.printf("Send async message OK, msgId: %s%n", sendResult.messageId());
} }
final CountDownLatch countDownLatch = new CountDownLatch(1);
{ {
final Promise<SendResult> result = producer.sendAsync(producer.createBytesMessageToTopic("OMS_HELLO_TOPIC", "OMS_HELLO_BODY".getBytes(Charset.forName("UTF-8")))); final Future<SendResult> result = producer.sendAsync(producer.createBytesMessage("OMS_HELLO_TOPIC", "OMS_HELLO_BODY".getBytes(Charset.forName("UTF-8"))));
result.addListener(new PromiseListener<SendResult>() { result.addListener(new FutureListener<SendResult>() {
@Override @Override
public void operationCompleted(Promise<SendResult> promise) { public void operationComplete(Future<SendResult> future) {
System.out.printf("Send async message OK, msgId: %s%n", promise.get().messageId()); if (future.getThrowable() != null) {
System.out.printf("Send async message Failed, error: %s%n", future.getThrowable().getMessage());
} else {
System.out.printf("Send async message OK, msgId: %s%n", future.get().messageId());
} }
countDownLatch.countDown();
@Override
public void operationFailed(Promise<SendResult> promise) {
System.out.printf("Send async message Failed, error: %s%n", promise.getThrowable().getMessage());
} }
}); });
} }
{ {
producer.sendOneway(producer.createBytesMessageToTopic("OMS_HELLO_TOPIC", "OMS_HELLO_BODY".getBytes(Charset.forName("UTF-8")))); producer.sendOneway(producer.createBytesMessage("OMS_HELLO_TOPIC", "OMS_HELLO_BODY".getBytes(Charset.forName("UTF-8"))));
System.out.printf("Send oneway message OK%n"); System.out.printf("Send oneway message OK%n");
} }
try {
countDownLatch.await();
Thread.sleep(500); // Wait some time for one-way delivery.
} catch (InterruptedException ignore) {
}
producer.shutdown();
} }
} }
...@@ -17,42 +17,60 @@ ...@@ -17,42 +17,60 @@
package org.apache.rocketmq.example.openmessaging; package org.apache.rocketmq.example.openmessaging;
import io.openmessaging.Message; import io.openmessaging.Message;
import io.openmessaging.MessageHeader;
import io.openmessaging.MessagingAccessPoint; import io.openmessaging.MessagingAccessPoint;
import io.openmessaging.MessagingAccessPointFactory;
import io.openmessaging.OMS; import io.openmessaging.OMS;
import io.openmessaging.PullConsumer; import io.openmessaging.OMSBuiltinKeys;
import io.openmessaging.rocketmq.domain.NonStandardKeys; import io.openmessaging.consumer.PullConsumer;
import io.openmessaging.producer.Producer;
import io.openmessaging.producer.SendResult;
public class SimplePullConsumer { public class SimplePullConsumer {
public static void main(String[] args) { public static void main(String[] args) {
final MessagingAccessPoint messagingAccessPoint = MessagingAccessPointFactory final MessagingAccessPoint messagingAccessPoint =
.getMessagingAccessPoint("openmessaging:rocketmq://IP1:9876,IP2:9876/namespace"); OMS.getMessagingAccessPoint("oms:rocketmq://localhost:9876/default:default");
final PullConsumer consumer = messagingAccessPoint.createPullConsumer("OMS_HELLO_TOPIC", messagingAccessPoint.startup();
OMS.newKeyValue().put(NonStandardKeys.CONSUMER_GROUP, "OMS_CONSUMER"));
final Producer producer = messagingAccessPoint.createProducer();
final PullConsumer consumer = messagingAccessPoint.createPullConsumer(
OMS.newKeyValue().put(OMSBuiltinKeys.CONSUMER_ID, "OMS_CONSUMER"));
messagingAccessPoint.startup(); messagingAccessPoint.startup();
System.out.printf("MessagingAccessPoint startup OK%n"); System.out.printf("MessagingAccessPoint startup OK%n");
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { final String queueName = "TopicTest";
@Override
public void run() { producer.startup();
consumer.shutdown(); Message msg = producer.createBytesMessage(queueName, "Hello Open Messaging".getBytes());
messagingAccessPoint.shutdown(); SendResult sendResult = producer.send(msg);
} System.out.printf("Send Message OK. MsgId: %s%n", sendResult.messageId());
})); producer.shutdown();
consumer.attachQueue(queueName);
consumer.startup(); consumer.startup();
System.out.printf("Consumer startup OK%n"); System.out.printf("Consumer startup OK%n");
while (true) { // Keep running until we find the one that has just been sent
Message message = consumer.poll(); boolean stop = false;
while (!stop) {
Message message = consumer.receive();
if (message != null) { if (message != null) {
String msgId = message.headers().getString(MessageHeader.MESSAGE_ID); String msgId = message.sysHeaders().getString(Message.BuiltinKeys.MESSAGE_ID);
System.out.printf("Received one message: %s%n", msgId); System.out.printf("Received one message: %s%n", msgId);
consumer.ack(msgId); consumer.ack(msgId);
if (!stop) {
stop = msgId.equalsIgnoreCase(sendResult.messageId());
}
} else {
System.out.printf("Return without any message%n");
} }
} }
consumer.shutdown();
messagingAccessPoint.shutdown();
} }
} }
...@@ -17,22 +17,19 @@ ...@@ -17,22 +17,19 @@
package org.apache.rocketmq.example.openmessaging; package org.apache.rocketmq.example.openmessaging;
import io.openmessaging.Message; import io.openmessaging.Message;
import io.openmessaging.MessageHeader;
import io.openmessaging.MessageListener;
import io.openmessaging.MessagingAccessPoint; import io.openmessaging.MessagingAccessPoint;
import io.openmessaging.MessagingAccessPointFactory;
import io.openmessaging.OMS; import io.openmessaging.OMS;
import io.openmessaging.PushConsumer; import io.openmessaging.OMSBuiltinKeys;
import io.openmessaging.ReceivedMessageContext; import io.openmessaging.consumer.MessageListener;
import io.openmessaging.rocketmq.domain.NonStandardKeys; import io.openmessaging.consumer.PushConsumer;
public class SimplePushConsumer { public class SimplePushConsumer {
public static void main(String[] args) { public static void main(String[] args) {
final MessagingAccessPoint messagingAccessPoint = MessagingAccessPointFactory final MessagingAccessPoint messagingAccessPoint = OMS
.getMessagingAccessPoint("openmessaging:rocketmq://IP1:9876,IP2:9876/namespace"); .getMessagingAccessPoint("oms:rocketmq://localhost:9876/default:default");
final PushConsumer consumer = messagingAccessPoint. final PushConsumer consumer = messagingAccessPoint.
createPushConsumer(OMS.newKeyValue().put(NonStandardKeys.CONSUMER_GROUP, "OMS_CONSUMER")); createPushConsumer(OMS.newKeyValue().put(OMSBuiltinKeys.CONSUMER_ID, "OMS_CONSUMER"));
messagingAccessPoint.startup(); messagingAccessPoint.startup();
System.out.printf("MessagingAccessPoint startup OK%n"); System.out.printf("MessagingAccessPoint startup OK%n");
...@@ -47,8 +44,8 @@ public class SimplePushConsumer { ...@@ -47,8 +44,8 @@ public class SimplePushConsumer {
consumer.attachQueue("OMS_HELLO_TOPIC", new MessageListener() { consumer.attachQueue("OMS_HELLO_TOPIC", new MessageListener() {
@Override @Override
public void onMessage(final Message message, final ReceivedMessageContext context) { public void onReceived(Message message, Context context) {
System.out.printf("Received one message: %s%n", message.headers().getString(MessageHeader.MESSAGE_ID)); System.out.printf("Received one message: %s%n", message.sysHeaders().getString(Message.BuiltinKeys.MESSAGE_ID));
context.ack(); context.ack();
} }
}); });
......
...@@ -29,7 +29,7 @@ public class Producer { ...@@ -29,7 +29,7 @@ public class Producer {
producer.start(); producer.start();
for (int i = 0; i < 10000000; i++) for (int i = 0; i < 128; i++)
try { try {
{ {
Message msg = new Message("TopicTest", Message msg = new Message("TopicTest",
......
...@@ -32,7 +32,7 @@ public class PullScheduleService { ...@@ -32,7 +32,7 @@ public class PullScheduleService {
final MQPullConsumerScheduleService scheduleService = new MQPullConsumerScheduleService("GroupName1"); final MQPullConsumerScheduleService scheduleService = new MQPullConsumerScheduleService("GroupName1");
scheduleService.setMessageModel(MessageModel.CLUSTERING); scheduleService.setMessageModel(MessageModel.CLUSTERING);
scheduleService.registerPullTaskCallback("TopicTest1", new PullTaskCallback() { scheduleService.registerPullTaskCallback("TopicTest", new PullTaskCallback() {
@Override @Override
public void doPullTask(MessageQueue mq, PullTaskContext context) { public void doPullTask(MessageQueue mq, PullTaskContext context) {
......
...@@ -16,24 +16,21 @@ ...@@ -16,24 +16,21 @@
*/ */
package io.openmessaging.rocketmq; package io.openmessaging.rocketmq;
import io.openmessaging.IterableConsumer;
import io.openmessaging.KeyValue; import io.openmessaging.KeyValue;
import io.openmessaging.MessagingAccessPoint; import io.openmessaging.MessagingAccessPoint;
import io.openmessaging.Producer;
import io.openmessaging.PullConsumer;
import io.openmessaging.PushConsumer;
import io.openmessaging.ResourceManager; import io.openmessaging.ResourceManager;
import io.openmessaging.SequenceProducer; import io.openmessaging.consumer.PullConsumer;
import io.openmessaging.ServiceEndPoint; import io.openmessaging.consumer.PushConsumer;
import io.openmessaging.consumer.StreamingConsumer;
import io.openmessaging.exception.OMSNotSupportedException; import io.openmessaging.exception.OMSNotSupportedException;
import io.openmessaging.observer.Observer; import io.openmessaging.producer.Producer;
import io.openmessaging.rocketmq.consumer.PullConsumerImpl; import io.openmessaging.rocketmq.consumer.PullConsumerImpl;
import io.openmessaging.rocketmq.consumer.PushConsumerImpl; import io.openmessaging.rocketmq.consumer.PushConsumerImpl;
import io.openmessaging.rocketmq.producer.ProducerImpl; import io.openmessaging.rocketmq.producer.ProducerImpl;
import io.openmessaging.rocketmq.producer.SequenceProducerImpl;
import io.openmessaging.rocketmq.utils.OMSUtil; import io.openmessaging.rocketmq.utils.OMSUtil;
public class MessagingAccessPointImpl implements MessagingAccessPoint { public class MessagingAccessPointImpl implements MessagingAccessPoint {
private final KeyValue accessPointProperties; private final KeyValue accessPointProperties;
public MessagingAccessPointImpl(final KeyValue accessPointProperties) { public MessagingAccessPointImpl(final KeyValue accessPointProperties) {
...@@ -41,10 +38,15 @@ public class MessagingAccessPointImpl implements MessagingAccessPoint { ...@@ -41,10 +38,15 @@ public class MessagingAccessPointImpl implements MessagingAccessPoint {
} }
@Override @Override
public KeyValue properties() { public KeyValue attributes() {
return accessPointProperties; return accessPointProperties;
} }
@Override
public String implVersion() {
return "0.3.0";
}
@Override @Override
public Producer createProducer() { public Producer createProducer() {
return new ProducerImpl(this.accessPointProperties); return new ProducerImpl(this.accessPointProperties);
...@@ -55,16 +57,6 @@ public class MessagingAccessPointImpl implements MessagingAccessPoint { ...@@ -55,16 +57,6 @@ public class MessagingAccessPointImpl implements MessagingAccessPoint {
return new ProducerImpl(OMSUtil.buildKeyValue(this.accessPointProperties, properties)); return new ProducerImpl(OMSUtil.buildKeyValue(this.accessPointProperties, properties));
} }
@Override
public SequenceProducer createSequenceProducer() {
return new SequenceProducerImpl(this.accessPointProperties);
}
@Override
public SequenceProducer createSequenceProducer(KeyValue properties) {
return new SequenceProducerImpl(OMSUtil.buildKeyValue(this.accessPointProperties, properties));
}
@Override @Override
public PushConsumer createPushConsumer() { public PushConsumer createPushConsumer() {
return new PushConsumerImpl(accessPointProperties); return new PushConsumerImpl(accessPointProperties);
...@@ -76,50 +68,30 @@ public class MessagingAccessPointImpl implements MessagingAccessPoint { ...@@ -76,50 +68,30 @@ public class MessagingAccessPointImpl implements MessagingAccessPoint {
} }
@Override @Override
public PullConsumer createPullConsumer(String queueName) { public PullConsumer createPullConsumer() {
return new PullConsumerImpl(queueName, accessPointProperties); return new PullConsumerImpl(accessPointProperties);
} }
@Override @Override
public PullConsumer createPullConsumer(String queueName, KeyValue properties) { public PullConsumer createPullConsumer(KeyValue attributes) {
return new PullConsumerImpl(queueName, OMSUtil.buildKeyValue(this.accessPointProperties, properties)); return new PullConsumerImpl(OMSUtil.buildKeyValue(this.accessPointProperties, attributes));
} }
@Override @Override
public IterableConsumer createIterableConsumer(String queueName) { public StreamingConsumer createStreamingConsumer() {
throw new OMSNotSupportedException("-1", "IterableConsumer is not supported in current version"); return null;
} }
@Override @Override
public IterableConsumer createIterableConsumer(String queueName, KeyValue properties) { public StreamingConsumer createStreamingConsumer(KeyValue attributes) {
throw new OMSNotSupportedException("-1", "IterableConsumer is not supported in current version"); return null;
} }
@Override @Override
public ResourceManager getResourceManager() { public ResourceManager resourceManager() {
throw new OMSNotSupportedException("-1", "ResourceManager is not supported in current version."); throw new OMSNotSupportedException("-1", "ResourceManager is not supported in current version.");
} }
@Override
public ServiceEndPoint createServiceEndPoint() {
throw new OMSNotSupportedException("-1", "ServiceEndPoint is not supported in current version.");
}
@Override
public ServiceEndPoint createServiceEndPoint(KeyValue properties) {
throw new OMSNotSupportedException("-1", "ServiceEndPoint is not supported in current version.");
}
@Override
public void addObserver(Observer observer) {
//Ignore
}
@Override
public void deleteObserver(Observer observer) {
//Ignore
}
@Override @Override
public void startup() { public void startup() {
//Ignore //Ignore
......
...@@ -16,20 +16,20 @@ ...@@ -16,20 +16,20 @@
*/ */
package io.openmessaging.rocketmq.config; package io.openmessaging.rocketmq.config;
import io.openmessaging.PropertyKeys; import io.openmessaging.OMSBuiltinKeys;
import io.openmessaging.rocketmq.domain.NonStandardKeys; import io.openmessaging.rocketmq.domain.NonStandardKeys;
public class ClientConfig implements PropertyKeys, NonStandardKeys { public class ClientConfig implements OMSBuiltinKeys, NonStandardKeys {
private String omsDriverImpl; private String driverImpl;
private String omsAccessPoints; private String accessPoints;
private String omsNamespace; private String namespace;
private String omsProducerId; private String producerId;
private String omsConsumerId; private String consumerId;
private int omsOperationTimeout = 5000; private int operationTimeout = 5000;
private String omsRoutingName; private String region;
private String omsOperatorName; private String routingSource;
private String omsDstQueue; private String routingDestination;
private String omsSrcTopic; private String routingExpression;
private String rmqConsumerGroup; private String rmqConsumerGroup;
private String rmqProducerGroup = "__OMS_PRODUCER_DEFAULT_GROUP"; private String rmqProducerGroup = "__OMS_PRODUCER_DEFAULT_GROUP";
private int rmqMaxRedeliveryTimes = 16; private int rmqMaxRedeliveryTimes = 16;
...@@ -40,84 +40,60 @@ public class ClientConfig implements PropertyKeys, NonStandardKeys { ...@@ -40,84 +40,60 @@ public class ClientConfig implements PropertyKeys, NonStandardKeys {
private int rmqPullMessageBatchNums = 32; private int rmqPullMessageBatchNums = 32;
private int rmqPullMessageCacheCapacity = 1000; private int rmqPullMessageCacheCapacity = 1000;
public String getOmsDriverImpl() { public String getDriverImpl() {
return omsDriverImpl; return driverImpl;
} }
public void setOmsDriverImpl(final String omsDriverImpl) { public void setDriverImpl(final String driverImpl) {
this.omsDriverImpl = omsDriverImpl; this.driverImpl = driverImpl;
} }
public String getOmsAccessPoints() { public String getAccessPoints() {
return omsAccessPoints; return accessPoints;
} }
public void setOmsAccessPoints(final String omsAccessPoints) { public void setAccessPoints(final String accessPoints) {
this.omsAccessPoints = omsAccessPoints; this.accessPoints = accessPoints;
} }
public String getOmsNamespace() { public String getNamespace() {
return omsNamespace; return namespace;
} }
public void setOmsNamespace(final String omsNamespace) { public void setNamespace(final String namespace) {
this.omsNamespace = omsNamespace; this.namespace = namespace;
} }
public String getOmsProducerId() { public String getProducerId() {
return omsProducerId; return producerId;
} }
public void setOmsProducerId(final String omsProducerId) { public void setProducerId(final String producerId) {
this.omsProducerId = omsProducerId; this.producerId = producerId;
} }
public String getOmsConsumerId() { public String getConsumerId() {
return omsConsumerId; return consumerId;
} }
public void setOmsConsumerId(final String omsConsumerId) { public void setConsumerId(final String consumerId) {
this.omsConsumerId = omsConsumerId; this.consumerId = consumerId;
} }
public int getOmsOperationTimeout() { public int getOperationTimeout() {
return omsOperationTimeout; return operationTimeout;
} }
public void setOmsOperationTimeout(final int omsOperationTimeout) { public void setOperationTimeout(final int operationTimeout) {
this.omsOperationTimeout = omsOperationTimeout; this.operationTimeout = operationTimeout;
} }
public String getOmsRoutingName() { public String getRoutingSource() {
return omsRoutingName; return routingSource;
} }
public void setOmsRoutingName(final String omsRoutingName) { public void setRoutingSource(final String routingSource) {
this.omsRoutingName = omsRoutingName; this.routingSource = routingSource;
}
public String getOmsOperatorName() {
return omsOperatorName;
}
public void setOmsOperatorName(final String omsOperatorName) {
this.omsOperatorName = omsOperatorName;
}
public String getOmsDstQueue() {
return omsDstQueue;
}
public void setOmsDstQueue(final String omsDstQueue) {
this.omsDstQueue = omsDstQueue;
}
public String getOmsSrcTopic() {
return omsSrcTopic;
}
public void setOmsSrcTopic(final String omsSrcTopic) {
this.omsSrcTopic = omsSrcTopic;
} }
public String getRmqConsumerGroup() { public String getRmqConsumerGroup() {
...@@ -191,4 +167,28 @@ public class ClientConfig implements PropertyKeys, NonStandardKeys { ...@@ -191,4 +167,28 @@ public class ClientConfig implements PropertyKeys, NonStandardKeys {
public void setRmqPullMessageCacheCapacity(final int rmqPullMessageCacheCapacity) { public void setRmqPullMessageCacheCapacity(final int rmqPullMessageCacheCapacity) {
this.rmqPullMessageCacheCapacity = rmqPullMessageCacheCapacity; this.rmqPullMessageCacheCapacity = rmqPullMessageCacheCapacity;
} }
public String getRegion() {
return region;
}
public void setRegion(String region) {
this.region = region;
}
public String getRoutingDestination() {
return routingDestination;
}
public void setRoutingDestination(String routingDestination) {
this.routingDestination = routingDestination;
}
public String getRoutingExpression() {
return routingExpression;
}
public void setRoutingExpression(String routingExpression) {
this.routingExpression = routingExpression;
}
} }
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
package io.openmessaging.rocketmq.consumer; package io.openmessaging.rocketmq.consumer;
import io.openmessaging.KeyValue; import io.openmessaging.KeyValue;
import io.openmessaging.PropertyKeys; import io.openmessaging.Message;
import io.openmessaging.ServiceLifecycle; import io.openmessaging.ServiceLifecycle;
import io.openmessaging.rocketmq.config.ClientConfig; import io.openmessaging.rocketmq.config.ClientConfig;
import io.openmessaging.rocketmq.domain.ConsumeRequest; import io.openmessaging.rocketmq.domain.ConsumeRequest;
...@@ -37,11 +37,11 @@ import org.apache.rocketmq.client.exception.MQClientException; ...@@ -37,11 +37,11 @@ import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.impl.consumer.ProcessQueue; import org.apache.rocketmq.client.impl.consumer.ProcessQueue;
import org.apache.rocketmq.client.log.ClientLogger; import org.apache.rocketmq.client.log.ClientLogger;
import org.apache.rocketmq.common.ThreadFactoryImpl; import org.apache.rocketmq.common.ThreadFactoryImpl;
import org.apache.rocketmq.logging.InternalLogger;
import org.apache.rocketmq.common.message.MessageAccessor; import org.apache.rocketmq.common.message.MessageAccessor;
import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.common.message.MessageQueue; import org.apache.rocketmq.common.message.MessageQueue;
import org.apache.rocketmq.common.utils.ThreadUtils; import org.apache.rocketmq.common.utils.ThreadUtils;
import org.apache.rocketmq.logging.InternalLogger;
class LocalMessageCache implements ServiceLifecycle { class LocalMessageCache implements ServiceLifecycle {
private final BlockingQueue<ConsumeRequest> consumeRequestCache; private final BlockingQueue<ConsumeRequest> consumeRequestCache;
...@@ -91,13 +91,13 @@ class LocalMessageCache implements ServiceLifecycle { ...@@ -91,13 +91,13 @@ class LocalMessageCache implements ServiceLifecycle {
} }
MessageExt poll() { MessageExt poll() {
return poll(clientConfig.getOmsOperationTimeout()); return poll(clientConfig.getOperationTimeout());
} }
MessageExt poll(final KeyValue properties) { MessageExt poll(final KeyValue properties) {
int currentPollTimeout = clientConfig.getOmsOperationTimeout(); int currentPollTimeout = clientConfig.getOperationTimeout();
if (properties.containsKey(PropertyKeys.OPERATION_TIMEOUT)) { if (properties.containsKey(Message.BuiltinKeys.TIMEOUT)) {
currentPollTimeout = properties.getInt(PropertyKeys.OPERATION_TIMEOUT); currentPollTimeout = properties.getInt(Message.BuiltinKeys.TIMEOUT);
} }
return poll(currentPollTimeout); return poll(currentPollTimeout);
} }
......
...@@ -18,8 +18,8 @@ package io.openmessaging.rocketmq.consumer; ...@@ -18,8 +18,8 @@ package io.openmessaging.rocketmq.consumer;
import io.openmessaging.KeyValue; import io.openmessaging.KeyValue;
import io.openmessaging.Message; import io.openmessaging.Message;
import io.openmessaging.PropertyKeys; import io.openmessaging.OMSBuiltinKeys;
import io.openmessaging.PullConsumer; import io.openmessaging.consumer.PullConsumer;
import io.openmessaging.exception.OMSRuntimeException; import io.openmessaging.exception.OMSRuntimeException;
import io.openmessaging.rocketmq.config.ClientConfig; import io.openmessaging.rocketmq.config.ClientConfig;
import io.openmessaging.rocketmq.domain.ConsumeRequest; import io.openmessaging.rocketmq.domain.ConsumeRequest;
...@@ -34,28 +34,25 @@ import org.apache.rocketmq.client.consumer.PullTaskContext; ...@@ -34,28 +34,25 @@ import org.apache.rocketmq.client.consumer.PullTaskContext;
import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.impl.consumer.ProcessQueue; import org.apache.rocketmq.client.impl.consumer.ProcessQueue;
import org.apache.rocketmq.client.log.ClientLogger; import org.apache.rocketmq.client.log.ClientLogger;
import org.apache.rocketmq.logging.InternalLogger;
import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.common.message.MessageQueue; import org.apache.rocketmq.common.message.MessageQueue;
import org.apache.rocketmq.logging.InternalLogger;
public class PullConsumerImpl implements PullConsumer { public class PullConsumerImpl implements PullConsumer {
private final DefaultMQPullConsumer rocketmqPullConsumer; private final DefaultMQPullConsumer rocketmqPullConsumer;
private final KeyValue properties; private final KeyValue properties;
private boolean started = false; private boolean started = false;
private String targetQueueName;
private final MQPullConsumerScheduleService pullConsumerScheduleService; private final MQPullConsumerScheduleService pullConsumerScheduleService;
private final LocalMessageCache localMessageCache; private final LocalMessageCache localMessageCache;
private final ClientConfig clientConfig; private final ClientConfig clientConfig;
final static InternalLogger log = ClientLogger.getLog(); final static InternalLogger log = ClientLogger.getLog();
public PullConsumerImpl(final String queueName, final KeyValue properties) { public PullConsumerImpl(final KeyValue properties) {
this.properties = properties; this.properties = properties;
this.targetQueueName = queueName;
this.clientConfig = BeanUtils.populate(properties, ClientConfig.class); this.clientConfig = BeanUtils.populate(properties, ClientConfig.class);
String consumerGroup = clientConfig.getRmqConsumerGroup(); String consumerGroup = clientConfig.getConsumerId();
if (null == consumerGroup || consumerGroup.isEmpty()) { if (null == consumerGroup || consumerGroup.isEmpty()) {
throw new OMSRuntimeException("-1", "Consumer Group is necessary for RocketMQ, please set it."); throw new OMSRuntimeException("-1", "Consumer Group is necessary for RocketMQ, please set it.");
} }
...@@ -63,7 +60,7 @@ public class PullConsumerImpl implements PullConsumer { ...@@ -63,7 +60,7 @@ public class PullConsumerImpl implements PullConsumer {
this.rocketmqPullConsumer = pullConsumerScheduleService.getDefaultMQPullConsumer(); this.rocketmqPullConsumer = pullConsumerScheduleService.getDefaultMQPullConsumer();
String accessPoints = clientConfig.getOmsAccessPoints(); String accessPoints = clientConfig.getAccessPoints();
if (accessPoints == null || accessPoints.isEmpty()) { if (accessPoints == null || accessPoints.isEmpty()) {
throw new OMSRuntimeException("-1", "OMS AccessPoints is null or empty."); throw new OMSRuntimeException("-1", "OMS AccessPoints is null or empty.");
} }
...@@ -76,24 +73,42 @@ public class PullConsumerImpl implements PullConsumer { ...@@ -76,24 +73,42 @@ public class PullConsumerImpl implements PullConsumer {
String consumerId = OMSUtil.buildInstanceName(); String consumerId = OMSUtil.buildInstanceName();
this.rocketmqPullConsumer.setInstanceName(consumerId); this.rocketmqPullConsumer.setInstanceName(consumerId);
properties.put(PropertyKeys.CONSUMER_ID, consumerId); properties.put(OMSBuiltinKeys.CONSUMER_ID, consumerId);
this.localMessageCache = new LocalMessageCache(this.rocketmqPullConsumer, clientConfig); this.localMessageCache = new LocalMessageCache(this.rocketmqPullConsumer, clientConfig);
} }
@Override @Override
public KeyValue properties() { public KeyValue attributes() {
return properties; return properties;
} }
@Override @Override
public Message poll() { public PullConsumer attachQueue(String queueName) {
registerPullTaskCallback(queueName);
return this;
}
@Override
public PullConsumer attachQueue(String queueName, KeyValue attributes) {
registerPullTaskCallback(queueName);
return this;
}
@Override
public PullConsumer detachQueue(String queueName) {
this.rocketmqPullConsumer.getRegisterTopics().remove(queueName);
return this;
}
@Override
public Message receive() {
MessageExt rmqMsg = localMessageCache.poll(); MessageExt rmqMsg = localMessageCache.poll();
return rmqMsg == null ? null : OMSUtil.msgConvert(rmqMsg); return rmqMsg == null ? null : OMSUtil.msgConvert(rmqMsg);
} }
@Override @Override
public Message poll(final KeyValue properties) { public Message receive(final KeyValue properties) {
MessageExt rmqMsg = localMessageCache.poll(properties); MessageExt rmqMsg = localMessageCache.poll(properties);
return rmqMsg == null ? null : OMSUtil.msgConvert(rmqMsg); return rmqMsg == null ? null : OMSUtil.msgConvert(rmqMsg);
} }
...@@ -112,7 +127,6 @@ public class PullConsumerImpl implements PullConsumer { ...@@ -112,7 +127,6 @@ public class PullConsumerImpl implements PullConsumer {
public synchronized void startup() { public synchronized void startup() {
if (!started) { if (!started) {
try { try {
registerPullTaskCallback();
this.pullConsumerScheduleService.start(); this.pullConsumerScheduleService.start();
this.localMessageCache.startup(); this.localMessageCache.startup();
} catch (MQClientException e) { } catch (MQClientException e) {
...@@ -122,7 +136,7 @@ public class PullConsumerImpl implements PullConsumer { ...@@ -122,7 +136,7 @@ public class PullConsumerImpl implements PullConsumer {
this.started = true; this.started = true;
} }
private void registerPullTaskCallback() { private void registerPullTaskCallback(final String targetQueueName) {
this.pullConsumerScheduleService.registerPullTaskCallback(targetQueueName, new PullTaskCallback() { this.pullConsumerScheduleService.registerPullTaskCallback(targetQueueName, new PullTaskCallback() {
@Override @Override
public void doPullTask(final MessageQueue mq, final PullTaskContext context) { public void doPullTask(final MessageQueue mq, final PullTaskContext context) {
......
...@@ -18,12 +18,12 @@ package io.openmessaging.rocketmq.consumer; ...@@ -18,12 +18,12 @@ package io.openmessaging.rocketmq.consumer;
import io.openmessaging.BytesMessage; import io.openmessaging.BytesMessage;
import io.openmessaging.KeyValue; import io.openmessaging.KeyValue;
import io.openmessaging.MessageListener;
import io.openmessaging.OMS; import io.openmessaging.OMS;
import io.openmessaging.PropertyKeys; import io.openmessaging.OMSBuiltinKeys;
import io.openmessaging.PushConsumer; import io.openmessaging.consumer.MessageListener;
import io.openmessaging.ReceivedMessageContext; import io.openmessaging.consumer.PushConsumer;
import io.openmessaging.exception.OMSRuntimeException; import io.openmessaging.exception.OMSRuntimeException;
import io.openmessaging.interceptor.ConsumerInterceptor;
import io.openmessaging.rocketmq.config.ClientConfig; import io.openmessaging.rocketmq.config.ClientConfig;
import io.openmessaging.rocketmq.domain.NonStandardKeys; import io.openmessaging.rocketmq.domain.NonStandardKeys;
import io.openmessaging.rocketmq.utils.BeanUtils; import io.openmessaging.rocketmq.utils.BeanUtils;
...@@ -52,13 +52,13 @@ public class PushConsumerImpl implements PushConsumer { ...@@ -52,13 +52,13 @@ public class PushConsumerImpl implements PushConsumer {
this.properties = properties; this.properties = properties;
this.clientConfig = BeanUtils.populate(properties, ClientConfig.class); this.clientConfig = BeanUtils.populate(properties, ClientConfig.class);
String accessPoints = clientConfig.getOmsAccessPoints(); String accessPoints = clientConfig.getAccessPoints();
if (accessPoints == null || accessPoints.isEmpty()) { if (accessPoints == null || accessPoints.isEmpty()) {
throw new OMSRuntimeException("-1", "OMS AccessPoints is null or empty."); throw new OMSRuntimeException("-1", "OMS AccessPoints is null or empty.");
} }
this.rocketmqPushConsumer.setNamesrvAddr(accessPoints.replace(',', ';')); this.rocketmqPushConsumer.setNamesrvAddr(accessPoints.replace(',', ';'));
String consumerGroup = clientConfig.getRmqConsumerGroup(); String consumerGroup = clientConfig.getConsumerId();
if (null == consumerGroup || consumerGroup.isEmpty()) { if (null == consumerGroup || consumerGroup.isEmpty()) {
throw new OMSRuntimeException("-1", "Consumer Group is necessary for RocketMQ, please set it."); throw new OMSRuntimeException("-1", "Consumer Group is necessary for RocketMQ, please set it.");
} }
...@@ -70,13 +70,13 @@ public class PushConsumerImpl implements PushConsumer { ...@@ -70,13 +70,13 @@ public class PushConsumerImpl implements PushConsumer {
String consumerId = OMSUtil.buildInstanceName(); String consumerId = OMSUtil.buildInstanceName();
this.rocketmqPushConsumer.setInstanceName(consumerId); this.rocketmqPushConsumer.setInstanceName(consumerId);
properties.put(PropertyKeys.CONSUMER_ID, consumerId); properties.put(OMSBuiltinKeys.CONSUMER_ID, consumerId);
this.rocketmqPushConsumer.registerMessageListener(new MessageListenerImpl()); this.rocketmqPushConsumer.registerMessageListener(new MessageListenerImpl());
} }
@Override @Override
public KeyValue properties() { public KeyValue attributes() {
return properties; return properties;
} }
...@@ -90,6 +90,11 @@ public class PushConsumerImpl implements PushConsumer { ...@@ -90,6 +90,11 @@ public class PushConsumerImpl implements PushConsumer {
this.rocketmqPushConsumer.suspend(); this.rocketmqPushConsumer.suspend();
} }
@Override
public void suspend(long timeout) {
}
@Override @Override
public boolean isSuspended() { public boolean isSuspended() {
return this.rocketmqPushConsumer.getDefaultMQPushConsumerImpl().isPause(); return this.rocketmqPushConsumer.getDefaultMQPushConsumerImpl().isPause();
...@@ -106,6 +111,32 @@ public class PushConsumerImpl implements PushConsumer { ...@@ -106,6 +111,32 @@ public class PushConsumerImpl implements PushConsumer {
return this; return this;
} }
@Override
public PushConsumer attachQueue(String queueName, MessageListener listener, KeyValue attributes) {
return this.attachQueue(queueName, listener);
}
@Override
public PushConsumer detachQueue(String queueName) {
this.subscribeTable.remove(queueName);
try {
this.rocketmqPushConsumer.unsubscribe(queueName);
} catch (Exception e) {
throw new OMSRuntimeException("-1", String.format("RocketMQ push consumer fails to unsubscribe topic: %s", queueName));
}
return null;
}
@Override
public void addInterceptor(ConsumerInterceptor interceptor) {
}
@Override
public void removeInterceptor(ConsumerInterceptor interceptor) {
}
@Override @Override
public synchronized void startup() { public synchronized void startup() {
if (!started) { if (!started) {
...@@ -146,9 +177,9 @@ public class PushConsumerImpl implements PushConsumer { ...@@ -146,9 +177,9 @@ public class PushConsumerImpl implements PushConsumer {
contextProperties.put(NonStandardKeys.MESSAGE_CONSUME_STATUS, ConsumeConcurrentlyStatus.RECONSUME_LATER.name()); contextProperties.put(NonStandardKeys.MESSAGE_CONSUME_STATUS, ConsumeConcurrentlyStatus.RECONSUME_LATER.name());
ReceivedMessageContext context = new ReceivedMessageContext() { MessageListener.Context context = new MessageListener.Context() {
@Override @Override
public KeyValue properties() { public KeyValue attributes() {
return contextProperties; return contextProperties;
} }
...@@ -158,16 +189,9 @@ public class PushConsumerImpl implements PushConsumer { ...@@ -158,16 +189,9 @@ public class PushConsumerImpl implements PushConsumer {
contextProperties.put(NonStandardKeys.MESSAGE_CONSUME_STATUS, contextProperties.put(NonStandardKeys.MESSAGE_CONSUME_STATUS,
ConsumeConcurrentlyStatus.CONSUME_SUCCESS.name()); ConsumeConcurrentlyStatus.CONSUME_SUCCESS.name());
} }
@Override
public void ack(final KeyValue properties) {
sync.countDown();
contextProperties.put(NonStandardKeys.MESSAGE_CONSUME_STATUS,
properties.getString(NonStandardKeys.MESSAGE_CONSUME_STATUS));
}
}; };
long begin = System.currentTimeMillis(); long begin = System.currentTimeMillis();
listener.onMessage(omsMsg, context); listener.onReceived(omsMsg, context);
long costs = System.currentTimeMillis() - begin; long costs = System.currentTimeMillis() - begin;
long timeoutMills = clientConfig.getRmqMessageConsumeTimeout() * 60 * 1000; long timeoutMills = clientConfig.getRmqMessageConsumeTimeout() * 60 * 1000;
try { try {
......
...@@ -23,13 +23,13 @@ import io.openmessaging.OMS; ...@@ -23,13 +23,13 @@ import io.openmessaging.OMS;
import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringBuilder;
public class BytesMessageImpl implements BytesMessage { public class BytesMessageImpl implements BytesMessage {
private KeyValue headers; private KeyValue sysHeaders;
private KeyValue properties; private KeyValue userHeaders;
private byte[] body; private byte[] body;
public BytesMessageImpl() { public BytesMessageImpl() {
this.headers = OMS.newKeyValue(); this.sysHeaders = OMS.newKeyValue();
this.properties = OMS.newKeyValue(); this.userHeaders = OMS.newKeyValue();
} }
@Override @Override
...@@ -44,60 +44,60 @@ public class BytesMessageImpl implements BytesMessage { ...@@ -44,60 +44,60 @@ public class BytesMessageImpl implements BytesMessage {
} }
@Override @Override
public KeyValue headers() { public KeyValue sysHeaders() {
return headers; return sysHeaders;
} }
@Override @Override
public KeyValue properties() { public KeyValue userHeaders() {
return properties; return userHeaders;
} }
@Override @Override
public Message putHeaders(final String key, final int value) { public Message putSysHeaders(String key, int value) {
headers.put(key, value); sysHeaders.put(key, value);
return this; return this;
} }
@Override @Override
public Message putHeaders(final String key, final long value) { public Message putSysHeaders(String key, long value) {
headers.put(key, value); sysHeaders.put(key, value);
return this; return this;
} }
@Override @Override
public Message putHeaders(final String key, final double value) { public Message putSysHeaders(String key, double value) {
headers.put(key, value); sysHeaders.put(key, value);
return this; return this;
} }
@Override @Override
public Message putHeaders(final String key, final String value) { public Message putSysHeaders(String key, String value) {
headers.put(key, value); sysHeaders.put(key, value);
return this; return this;
} }
@Override @Override
public Message putProperties(final String key, final int value) { public Message putUserHeaders(String key, int value) {
properties.put(key, value); userHeaders.put(key, value);
return this; return this;
} }
@Override @Override
public Message putProperties(final String key, final long value) { public Message putUserHeaders(String key, long value) {
properties.put(key, value); userHeaders.put(key, value);
return this; return this;
} }
@Override @Override
public Message putProperties(final String key, final double value) { public Message putUserHeaders(String key, double value) {
properties.put(key, value); userHeaders.put(key, value);
return this; return this;
} }
@Override @Override
public Message putProperties(final String key, final String value) { public Message putUserHeaders(String key, String value) {
properties.put(key, value); userHeaders.put(key, value);
return this; return this;
} }
......
package io.openmessaging.rocketmq.domain;
public interface RocketMQConstants {
String START_DELIVER_TIME = "__STARTDELIVERTIME";
}
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
package io.openmessaging.rocketmq.domain; package io.openmessaging.rocketmq.domain;
import io.openmessaging.KeyValue; import io.openmessaging.KeyValue;
import io.openmessaging.SendResult; import io.openmessaging.producer.SendResult;
public class SendResultImpl implements SendResult { public class SendResultImpl implements SendResult {
private String messageId; private String messageId;
...@@ -33,7 +33,6 @@ public class SendResultImpl implements SendResult { ...@@ -33,7 +33,6 @@ public class SendResultImpl implements SendResult {
return messageId; return messageId;
} }
@Override
public KeyValue properties() { public KeyValue properties() {
return properties; return properties;
} }
......
...@@ -20,8 +20,7 @@ import io.openmessaging.BytesMessage; ...@@ -20,8 +20,7 @@ import io.openmessaging.BytesMessage;
import io.openmessaging.KeyValue; import io.openmessaging.KeyValue;
import io.openmessaging.Message; import io.openmessaging.Message;
import io.openmessaging.MessageFactory; import io.openmessaging.MessageFactory;
import io.openmessaging.MessageHeader; import io.openmessaging.OMSBuiltinKeys;
import io.openmessaging.PropertyKeys;
import io.openmessaging.ServiceLifecycle; import io.openmessaging.ServiceLifecycle;
import io.openmessaging.exception.OMSMessageFormatException; import io.openmessaging.exception.OMSMessageFormatException;
import io.openmessaging.exception.OMSNotSupportedException; import io.openmessaging.exception.OMSNotSupportedException;
...@@ -53,7 +52,7 @@ abstract class AbstractOMSProducer implements ServiceLifecycle, MessageFactory { ...@@ -53,7 +52,7 @@ abstract class AbstractOMSProducer implements ServiceLifecycle, MessageFactory {
this.rocketmqProducer = new DefaultMQProducer(); this.rocketmqProducer = new DefaultMQProducer();
this.clientConfig = BeanUtils.populate(properties, ClientConfig.class); this.clientConfig = BeanUtils.populate(properties, ClientConfig.class);
String accessPoints = clientConfig.getOmsAccessPoints(); String accessPoints = clientConfig.getAccessPoints();
if (accessPoints == null || accessPoints.isEmpty()) { if (accessPoints == null || accessPoints.isEmpty()) {
throw new OMSRuntimeException("-1", "OMS AccessPoints is null or empty."); throw new OMSRuntimeException("-1", "OMS AccessPoints is null or empty.");
} }
...@@ -61,10 +60,10 @@ abstract class AbstractOMSProducer implements ServiceLifecycle, MessageFactory { ...@@ -61,10 +60,10 @@ abstract class AbstractOMSProducer implements ServiceLifecycle, MessageFactory {
this.rocketmqProducer.setProducerGroup(clientConfig.getRmqProducerGroup()); this.rocketmqProducer.setProducerGroup(clientConfig.getRmqProducerGroup());
String producerId = buildInstanceName(); String producerId = buildInstanceName();
this.rocketmqProducer.setSendMsgTimeout(clientConfig.getOmsOperationTimeout()); this.rocketmqProducer.setSendMsgTimeout(clientConfig.getOperationTimeout());
this.rocketmqProducer.setInstanceName(producerId); this.rocketmqProducer.setInstanceName(producerId);
this.rocketmqProducer.setMaxMessageSize(1024 * 1024 * 4); this.rocketmqProducer.setMaxMessageSize(1024 * 1024 * 4);
properties.put(PropertyKeys.PRODUCER_ID, producerId); properties.put(OMSBuiltinKeys.PRODUCER_ID, producerId);
} }
@Override @Override
...@@ -121,18 +120,10 @@ abstract class AbstractOMSProducer implements ServiceLifecycle, MessageFactory { ...@@ -121,18 +120,10 @@ abstract class AbstractOMSProducer implements ServiceLifecycle, MessageFactory {
} }
@Override @Override
public BytesMessage createBytesMessageToTopic(final String topic, final byte[] body) { public BytesMessage createBytesMessage(String queue, byte[] body) {
BytesMessage bytesMessage = new BytesMessageImpl(); BytesMessage message = new BytesMessageImpl();
bytesMessage.setBody(body); message.setBody(body);
bytesMessage.headers().put(MessageHeader.TOPIC, topic); message.sysHeaders().put(Message.BuiltinKeys.DESTINATION, queue);
return bytesMessage; return message;
}
@Override
public BytesMessage createBytesMessageToQueue(final String queue, final byte[] body) {
BytesMessage bytesMessage = new BytesMessageImpl();
bytesMessage.setBody(body);
bytesMessage.headers().put(MessageHeader.QUEUE, queue);
return bytesMessage;
} }
} }
...@@ -19,12 +19,13 @@ package io.openmessaging.rocketmq.producer; ...@@ -19,12 +19,13 @@ package io.openmessaging.rocketmq.producer;
import io.openmessaging.BytesMessage; import io.openmessaging.BytesMessage;
import io.openmessaging.KeyValue; import io.openmessaging.KeyValue;
import io.openmessaging.Message; import io.openmessaging.Message;
import io.openmessaging.MessageHeader;
import io.openmessaging.Producer;
import io.openmessaging.Promise; import io.openmessaging.Promise;
import io.openmessaging.PropertyKeys;
import io.openmessaging.SendResult;
import io.openmessaging.exception.OMSRuntimeException; import io.openmessaging.exception.OMSRuntimeException;
import io.openmessaging.interceptor.ProducerInterceptor;
import io.openmessaging.producer.BatchMessageSender;
import io.openmessaging.producer.LocalTransactionExecutor;
import io.openmessaging.producer.Producer;
import io.openmessaging.producer.SendResult;
import io.openmessaging.rocketmq.promise.DefaultPromise; import io.openmessaging.rocketmq.promise.DefaultPromise;
import io.openmessaging.rocketmq.utils.OMSUtil; import io.openmessaging.rocketmq.utils.OMSUtil;
import org.apache.rocketmq.client.producer.SendCallback; import org.apache.rocketmq.client.producer.SendCallback;
...@@ -39,7 +40,7 @@ public class ProducerImpl extends AbstractOMSProducer implements Producer { ...@@ -39,7 +40,7 @@ public class ProducerImpl extends AbstractOMSProducer implements Producer {
} }
@Override @Override
public KeyValue properties() { public KeyValue attributes() {
return properties; return properties;
} }
...@@ -50,11 +51,16 @@ public class ProducerImpl extends AbstractOMSProducer implements Producer { ...@@ -50,11 +51,16 @@ public class ProducerImpl extends AbstractOMSProducer implements Producer {
@Override @Override
public SendResult send(final Message message, final KeyValue properties) { public SendResult send(final Message message, final KeyValue properties) {
long timeout = properties.containsKey(PropertyKeys.OPERATION_TIMEOUT) long timeout = properties.containsKey(Message.BuiltinKeys.TIMEOUT)
? properties.getInt(PropertyKeys.OPERATION_TIMEOUT) : this.rocketmqProducer.getSendMsgTimeout(); ? properties.getInt(Message.BuiltinKeys.TIMEOUT) : this.rocketmqProducer.getSendMsgTimeout();
return send(message, timeout); return send(message, timeout);
} }
@Override
public SendResult send(Message message, LocalTransactionExecutor branchExecutor, KeyValue attributes) {
return null;
}
private SendResult send(final Message message, long timeout) { private SendResult send(final Message message, long timeout) {
checkMessageType(message); checkMessageType(message);
org.apache.rocketmq.common.message.Message rmqMessage = msgConvert((BytesMessage) message); org.apache.rocketmq.common.message.Message rmqMessage = msgConvert((BytesMessage) message);
...@@ -64,11 +70,11 @@ public class ProducerImpl extends AbstractOMSProducer implements Producer { ...@@ -64,11 +70,11 @@ public class ProducerImpl extends AbstractOMSProducer implements Producer {
log.error(String.format("Send message to RocketMQ failed, %s", message)); log.error(String.format("Send message to RocketMQ failed, %s", message));
throw new OMSRuntimeException("-1", "Send message to RocketMQ broker failed."); throw new OMSRuntimeException("-1", "Send message to RocketMQ broker failed.");
} }
message.headers().put(MessageHeader.MESSAGE_ID, rmqResult.getMsgId()); message.sysHeaders().put(Message.BuiltinKeys.MESSAGE_ID, rmqResult.getMsgId());
return OMSUtil.sendResultConvert(rmqResult); return OMSUtil.sendResultConvert(rmqResult);
} catch (Exception e) { } catch (Exception e) {
log.error(String.format("Send message to RocketMQ failed, %s", message), e); log.error(String.format("Send message to RocketMQ failed, %s", message), e);
throw checkProducerException(rmqMessage.getTopic(), message.headers().getString(MessageHeader.MESSAGE_ID), e); throw checkProducerException(rmqMessage.getTopic(), message.sysHeaders().getString(Message.BuiltinKeys.MESSAGE_ID), e);
} }
} }
...@@ -79,8 +85,8 @@ public class ProducerImpl extends AbstractOMSProducer implements Producer { ...@@ -79,8 +85,8 @@ public class ProducerImpl extends AbstractOMSProducer implements Producer {
@Override @Override
public Promise<SendResult> sendAsync(final Message message, final KeyValue properties) { public Promise<SendResult> sendAsync(final Message message, final KeyValue properties) {
long timeout = properties.containsKey(PropertyKeys.OPERATION_TIMEOUT) long timeout = properties.containsKey(Message.BuiltinKeys.TIMEOUT)
? properties.getInt(PropertyKeys.OPERATION_TIMEOUT) : this.rocketmqProducer.getSendMsgTimeout(); ? properties.getInt(Message.BuiltinKeys.TIMEOUT) : this.rocketmqProducer.getSendMsgTimeout();
return sendAsync(message, timeout); return sendAsync(message, timeout);
} }
...@@ -92,7 +98,7 @@ public class ProducerImpl extends AbstractOMSProducer implements Producer { ...@@ -92,7 +98,7 @@ public class ProducerImpl extends AbstractOMSProducer implements Producer {
this.rocketmqProducer.send(rmqMessage, new SendCallback() { this.rocketmqProducer.send(rmqMessage, new SendCallback() {
@Override @Override
public void onSuccess(final org.apache.rocketmq.client.producer.SendResult rmqResult) { public void onSuccess(final org.apache.rocketmq.client.producer.SendResult rmqResult) {
message.headers().put(MessageHeader.MESSAGE_ID, rmqResult.getMsgId()); message.sysHeaders().put(Message.BuiltinKeys.MESSAGE_ID, rmqResult.getMsgId());
promise.set(OMSUtil.sendResultConvert(rmqResult)); promise.set(OMSUtil.sendResultConvert(rmqResult));
} }
...@@ -121,4 +127,19 @@ public class ProducerImpl extends AbstractOMSProducer implements Producer { ...@@ -121,4 +127,19 @@ public class ProducerImpl extends AbstractOMSProducer implements Producer {
public void sendOneway(final Message message, final KeyValue properties) { public void sendOneway(final Message message, final KeyValue properties) {
sendOneway(message); sendOneway(message);
} }
@Override
public BatchMessageSender createBatchMessageSender() {
return null;
}
@Override
public void addInterceptor(ProducerInterceptor interceptor) {
}
@Override
public void removeInterceptor(ProducerInterceptor interceptor) {
}
} }
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.openmessaging.rocketmq.producer;
import io.openmessaging.BytesMessage;
import io.openmessaging.KeyValue;
import io.openmessaging.Message;
import io.openmessaging.MessageHeader;
import io.openmessaging.SequenceProducer;
import io.openmessaging.rocketmq.utils.OMSUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import org.apache.rocketmq.client.Validators;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.SendResult;
public class SequenceProducerImpl extends AbstractOMSProducer implements SequenceProducer {
private BlockingQueue<Message> msgCacheQueue;
public SequenceProducerImpl(final KeyValue properties) {
super(properties);
this.msgCacheQueue = new LinkedBlockingQueue<>();
}
@Override
public KeyValue properties() {
return properties;
}
@Override
public void send(final Message message) {
checkMessageType(message);
org.apache.rocketmq.common.message.Message rmqMessage = OMSUtil.msgConvert((BytesMessage) message);
try {
Validators.checkMessage(rmqMessage, this.rocketmqProducer);
} catch (MQClientException e) {
throw checkProducerException(rmqMessage.getTopic(), message.headers().getString(MessageHeader.MESSAGE_ID), e);
}
msgCacheQueue.add(message);
}
@Override
public void send(final Message message, final KeyValue properties) {
send(message);
}
@Override
public synchronized void commit() {
List<Message> messages = new ArrayList<>();
msgCacheQueue.drainTo(messages);
List<org.apache.rocketmq.common.message.Message> rmqMessages = new ArrayList<>();
for (Message message : messages) {
rmqMessages.add(OMSUtil.msgConvert((BytesMessage) message));
}
if (rmqMessages.size() == 0) {
return;
}
try {
SendResult sendResult = this.rocketmqProducer.send(rmqMessages);
String[] msgIdArray = sendResult.getMsgId().split(",");
for (int i = 0; i < messages.size(); i++) {
Message message = messages.get(i);
message.headers().put(MessageHeader.MESSAGE_ID, msgIdArray[i]);
}
} catch (Exception e) {
throw checkProducerException("", "", e);
}
}
@Override
public synchronized void rollback() {
msgCacheQueue.clear();
}
}
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
package io.openmessaging.rocketmq.promise; package io.openmessaging.rocketmq.promise;
import io.openmessaging.Promise; import io.openmessaging.Promise;
import io.openmessaging.PromiseListener; import io.openmessaging.FutureListener;
import io.openmessaging.exception.OMSRuntimeException; import io.openmessaging.exception.OMSRuntimeException;
import org.apache.rocketmq.logging.InternalLogger; import org.apache.rocketmq.logging.InternalLogger;
import org.apache.rocketmq.logging.InternalLoggerFactory; import org.apache.rocketmq.logging.InternalLoggerFactory;
...@@ -33,7 +33,7 @@ public class DefaultPromise<V> implements Promise<V> { ...@@ -33,7 +33,7 @@ public class DefaultPromise<V> implements Promise<V> {
private long timeout; private long timeout;
private long createTime; private long createTime;
private Throwable exception = null; private Throwable exception = null;
private List<PromiseListener<V>> promiseListenerList; private List<FutureListener<V>> promiseListenerList;
public DefaultPromise() { public DefaultPromise() {
createTime = System.currentTimeMillis(); createTime = System.currentTimeMillis();
...@@ -121,7 +121,7 @@ public class DefaultPromise<V> implements Promise<V> { ...@@ -121,7 +121,7 @@ public class DefaultPromise<V> implements Promise<V> {
} }
@Override @Override
public void addListener(final PromiseListener<V> listener) { public void addListener(final FutureListener<V> listener) {
if (listener == null) { if (listener == null) {
throw new NullPointerException("FutureListener is null"); throw new NullPointerException("FutureListener is null");
} }
...@@ -150,7 +150,7 @@ public class DefaultPromise<V> implements Promise<V> { ...@@ -150,7 +150,7 @@ public class DefaultPromise<V> implements Promise<V> {
private void notifyListeners() { private void notifyListeners() {
if (promiseListenerList != null) { if (promiseListenerList != null) {
for (PromiseListener<V> listener : promiseListenerList) { for (FutureListener<V> listener : promiseListenerList) {
notifyListener(listener); notifyListener(listener);
} }
} }
...@@ -199,12 +199,9 @@ public class DefaultPromise<V> implements Promise<V> { ...@@ -199,12 +199,9 @@ public class DefaultPromise<V> implements Promise<V> {
return true; return true;
} }
private void notifyListener(final PromiseListener<V> listener) { private void notifyListener(final FutureListener<V> listener) {
try { try {
if (exception != null) listener.operationComplete(this);
listener.operationFailed(this);
else
listener.operationCompleted(this);
} catch (Throwable t) { } catch (Throwable t) {
LOG.error("notifyListener {} Error:{}", listener.getClass().getSimpleName(), t); LOG.error("notifyListener {} Error:{}", listener.getClass().getSimpleName(), t);
} }
......
...@@ -164,7 +164,7 @@ public final class BeanUtils { ...@@ -164,7 +164,7 @@ public final class BeanUtils {
final Set<String> keySet = properties.keySet(); final Set<String> keySet = properties.keySet();
for (String key : keySet) { for (String key : keySet) {
String[] keyGroup = key.split("\\."); String[] keyGroup = key.split("[\\._]");
for (int i = 0; i < keyGroup.length; i++) { for (int i = 0; i < keyGroup.length; i++) {
keyGroup[i] = keyGroup[i].toLowerCase(); keyGroup[i] = keyGroup[i].toLowerCase();
keyGroup[i] = StringUtils.capitalize(keyGroup[i]); keyGroup[i] = StringUtils.capitalize(keyGroup[i]);
......
...@@ -18,11 +18,11 @@ package io.openmessaging.rocketmq.utils; ...@@ -18,11 +18,11 @@ package io.openmessaging.rocketmq.utils;
import io.openmessaging.BytesMessage; import io.openmessaging.BytesMessage;
import io.openmessaging.KeyValue; import io.openmessaging.KeyValue;
import io.openmessaging.MessageHeader; import io.openmessaging.Message.BuiltinKeys;
import io.openmessaging.OMS; import io.openmessaging.OMS;
import io.openmessaging.SendResult; import io.openmessaging.producer.SendResult;
import io.openmessaging.rocketmq.domain.BytesMessageImpl; import io.openmessaging.rocketmq.domain.BytesMessageImpl;
import io.openmessaging.rocketmq.domain.NonStandardKeys; import io.openmessaging.rocketmq.domain.RocketMQConstants;
import io.openmessaging.rocketmq.domain.SendResultImpl; import io.openmessaging.rocketmq.domain.SendResultImpl;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.Iterator; import java.util.Iterator;
...@@ -48,25 +48,26 @@ public class OMSUtil { ...@@ -48,25 +48,26 @@ public class OMSUtil {
org.apache.rocketmq.common.message.Message rmqMessage = new org.apache.rocketmq.common.message.Message(); org.apache.rocketmq.common.message.Message rmqMessage = new org.apache.rocketmq.common.message.Message();
rmqMessage.setBody(omsMessage.getBody()); rmqMessage.setBody(omsMessage.getBody());
KeyValue headers = omsMessage.headers(); KeyValue sysHeaders = omsMessage.sysHeaders();
KeyValue properties = omsMessage.properties(); KeyValue userHeaders = omsMessage.userHeaders();
//All destinations in RocketMQ use Topic //All destinations in RocketMQ use Topic
if (headers.containsKey(MessageHeader.TOPIC)) { rmqMessage.setTopic(sysHeaders.getString(BuiltinKeys.DESTINATION));
rmqMessage.setTopic(headers.getString(MessageHeader.TOPIC));
rmqMessage.putUserProperty(NonStandardKeys.MESSAGE_DESTINATION, "TOPIC"); if (sysHeaders.containsKey(BuiltinKeys.START_TIME)) {
} else { long deliverTime = sysHeaders.getLong(BuiltinKeys.START_TIME, 0);
rmqMessage.setTopic(headers.getString(MessageHeader.QUEUE)); if (deliverTime > 0) {
rmqMessage.putUserProperty(NonStandardKeys.MESSAGE_DESTINATION, "QUEUE"); rmqMessage.putUserProperty(RocketMQConstants.START_DELIVER_TIME, String.valueOf(deliverTime));
}
} }
for (String key : properties.keySet()) { for (String key : userHeaders.keySet()) {
MessageAccessor.putProperty(rmqMessage, key, properties.getString(key)); MessageAccessor.putProperty(rmqMessage, key, userHeaders.getString(key));
} }
//Headers has a high priority //System headers has a high priority
for (String key : headers.keySet()) { for (String key : sysHeaders.keySet()) {
MessageAccessor.putProperty(rmqMessage, key, headers.getString(key)); MessageAccessor.putProperty(rmqMessage, key, sysHeaders.getString(key));
} }
return rmqMessage; return rmqMessage;
...@@ -76,8 +77,8 @@ public class OMSUtil { ...@@ -76,8 +77,8 @@ public class OMSUtil {
BytesMessage omsMsg = new BytesMessageImpl(); BytesMessage omsMsg = new BytesMessageImpl();
omsMsg.setBody(rmqMsg.getBody()); omsMsg.setBody(rmqMsg.getBody());
KeyValue headers = omsMsg.headers(); KeyValue headers = omsMsg.sysHeaders();
KeyValue properties = omsMsg.properties(); KeyValue properties = omsMsg.userHeaders();
final Set<Map.Entry<String, String>> entries = rmqMsg.getProperties().entrySet(); final Set<Map.Entry<String, String>> entries = rmqMsg.getProperties().entrySet();
...@@ -89,25 +90,22 @@ public class OMSUtil { ...@@ -89,25 +90,22 @@ public class OMSUtil {
} }
} }
omsMsg.putHeaders(MessageHeader.MESSAGE_ID, rmqMsg.getMsgId()); omsMsg.putSysHeaders(BuiltinKeys.MESSAGE_ID, rmqMsg.getMsgId());
if (!rmqMsg.getProperties().containsKey(NonStandardKeys.MESSAGE_DESTINATION) ||
rmqMsg.getProperties().get(NonStandardKeys.MESSAGE_DESTINATION).equals("TOPIC")) { omsMsg.putSysHeaders(BuiltinKeys.DESTINATION, rmqMsg.getTopic());
omsMsg.putHeaders(MessageHeader.TOPIC, rmqMsg.getTopic());
} else { omsMsg.putSysHeaders(BuiltinKeys.SEARCH_KEYS, rmqMsg.getKeys());
omsMsg.putHeaders(MessageHeader.QUEUE, rmqMsg.getTopic()); omsMsg.putSysHeaders(BuiltinKeys.BORN_HOST, String.valueOf(rmqMsg.getBornHost()));
} omsMsg.putSysHeaders(BuiltinKeys.BORN_TIMESTAMP, rmqMsg.getBornTimestamp());
omsMsg.putHeaders(MessageHeader.SEARCH_KEY, rmqMsg.getKeys()); omsMsg.putSysHeaders(BuiltinKeys.STORE_HOST, String.valueOf(rmqMsg.getStoreHost()));
omsMsg.putHeaders(MessageHeader.BORN_HOST, String.valueOf(rmqMsg.getBornHost())); omsMsg.putSysHeaders(BuiltinKeys.STORE_TIMESTAMP, rmqMsg.getStoreTimestamp());
omsMsg.putHeaders(MessageHeader.BORN_TIMESTAMP, rmqMsg.getBornTimestamp());
omsMsg.putHeaders(MessageHeader.STORE_HOST, String.valueOf(rmqMsg.getStoreHost()));
omsMsg.putHeaders(MessageHeader.STORE_TIMESTAMP, rmqMsg.getStoreTimestamp());
return omsMsg; return omsMsg;
} }
public static boolean isOMSHeader(String value) { public static boolean isOMSHeader(String value) {
for (Field field : MessageHeader.class.getDeclaredFields()) { for (Field field : BuiltinKeys.class.getDeclaredFields()) {
try { try {
if (field.get(MessageHeader.class).equals(value)) { if (field.get(BuiltinKeys.class).equals(value)) {
return true; return true;
} }
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
......
...@@ -18,12 +18,10 @@ package io.openmessaging.rocketmq.consumer; ...@@ -18,12 +18,10 @@ package io.openmessaging.rocketmq.consumer;
import io.openmessaging.BytesMessage; import io.openmessaging.BytesMessage;
import io.openmessaging.Message; import io.openmessaging.Message;
import io.openmessaging.MessageHeader;
import io.openmessaging.MessagingAccessPoint; import io.openmessaging.MessagingAccessPoint;
import io.openmessaging.MessagingAccessPointFactory;
import io.openmessaging.OMS; import io.openmessaging.OMS;
import io.openmessaging.PropertyKeys; import io.openmessaging.OMSBuiltinKeys;
import io.openmessaging.PullConsumer; import io.openmessaging.consumer.PullConsumer;
import io.openmessaging.rocketmq.config.ClientConfig; import io.openmessaging.rocketmq.config.ClientConfig;
import io.openmessaging.rocketmq.domain.NonStandardKeys; import io.openmessaging.rocketmq.domain.NonStandardKeys;
import java.lang.reflect.Field; import java.lang.reflect.Field;
...@@ -50,18 +48,18 @@ public class PullConsumerImplTest { ...@@ -50,18 +48,18 @@ public class PullConsumerImplTest {
@Before @Before
public void init() throws NoSuchFieldException, IllegalAccessException { public void init() throws NoSuchFieldException, IllegalAccessException {
final MessagingAccessPoint messagingAccessPoint = MessagingAccessPointFactory final MessagingAccessPoint messagingAccessPoint = OMS
.getMessagingAccessPoint("openmessaging:rocketmq://IP1:9876,IP2:9876/namespace"); .getMessagingAccessPoint("oms:rocketmq://IP1:9876,IP2:9876/namespace");
consumer = messagingAccessPoint.createPullConsumer(queueName, consumer = messagingAccessPoint.createPullConsumer(OMS.newKeyValue().put(OMSBuiltinKeys.CONSUMER_ID, "TestGroup"));
OMS.newKeyValue().put(NonStandardKeys.CONSUMER_GROUP, "TestGroup")); consumer.attachQueue(queueName);
Field field = PullConsumerImpl.class.getDeclaredField("rocketmqPullConsumer"); Field field = PullConsumerImpl.class.getDeclaredField("rocketmqPullConsumer");
field.setAccessible(true); field.setAccessible(true);
field.set(consumer, rocketmqPullConsumer); //Replace field.set(consumer, rocketmqPullConsumer); //Replace
ClientConfig clientConfig = new ClientConfig(); ClientConfig clientConfig = new ClientConfig();
clientConfig.setOmsOperationTimeout(200); clientConfig.setOperationTimeout(200);
localMessageCache = spy(new LocalMessageCache(rocketmqPullConsumer, clientConfig)); localMessageCache = spy(new LocalMessageCache(rocketmqPullConsumer, clientConfig));
field = PullConsumerImpl.class.getDeclaredField("localMessageCache"); field = PullConsumerImpl.class.getDeclaredField("localMessageCache");
...@@ -83,18 +81,18 @@ public class PullConsumerImplTest { ...@@ -83,18 +81,18 @@ public class PullConsumerImplTest {
when(localMessageCache.poll()).thenReturn(consumedMsg); when(localMessageCache.poll()).thenReturn(consumedMsg);
Message message = consumer.poll(); Message message = consumer.receive();
assertThat(message.headers().getString(MessageHeader.MESSAGE_ID)).isEqualTo("NewMsgId"); assertThat(message.sysHeaders().getString(Message.BuiltinKeys.MESSAGE_ID)).isEqualTo("NewMsgId");
assertThat(((BytesMessage) message).getBody()).isEqualTo(testBody); assertThat(((BytesMessage) message).getBody()).isEqualTo(testBody);
} }
@Test @Test
public void testPoll_WithTimeout() { public void testPoll_WithTimeout() {
//There is a default timeout value, @see ClientConfig#omsOperationTimeout. //There is a default timeout value, @see ClientConfig#omsOperationTimeout.
Message message = consumer.poll(); Message message = consumer.receive();
assertThat(message).isNull(); assertThat(message).isNull();
message = consumer.poll(OMS.newKeyValue().put(PropertyKeys.OPERATION_TIMEOUT, 100)); message = consumer.receive(OMS.newKeyValue().put(Message.BuiltinKeys.TIMEOUT, 100));
assertThat(message).isNull(); assertThat(message).isNull();
} }
} }
\ No newline at end of file
...@@ -18,13 +18,11 @@ package io.openmessaging.rocketmq.consumer; ...@@ -18,13 +18,11 @@ package io.openmessaging.rocketmq.consumer;
import io.openmessaging.BytesMessage; import io.openmessaging.BytesMessage;
import io.openmessaging.Message; import io.openmessaging.Message;
import io.openmessaging.MessageHeader; import io.openmessaging.OMSBuiltinKeys;
import io.openmessaging.MessageListener; import io.openmessaging.consumer.MessageListener;
import io.openmessaging.MessagingAccessPoint; import io.openmessaging.MessagingAccessPoint;
import io.openmessaging.MessagingAccessPointFactory;
import io.openmessaging.OMS; import io.openmessaging.OMS;
import io.openmessaging.PushConsumer; import io.openmessaging.consumer.PushConsumer;
import io.openmessaging.ReceivedMessageContext;
import io.openmessaging.rocketmq.domain.NonStandardKeys; import io.openmessaging.rocketmq.domain.NonStandardKeys;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.Collections; import java.util.Collections;
...@@ -49,10 +47,10 @@ public class PushConsumerImplTest { ...@@ -49,10 +47,10 @@ public class PushConsumerImplTest {
@Before @Before
public void init() throws NoSuchFieldException, IllegalAccessException { public void init() throws NoSuchFieldException, IllegalAccessException {
final MessagingAccessPoint messagingAccessPoint = MessagingAccessPointFactory final MessagingAccessPoint messagingAccessPoint = OMS
.getMessagingAccessPoint("openmessaging:rocketmq://IP1:9876,IP2:9876/namespace"); .getMessagingAccessPoint("oms:rocketmq://IP1:9876,IP2:9876/namespace");
consumer = messagingAccessPoint.createPushConsumer( consumer = messagingAccessPoint.createPushConsumer(
OMS.newKeyValue().put(NonStandardKeys.CONSUMER_GROUP, "TestGroup")); OMS.newKeyValue().put(OMSBuiltinKeys.CONSUMER_ID, "TestGroup"));
Field field = PushConsumerImpl.class.getDeclaredField("rocketmqPushConsumer"); Field field = PushConsumerImpl.class.getDeclaredField("rocketmqPushConsumer");
field.setAccessible(true); field.setAccessible(true);
...@@ -75,8 +73,8 @@ public class PushConsumerImplTest { ...@@ -75,8 +73,8 @@ public class PushConsumerImplTest {
consumedMsg.setTopic("HELLO_QUEUE"); consumedMsg.setTopic("HELLO_QUEUE");
consumer.attachQueue("HELLO_QUEUE", new MessageListener() { consumer.attachQueue("HELLO_QUEUE", new MessageListener() {
@Override @Override
public void onMessage(final Message message, final ReceivedMessageContext context) { public void onReceived(Message message, Context context) {
assertThat(message.headers().getString(MessageHeader.MESSAGE_ID)).isEqualTo("NewMsgId"); assertThat(message.sysHeaders().getString(Message.BuiltinKeys.MESSAGE_ID)).isEqualTo("NewMsgId");
assertThat(((BytesMessage) message).getBody()).isEqualTo(testBody); assertThat(((BytesMessage) message).getBody()).isEqualTo(testBody);
context.ack(); context.ack();
} }
......
...@@ -17,9 +17,9 @@ ...@@ -17,9 +17,9 @@
package io.openmessaging.rocketmq.producer; package io.openmessaging.rocketmq.producer;
import io.openmessaging.MessagingAccessPoint; import io.openmessaging.MessagingAccessPoint;
import io.openmessaging.MessagingAccessPointFactory; import io.openmessaging.OMS;
import io.openmessaging.Producer;
import io.openmessaging.exception.OMSRuntimeException; import io.openmessaging.exception.OMSRuntimeException;
import io.openmessaging.producer.Producer;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import org.apache.rocketmq.client.exception.MQBrokerException; import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.client.exception.MQClientException;
...@@ -49,8 +49,8 @@ public class ProducerImplTest { ...@@ -49,8 +49,8 @@ public class ProducerImplTest {
@Before @Before
public void init() throws NoSuchFieldException, IllegalAccessException { public void init() throws NoSuchFieldException, IllegalAccessException {
final MessagingAccessPoint messagingAccessPoint = MessagingAccessPointFactory final MessagingAccessPoint messagingAccessPoint = OMS
.getMessagingAccessPoint("openmessaging:rocketmq://IP1:9876,IP2:9876/namespace"); .getMessagingAccessPoint("oms:rocketmq://IP1:9876,IP2:9876/namespace");
producer = messagingAccessPoint.createProducer(); producer = messagingAccessPoint.createProducer();
Field field = AbstractOMSProducer.class.getDeclaredField("rocketmqProducer"); Field field = AbstractOMSProducer.class.getDeclaredField("rocketmqProducer");
...@@ -67,8 +67,8 @@ public class ProducerImplTest { ...@@ -67,8 +67,8 @@ public class ProducerImplTest {
sendResult.setMsgId("TestMsgID"); sendResult.setMsgId("TestMsgID");
sendResult.setSendStatus(SendStatus.SEND_OK); sendResult.setSendStatus(SendStatus.SEND_OK);
when(rocketmqProducer.send(any(Message.class), anyLong())).thenReturn(sendResult); when(rocketmqProducer.send(any(Message.class), anyLong())).thenReturn(sendResult);
io.openmessaging.SendResult omsResult = io.openmessaging.producer.SendResult omsResult =
producer.send(producer.createBytesMessageToTopic("HELLO_TOPIC", new byte[] {'a'})); producer.send(producer.createBytesMessage("HELLO_TOPIC", new byte[] {'a'}));
assertThat(omsResult.messageId()).isEqualTo("TestMsgID"); assertThat(omsResult.messageId()).isEqualTo("TestMsgID");
} }
...@@ -80,7 +80,7 @@ public class ProducerImplTest { ...@@ -80,7 +80,7 @@ public class ProducerImplTest {
when(rocketmqProducer.send(any(Message.class), anyLong())).thenReturn(sendResult); when(rocketmqProducer.send(any(Message.class), anyLong())).thenReturn(sendResult);
try { try {
producer.send(producer.createBytesMessageToTopic("HELLO_TOPIC", new byte[] {'a'})); producer.send(producer.createBytesMessage("HELLO_TOPIC", new byte[] {'a'}));
failBecauseExceptionWasNotThrown(OMSRuntimeException.class); failBecauseExceptionWasNotThrown(OMSRuntimeException.class);
} catch (Exception e) { } catch (Exception e) {
assertThat(e).hasMessageContaining("Send message to RocketMQ broker failed."); assertThat(e).hasMessageContaining("Send message to RocketMQ broker failed.");
...@@ -91,7 +91,7 @@ public class ProducerImplTest { ...@@ -91,7 +91,7 @@ public class ProducerImplTest {
public void testSend_WithException() throws InterruptedException, RemotingException, MQClientException, MQBrokerException { public void testSend_WithException() throws InterruptedException, RemotingException, MQClientException, MQBrokerException {
when(rocketmqProducer.send(any(Message.class), anyLong())).thenThrow(MQClientException.class); when(rocketmqProducer.send(any(Message.class), anyLong())).thenThrow(MQClientException.class);
try { try {
producer.send(producer.createBytesMessageToTopic("HELLO_TOPIC", new byte[] {'a'})); producer.send(producer.createBytesMessage("HELLO_TOPIC", new byte[] {'a'}));
failBecauseExceptionWasNotThrown(OMSRuntimeException.class); failBecauseExceptionWasNotThrown(OMSRuntimeException.class);
} catch (Exception e) { } catch (Exception e) {
assertThat(e).hasMessageContaining("Send message to RocketMQ broker failed."); assertThat(e).hasMessageContaining("Send message to RocketMQ broker failed.");
......
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.openmessaging.rocketmq.producer;
import io.openmessaging.BytesMessage;
import io.openmessaging.MessageHeader;
import io.openmessaging.MessagingAccessPoint;
import io.openmessaging.MessagingAccessPointFactory;
import io.openmessaging.SequenceProducer;
import java.lang.reflect.Field;
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.SendResult;
import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.exception.RemotingException;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentMatchers;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class SequenceProducerImplTest {
private SequenceProducer producer;
@Mock
private DefaultMQProducer rocketmqProducer;
@Before
public void init() throws NoSuchFieldException, IllegalAccessException {
final MessagingAccessPoint messagingAccessPoint = MessagingAccessPointFactory
.getMessagingAccessPoint("openmessaging:rocketmq://IP1:9876,IP2:9876/namespace");
producer = messagingAccessPoint.createSequenceProducer();
Field field = AbstractOMSProducer.class.getDeclaredField("rocketmqProducer");
field.setAccessible(true);
field.set(producer, rocketmqProducer);
messagingAccessPoint.startup();
producer.startup();
}
@Test
public void testSend_WithCommit() throws InterruptedException, RemotingException, MQClientException, MQBrokerException {
SendResult sendResult = new SendResult();
sendResult.setMsgId("TestMsgID");
sendResult.setSendStatus(SendStatus.SEND_OK);
when(rocketmqProducer.send(ArgumentMatchers.<Message>anyList())).thenReturn(sendResult);
when(rocketmqProducer.getMaxMessageSize()).thenReturn(1024);
final BytesMessage message = producer.createBytesMessageToTopic("HELLO_TOPIC", new byte[] {'a'});
producer.send(message);
producer.commit();
assertThat(message.headers().getString(MessageHeader.MESSAGE_ID)).isEqualTo("TestMsgID");
}
@Test
public void testRollback() {
when(rocketmqProducer.getMaxMessageSize()).thenReturn(1024);
final BytesMessage message = producer.createBytesMessageToTopic("HELLO_TOPIC", new byte[] {'a'});
producer.send(message);
producer.rollback();
producer.commit(); //Commit nothing.
assertThat(message.headers().getString(MessageHeader.MESSAGE_ID)).isEqualTo(null);
}
}
\ No newline at end of file
...@@ -16,8 +16,9 @@ ...@@ -16,8 +16,9 @@
*/ */
package io.openmessaging.rocketmq.promise; package io.openmessaging.rocketmq.promise;
import io.openmessaging.Future;
import io.openmessaging.FutureListener;
import io.openmessaging.Promise; import io.openmessaging.Promise;
import io.openmessaging.PromiseListener;
import io.openmessaging.exception.OMSRuntimeException; import io.openmessaging.exception.OMSRuntimeException;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
...@@ -63,14 +64,10 @@ public class DefaultPromiseTest { ...@@ -63,14 +64,10 @@ public class DefaultPromiseTest {
@Test @Test
public void testAddListener() throws Exception { public void testAddListener() throws Exception {
promise.addListener(new PromiseListener<String>() { promise.addListener(new FutureListener<String>() {
@Override @Override
public void operationCompleted(final Promise<String> promise) { public void operationComplete(Future<String> future) {
assertThat(promise.get()).isEqualTo("Done"); assertThat(promise.get()).isEqualTo("Done");
}
@Override
public void operationFailed(final Promise<String> promise) {
} }
}); });
...@@ -80,15 +77,10 @@ public class DefaultPromiseTest { ...@@ -80,15 +77,10 @@ public class DefaultPromiseTest {
@Test @Test
public void testAddListener_ListenerAfterSet() throws Exception { public void testAddListener_ListenerAfterSet() throws Exception {
promise.set("Done"); promise.set("Done");
promise.addListener(new PromiseListener<String>() { promise.addListener(new FutureListener<String>() {
@Override
public void operationCompleted(final Promise<String> promise) {
assertThat(promise.get()).isEqualTo("Done");
}
@Override @Override
public void operationFailed(final Promise<String> promise) { public void operationComplete(Future<String> future) {
assertThat(future.get()).isEqualTo("Done");
} }
}); });
} }
...@@ -97,13 +89,9 @@ public class DefaultPromiseTest { ...@@ -97,13 +89,9 @@ public class DefaultPromiseTest {
public void testAddListener_WithException_ListenerAfterSet() throws Exception { public void testAddListener_WithException_ListenerAfterSet() throws Exception {
final Throwable exception = new OMSRuntimeException("-1", "Test Error"); final Throwable exception = new OMSRuntimeException("-1", "Test Error");
promise.setFailure(exception); promise.setFailure(exception);
promise.addListener(new PromiseListener<String>() { promise.addListener(new FutureListener<String>() {
@Override
public void operationCompleted(final Promise<String> promise) {
}
@Override @Override
public void operationFailed(final Promise<String> promise) { public void operationComplete(Future<String> future) {
assertThat(promise.getThrowable()).isEqualTo(exception); assertThat(promise.getThrowable()).isEqualTo(exception);
} }
}); });
...@@ -112,13 +100,9 @@ public class DefaultPromiseTest { ...@@ -112,13 +100,9 @@ public class DefaultPromiseTest {
@Test @Test
public void testAddListener_WithException() throws Exception { public void testAddListener_WithException() throws Exception {
final Throwable exception = new OMSRuntimeException("-1", "Test Error"); final Throwable exception = new OMSRuntimeException("-1", "Test Error");
promise.addListener(new PromiseListener<String>() { promise.addListener(new FutureListener<String>() {
@Override
public void operationCompleted(final Promise<String> promise) {
}
@Override @Override
public void operationFailed(final Promise<String> promise) { public void operationComplete(Future<String> future) {
assertThat(promise.getThrowable()).isEqualTo(exception); assertThat(promise.getThrowable()).isEqualTo(exception);
} }
}); });
......
...@@ -92,9 +92,9 @@ public class BeanUtilsTest { ...@@ -92,9 +92,9 @@ public class BeanUtilsTest {
@Test @Test
public void testPopulate_ExistObj() { public void testPopulate_ExistObj() {
CustomizedConfig config = new CustomizedConfig(); CustomizedConfig config = new CustomizedConfig();
config.setOmsConsumerId("NewConsumerId"); config.setConsumerId("NewConsumerId");
Assert.assertEquals(config.getOmsConsumerId(), "NewConsumerId"); Assert.assertEquals(config.getConsumerId(), "NewConsumerId");
config = BeanUtils.populate(properties, config); config = BeanUtils.populate(properties, config);
......
...@@ -592,7 +592,7 @@ ...@@ -592,7 +592,7 @@
<dependency> <dependency>
<groupId>io.openmessaging</groupId> <groupId>io.openmessaging</groupId>
<artifactId>openmessaging-api</artifactId> <artifactId>openmessaging-api</artifactId>
<version>0.1.0-alpha</version> <version>0.3.0-alpha-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>log4j</groupId> <groupId>log4j</groupId>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册