- 添加pom依赖
<!-- RocketMQ -->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-common</artifactId>
<version>4.4.0</version>
</dependency>
- 添加applictaion.properties配置
#RocketMQ
#消费者的组名
apache.rocketmq.consumer.PushConsumer=orderConsumer
#生产者的组名
apache.rocketmq.producer.producerGroup=Producer
#NameServer地址
apache.rocketmq.namesrvAddr=192.168.43.242:9876
- 消息生产者
package com.example.demo.jms;
import javax.annotation.PostConstruct;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class RocketMQProducer {@Value("${apache.rocketmq.producer.producerGroup}")
private String producerGroup;
@Value("${apache.rocketmq.namesrvAddr}")
private String namesrvAddr;
private DefaultMQProducer producer;
public DefaultMQProducer getProducer(){
return this.producer;
}
@PostConstruct
public void init(){
producer = new DefaultMQProducer(producerGroup);
producer.setNamesrvAddr(namesrvAddr);
producer.setVipChannelEnabled(false);
try {
producer.start();
} catch (MQClientException e) {
e.printStackTrace();
}
}
}
- 消息消费者
package com.example.demo.jms;
import java.io.UnsupportedEncodingException;
import javax.annotation.PostConstruct;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
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 org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class RocketMQConsumer {@Value("${apache.rocketmq.consumer.PushConsumer}")
private String consumerGroup;
@Value("${apache.rocketmq.namesrvAddr}")
private String namesrvAddr;
@PostConstruct
public void init(){
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroup);
consumer.setNamesrvAddr(namesrvAddr);
try {
consumer.subscribe("testTopic", "*");//CONSUME_FROM_LAST_OFFSET 默认策略,从该队列末尾开始消费,跳过历史消息
//CONSUME_FROM_FIRST_OFFSET 从队列最开始消费,即历史消息(还存在broker的)全部消费一遍
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
consumer.registerMessageListener((MessageListenerConcurrently)(list, context)->{
try {
for(MessageExt messageExt : list){
System.out.println("messageExt:"+messageExt);
String messageBody = new String(messageExt.getBody(),RemotingHelper.DEFAULT_CHARSET);
System.out.println("消费响应:msgid="+messageExt.getMsgId()+",msgbody="+messageBody);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return ConsumeConcurrentlyStatus.RECONSUME_LATER;//稍后再试
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;//消费成功
});
consumer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
- Controller类
package com.example.demo.controller;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import com.example.demo.domain.JsonData;
import com.example.demo.jms.RocketMQProducer;@RestController
@RequestMapping("/rocketmq")
public class RocketMQController {@Autowired
private RocketMQProducer rocketMQProducer;
/**
* 功能描述:RocketMQ发送消息
* @param msg 消息内容
* @param tag 消息二级分类
* @return
* @throws Exception
*/
@RequestMapping("/sendmsg")
public Object sendMsg(String msg, String tag) throws Exception{
//创建消息实例
Message message = new Message("testTopic", tag, msg.getBytes(RemotingHelper.DEFAULT_CHARSET));
//发送消息并接收响应结果
SendResult result = rocketMQProducer.getProducer().send(message);
System.out.println("发送响应:msgid="+result.getMsgId()+",状态="+result.getSendStatus());
return JsonData.buildSuccess();
}
}