//异步发送
public class AsyncProducer {
public static void main(
String[] args) throws MQClientException, InterruptedException, UnsupportedEncodingException {
//生产者实例化
DefaultMQProducer producer = new DefaultMQProducer("async");
//指定rocket服务器地址
producer.setNamesrvAddr("localhost:9876");
//启动实例
producer.start();
//发送异步失败时的重试次数(这里不重试)
producer.setRetryTimesWhenSendAsyncFailed(0);
int messageCount = 10;
final CountDownLatch countDownLatch = new CountDownLatch(messageCount);
for (int i = 0; i < messageCount; i++) {
try {
final int index = i;
Message msg = new Message("TopicTest",
"TagC",
"OrderID"+index,
("Hello world "+index).getBytes(RemotingHelper.DEFAULT_CHARSET));
//生产者异步发送
producer.send(msg, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
countDownLatch.countDown();
System.out.printf("%-10d OK %s %n", index, new String(msg.getBody()));
}
@Override
public void onException(Throwable e) {
countDownLatch.countDown();
System.out.printf("%-10d Exception %s %n", index, e);
e.printStackTrace();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
//Thread.sleep(1000);
countDownLatch.await(5, TimeUnit.SECONDS);
producer.shutdown();
}
}
*单向发送
*/
public class OnewayProducer {
public static void main(String[] args) throws Exception{
//生产者实例化
DefaultMQProducer producer = new DefaultMQProducer("oneway");
//指定rocket服务器地址
//producer.setNamesrvAddr("localhost:9876");
producer.setNamesrvAddr("localhost:9876");
//启动实例
producer.start();
for (int i = 0; i < 10; i++) {
//创建一个消息实例,指定topic、tag和消息体
Message msg = new Message("TopicTest" /* Topic */,
"TagA" /* Tag */,
("Hello RocketMQ " +
i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
);
//发送消息
producer.sendOneway(msg);
System.out.printf("%s%n", new String(msg.getBody()));
}
//生产者实例不再使用时关闭.
producer.shutdown();
}
}
* 消费者-拉模式
*/
public class PullConsumer {
private static final Map<MessageQueue, Long> OFFSE_TABLE = new HashMap<MessageQueue, Long>();
public static void main(String[] args) throws MQClientException {
DefaultMQPullConsumer consumer = new DefaultMQPullConsumer("pullconsumer");
consumer.setNamesrvAddr("localhost:9876");
//consumer.setBrokerSuspendMaxTimeMillis(1000);
System.out.println("ms:"+consumer.getBrokerSuspendMaxTimeMillis());
consumer.start();
//1.获取MessageQueues并遍历(一个Topic包括多个MessageQueue)
Set<MessageQueue> mqs = consumer.fetchSubscribeMessageQueues("TopicTest");
for (MessageQueue mq : mqs) {
System.out.println("queueID:"+ mq.getQueueId());
//获取偏移量
long Offset = consumer.fetchConsumeOffset(mq,true);
System.out.printf("Consume from the queue: %s%n", mq);
SINGLE_MQ:
while (true) {
try {
PullResult pullResult =
consumer.pullBlockIfNotFound(mq, null, getMessageQueueOffset(mq), 32);
System.out.printf("%s%n",pullResult);
//2.维护Offsetstore(这里存入一个Map)
putMessageQueueOffset(mq, pullResult.getNextBeginOffset());
//3.根据不同的消息状态做不同的处理
switch (pullResult.getPullStatus()) {
case FOUND: //获取到消息
for (int i=0;i<pullResult.getMsgFoundList().size();i++) {
System.out.printf("%s%n", new String(pullResult.getMsgFoundList().get(i).getBody()));
}
break;
case NO_MATCHED_MSG: //没有匹配的消息
break;
case NO_NEW_MSG: //没有新消息
break SINGLE_MQ;
case OFFSET_ILLEGAL: //非法偏移量
break;
default:
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
consumer.shutdown();
}
private static long getMessageQueueOffset(MessageQueue mq) {
Long offset = OFFSE_TABLE.get(mq);
if (offset != null)
return offset;
return 0;
}
private static void putMessageQueueOffset(MessageQueue mq, long offset) {
OFFSE_TABLE.put(mq, offset);
}
}
* 消费者-推模式
*/
public class PushConsumerA {
public static void main(String[] args) throws InterruptedException, MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("group1");
consumer.subscribe("TopicTest", "*");
consumer.setNamesrvAddr("localhost:9876");
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);//每次从最后一次消费的地址
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
System.out.printf("queueID:%d:%s:Messages:%s %n", msgs.get(0).getQueueId(),Thread.currentThread().getName(), new String(msgs.get(0).getBody()));
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
System.out.printf("ConsumerPartOrder Started.%n");
}
}
* 消费者-推模式
*/
public class PushConsumerB {
public static void main(String[] args) throws InterruptedException, MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("group1");
consumer.subscribe("TopicTest", "*");
consumer.setNamesrvAddr("localhost:9876");
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);//每次从最后一次消费的地址
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
System.out.printf("queueID:%d:%s:Messages:%s %n", msgs.get(0).getQueueId(),Thread.currentThread().getName(), new String(msgs.get(0).getBody()));
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
System.out.printf("ConsumerPartOrder Started.%n");
}
}
* 消费者-推模式
*/
public class PushConsumerC {
public static void main(String[] args) throws InterruptedException, MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("group1");
consumer.subscribe("TopicTest", "*");
consumer.setNamesrvAddr("localhost:9876");
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);//每次从最后一次消费的地址
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
System.out.printf("queueID:%d:%s:Messages:%s %n", msgs.get(0).getQueueId(),Thread.currentThread().getName(), new String(msgs.get(0).getBody()));
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
System.out.printf("ConsumerPartOrder Started.%n");
}
}
* 消费者-推模式
*/
public class PushConsumerG2 {
public static void main(String[] args) throws InterruptedException, MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("group2");
consumer.subscribe("TopicTest", "*");
consumer.setNamesrvAddr("localhost:9876");
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);//每次从最后一次消费的地址
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
System.out.printf("queueID:%d:%s:Messages:%s %n", msgs.get(0).getQueueId(),Thread.currentThread().getName(), new String(msgs.get(0).getBody()));
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
System.out.printf("ConsumerPartOrder Started.%n");
}
}
* 同步发送
*/
public class SyncProducer {
public static void main(String[] args) throws Exception {
DefaultMQProducer producer = new DefaultMQProducer("sync");
//producer.setRetryTimesWhenSendFailed(2);
producer.setNamesrvAddr("localhost:9876");
producer.start();
for (int i = 0; i < 10; i++) {
Message msg = new Message("TopicTest" ,
"TagB" ,
("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET)
);
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n%n%n", sendResult.getSendStatus()+":(MsgId):"
+sendResult.getMsgId()+":(queueId):"
+sendResult.getMessageQueue().getQueueId()
+"(value):"+ new String(msg.getBody()));
}
producer.shutdown();
}
}
-----------------------------------------------------------------------------------
* 同步发送--顺序发送
*/
public class ProducerAllOrder {
public static void main(String[] args) throws Exception {
DefaultMQProducer producer = new DefaultMQProducer("AllOrder");
producer.setNamesrvAddr("localhost:9876");
producer.start();
for (int i = 0; i < 10; i++) {
Message msg = new Message("AllOrder" ,
"TagA" ,"KEY" + i,
("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET)
);
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult.getSendStatus()+":"+ new String(msg.getBody()));
}
producer.shutdown();
}
}
* 消费者-推模式
*/
public class ConsumerAllOrder {
public static void main(String[] args) throws InterruptedException, MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("AllOrderGroup");
consumer.subscribe("AllOrder", "*");
consumer.setNamesrvAddr("localhost:9876");
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);//每次从最后一次消费的地址
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
System.out.printf("%s:Messages:%s %n", Thread.currentThread().getName(), new String(msgs.get(0).getBody()));
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
System.out.printf("ConsumerPartOrder Started.%n");
}
}
-----------------------------------------------------------------------------------
* 延时发送
*/
public class TimerProducer {
public static void main(String[] args) throws Exception {
DefaultMQProducer producer = new DefaultMQProducer("sync");
producer.setNamesrvAddr("localhost:9876");
producer.start();
for (int i = 0; i < 10; i++) {
Message msg = new Message("TopicTest" ,
"TagB" ,
("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET)
);
//"1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h" 18个等级
msg.setDelayTimeLevel(5);
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
}
producer.shutdown();
}
}
-----------------------------------------------------------------------------------
// 批处理
public class SimpleBatchProducer {
public static void main(String[] args) throws Exception {
DefaultMQProducer producer = new DefaultMQProducer("BatchProducer");
producer.setNamesrvAddr("localhost:9876");
producer.start();
//如果一次只发送不超过4M的消息,那么批处理很容易使用
//同一批的消息应该有:相同的主题,相同的waitstoremsgok,不支持调度
String topic = "TopicTest";
List<Message> messages = new ArrayList<>();
messages.add(new Message(topic, "Tag", "OrderID001", "Hello world 0".getBytes()));
messages.add(new Message(topic, "Tag", "OrderID002", "Hello world 1".getBytes()));
messages.add(new Message(topic, "Tag", "OrderID003", "Hello world 2".getBytes()));
producer.send(messages);
System.out.printf("Batch over");
producer.shutdown();
}
}