博客地址:朝·闻·道www.wuwenliang.net
本文是《跟我学RocketMQ系列》的第三篇,前面两篇中,我带领大家了解了如何搭建RocketMQ以及如何通过web端的console进行RocketMQ的运维。
从本文开始,我将从研发的角度,逐步深入RocketMQ。
本文先讲解如何利用RocketMQ的java客户端进行普通消息的发送以及对它进行薄封装,以便更好的适配spring框架。
对RocketMQ的封装版本的代码已经上传github,shield-rocketmq-client-spring 欢迎大家star及fork~
通过DefaultMQProducer发送普通消息RocketMQ使用DefaultMQProducer实现普通消息的发送操作。
首先通过构造方法初始化一个生产者组为“PID-TEST”的普通消息生产者。
注意 RocketMQ官方建议,生产者组统一以 PID_ 开头,消费者组统一以 CID_ 开头。
DefaultMQProducer defaultMQProducer =
new DefaultMQProducer("PID_TEST");
设置Nameserver地址
defaultMQProducer.setNamesrvAddr("127.0.0.1:9876");
启动生产者,建立到broker的链接
defaultMQProducer.start();
使用Jackson进行消息实体序列化
ObjectMapper objectMapper = new ObjectMapper();
for (int i = 0; i < 10; i++) {
try {
MessageBean msg = new MessageBean("rocketmq-simple-msg-test",
"SNOWALKER_TEST",
"SNOWALKER_TEST-TAG",
"localhost.localdomain",
"测试消息简单发送------第" + i + "次",
"10",
"simple-msg-test-" + i);
构造消息协议并使用Jackson序列化为JSON字符串
String message = objectMapper.writeValueAsString(msg);
使用官方的Message实体,构造消息体,并设置消息发布的主题名,TAG名,同时需要将要发送的消息体转换为二进制形式。
Message sendMessage = new Message(
msg.getTopicName(),
msg.getTagName(),
message.getBytes());
通过调用defaultMQProducer的send(Message msg, SendCallback sendCallback)方法进行消息发送