使用avro序列化生产者示例:
</pre><pre name="code" class="html">import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.apache.avro.Schema;
import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericDatumWriter;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.io.Encoder;
import org.apache.avro.io.EncoderFactory;
import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
import com.alibaba.rocketmq.client.producer.SendResult;
import com.alibaba.rocketmq.common.message.Message;
public class RocketMQProducerAvro {
public static void main(String[] args) throws Exception {
Schema schema = new Schema.Parser().parse("{\"type\": \"record\", \"name\": \"Test\", \"fields\" : [{\"name\": \"col1\", \"type\": \"int\"}, {\"name\": \"col2\", \"type\": \"long\"}]}");
GenericRecord record = new GenericData.Record(schema);
record.put("col1", 6);
record.put("col2", 7L);
DatumWriter<GenericRecord> writer = new GenericDatumWriter<>(schema);
ByteArrayOutputStream out = new ByteArrayOutputStream();
Encoder encoder = EncoderFactory.get().binaryEncoder(out, null);
writer.write(record, encoder);//将record写到out中
encoder.flush();//结束本次序列化操作
DefaultMQProducer producer = new DefaultMQProducer("Producer");
producer.setNamesrvAddr("172.16.8.204:9876");
try {
producer.start();
for (int i = 0; i < 100; i++) {
Message msg = new Message("TopicTest2", "push", (i + 1) + "", out.toByteArray());
SendResult result = producer.send(msg);
System.out.println("id:" + result.getMsgId() + " result:" + result.getSendStatus());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
producer.shutdown();
}
}
使用avro范序列化消费者示例
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.avro.Schema;
import org.apache.avro.generic.GenericArray;
import org.apache.avro.generic.GenericDatumReader;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumReader;
import org.apache.avro.io.Decoder;
import org.apache.avro.io.DecoderFactory;
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.common.consumer.ConsumeFromWhere;
import com.alibaba.rocketmq.common.message.Message;
import com.alibaba.rocketmq.common.message.MessageExt;
public class ConsumerAvro {
private transient static DatumReader reader;
public static void main(String[] args) {
if (reader == null) {
Schema schema = new Schema.Parser()
.parse("{\"type\": \"record\", \"name\": \"Test\", \"fields\" : [{\"name\": \"col1\", \"type\": \"int\"}, {\"name\": \"col2\", \"type\": \"long\"}]}");
reader = new GenericDatumReader<GenericRecord>(schema);
}
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(
"PushConsumer");
consumer.setNamesrvAddr("172.16.8.103:9876");
try {
// 订阅TopicTest2下Tag为*的消息
consumer.subscribe("TopicTest2", "*");
// 程序第一次启动从消息队列头取数据
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
consumer.registerMessageListener(new MessageListenerConcurrently() {
public ConsumeConcurrentlyStatus consumeMessage(
List<MessageExt> list,
ConsumeConcurrentlyContext Context) {
Message msg = list.get(0);
System.out.println("=======");
System.out.println(msg.toString());
Decoder decoder = DecoderFactory.get().binaryDecoder(
msg.getBody(), null);
try {
GenericRecord record = (GenericRecord) reader.read(
null, decoder);
System.out.println(record.get(0));
System.out.println(record.get(1));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
不反序列消费者示例:
import java.util.List;
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.common.consumer.ConsumeFromWhere;
import com.alibaba.rocketmq.common.message.Message;
import com.alibaba.rocketmq.common.message.MessageExt;
public class Consumer {
public static void main(String[] args) {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(
"PushConsumer");
consumer.setNamesrvAddr("172.16.8.103:9876");
try {
// 订阅TopicTest2下Tag为*的消息
consumer.subscribe("TopicTest2", "*");
// 程序第一次启动从消息队列头取数据
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
consumer.registerMessageListener(new MessageListenerConcurrently() {
public ConsumeConcurrentlyStatus consumeMessage(
List<MessageExt> list,
ConsumeConcurrentlyContext Context) {
Message msg = list.get(0);
System.out.println("=======");
System.out.println(msg.toString());
System.out.println(new String(msg.getBody()));
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}