rocketMQ应用:
请百度去官网下载即可
dependency
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.8.0</version>
</dependency>
生产者
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//消息发送者
public class ProducerTest {
public static void main(String[] args) {
try {
// 实例化消息生产者Producer
DefaultMQProducer producer = new DefaultMQProducer("producergroup");
// 设置NameServer的地址
producer.setNamesrvAddr("127.0.0.1:9876");
// 启动Producer实例
producer.start();
for (int i = 0; i < 10; i++) {
//构建消息
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map<String, String> map = new HashMap<String, String>();
map.put("F_KEY", "111");
list.add(map);
Message message = new Message("topic", "*", serialize(list));
SendResult sendResult = producer.send(message);
System.out.printf("%s%n", sendResult);
}
// 如果不再发送消息,关闭Producer实例。
producer.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 序列化
*
* @param object
* @return
*/
public static byte[] serialize(Object object) {
ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
byte[] bytes = baos.toByteArray();
return bytes;
} catch (Exception e) {
} finally {
if (oos != null) {
try {
oos.close();
} catch (Exception ex) {
}
}
if (baos != null) {
try {
baos.close();
} catch (Exception ex) {
}
}
}
return null;
}
}
消费者
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 java.util.List;
//消息接收
public class ConsumerTest {
public static void main(String[] args) {
try {
// 实例化消息生产者Producer
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumergroup");
// 设置NameServer的地址
consumer.setNamesrvAddr("127.0.0.1:9876");
//从最开始的位置开始消费
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
// 订阅一个或者多个Topic,以及Tag来过滤需要消费的消息
//和发送者保持一致才能搜到消息
consumer.subscribe("topic", "*");
// 注册回调实现类来处理从broker拉取回来的消息
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext context) {
System.out.printf("%s 成功搜到消息: %s %n", Thread.currentThread().getName(), msgs);
// 标记该消息已经被成功消费
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
// 启动Producer实例
consumer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}