package com.alibaba.rocketmq.client;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import org.junit.Test;
import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;
import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import com.alibaba.rocketmq.client.exception.MQClientException;
import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
import com.alibaba.rocketmq.client.producer.SendResult;
import com.alibaba.rocketmq.common.consumer.ConsumeFromWhere;
import com.alibaba.rocketmq.common.message.Message;
import com.alibaba.rocketmq.common.message.MessageExt;
public class TestMultiConsumerProducer {
private static final String TOPIC_TEST = "TopicTest-fundmng";
@Test
public void testProducerConsumer() throws MQClientException, InterruptedException {
System.setProperty("rocketmq.namesrv.domain", "jmenv.tbsite.alipay.net");
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("S_fundmng_demo_producer");
DefaultMQProducer producer = new DefaultMQProducer("P_fundmng_demo_producer");
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
consumer.subscribe(TOPIC_TEST, null);
final AtomicLong lastReceivedMills = new AtomicLong(System.currentTimeMillis());
final AtomicLong consumeTimes = new AtomicLong(0);
consumer.registerMessageListener(new MessageListenerConcurrently() {
public ConsumeConcurrentlyStatus consumeMessage(final List<MessageExt> msgs,
final ConsumeConcurrentlyContext context) {
System.out.println("接收了" + consumeTimes.incrementAndGet() + "条消息!");
lastReceivedMills.set(System.currentTimeMillis());
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
producer.start();
for (int i = 0; i < 100; i++) {
try {
Message msg = new Message(TOPIC_TEST, ("Hello RocketMQ " + i).getBytes());
SendResult sendResult = producer.send(msg);
System.out.println(sendResult);
}
catch (Exception e) {
TimeUnit.SECONDS.sleep(1);
}
}
// wait no messages
while ((System.currentTimeMillis() - lastReceivedMills.get()) < 5000) {
TimeUnit.MILLISECONDS.sleep(200);
}
consumer.shutdown();
producer.shutdown();
}
}