RocketMQ 学习

1、MQ 主要由四个部分组成

  producer  consumer  broker  nameserver

boker为搬运工    nameserver为统一治理服务    producer  consumer不必多说了 一个生产者 一个消费者

package com.jason.mq;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

public class SyncProducer {

public static void main(String[] args) throws Exception {

DefaultMQProducer producer =
new DefaultMQProducer("please_rename_unique_group_name");
producer.setNamesrvAddr("127.0.0.1:9876");
producer.start();

for(int i = 0; i < 100; i++) {
/* Message msg = new Message("TopicTest","TagA",
("Hello RockerMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET));
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);*/

Message message = new Message();
message.setTopic("TopicTest");
message.putUserProperty(i + "", "hello" + i);
message.setBody((i +"**").getBytes(RemotingHelper.DEFAULT_CHARSET));
SendResult sendResult = producer.send(message);
System.out.println(sendResult);
}
producer.shutdown();


}
}


以上是生产者 产生消息 发送到broker


package com.jason.mq;

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.remoting.common.RemotingHelper;

import java.io.UnsupportedEncodingException;
import java.util.List;

public class SyncConsumer {
public static void main(String[] args) throws Exception {

DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_to_unique_group_name");
consumer.setNamesrvAddr("127.0.0.1:9876");
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);

consumer.subscribe("TopicTest", "*");
consumer.registerMessageListener(new MessageListenerConcurrently() {
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {

for (MessageExt msg : list) {
try {
System.out.println("Receive properties: " + msg.getProperties());
System.out.println("Receive body: " + new String(msg.getBody(), RemotingHelper.DEFAULT_CHARSET));

} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}finally {
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
}


return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
}
}

以上为消费者通过push 来进行获取信息

消费者分为 push pull
区别是什么?你们知道么?
push一般用于没有慢消费到情况下(是broker主动push消息过去) pull 一般主动权在消费者哪里(是消费者主动pull信息)
主动push的话,如果消费者消费过慢,那么在broker中会堆积消息过多,所以处理消费快的情况下使用
主动pull的情况下,可以根据具体情况,主动pull自己想要的信息,,这也是它的短板,因为消费方无法准确地决定何时去拉取最新的消息,一直消费,就要一直pull

根据实际情况选择吧。
我个人用push比较多




猜你喜欢

转载自www.cnblogs.com/lzphu/p/12233650.html