1. 导入依赖
//这里使用的是原生Jar包,也可以使用rocketmq-spring-boot-starterd组件
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.9.1</version>
</dependency>
2. properties文件配置
#rocketmq
rocketmq.name.server.address=服务器地址:9876
3. 写配置文件
public class RocketMQConfig{
@Value("${rocketmq.name.server.address}")
private String nameServerAddr;
@Bean("momentsProducer")//指定Bean的名字
public DefaultMQProducer momentProducer() throws Exception{
//1.创建一个DefaultMQProducer,并设置生产者分组
DefaultMQProducer producer = new DefaultMQProducer("分组名");
//2.设置名称服务器地址
producer.setNamesrvAddr(nameServerAddr);
//3.启动producer
producer.start();
return producer;
}
@Bean("momentsConsumer")
public DefaultMQPushConsumer momentConsumer() throws Exception{
//1.创建一个DefaultMQPushConsumer,并设置消费者分组,分组名与对应生产者分组相同
DefaultMQPushConsumer comsumer = new DefaultMQPushComsumer("分组名");
//2.设置名称服务器地址
comsumer.setNamesrvAddr(nameServerAddr);
//3.设置订阅主题和二级主题
consumer.subscribe("Topic名字","Tag名字");
//4.注册消息监听器,可选择并发消费MessageListenerConcurrently或者顺序消费MessageListenerOrderly
consumer.registerMessageListener(new MessageListenerConcurrently(){
//4.1 重写MessageListenerConcurrently接口中consumerMessage方法,设置消费结果回调函数和处理消息逻辑
@Override
public ConsumeConcurrentlyStatus consumerMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext consumeConcurrentlyContext){
for(MessageExt msg : msgs){
System.out.println(msg);
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
//5.启动consumer
consumer.start();
return consumer;
}
}
4. 写RocketMQUtil用于发送消息
public class RocketMQUtil{
//1.同步发送消息
public static void syncSendMsg(DefaultMQProducer producer, Message msg)throws Exception{
SendResult sendResult = producer.send(msg);
System.out.println(sendResult);
//销毁Producer对象可以节约系统内存,如果需要频繁发送消息,则无需销毁Producer对象。
producer.shutdown();
}
//2.异步发送消息
public static void asyncSendMsg(DefaultMQProducer producer,Message msg) throws Exception{
int messageCount = 2;
for(int i = 0;i < messageCount;i++){
//SendCallback,接受异步返回结果的响应逻辑
producer.send(msg, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.println(sendResult.getMsgId());
}
@Override
public void onException(Throwable e) {
System.out.println("发送消息的时候出现异常" + e);
e.printStackTrace();
}
});
}
producer.shutdown();
}
//3.单向发送消息
public static void oneWaySendMsg(DefaultMQProducer producer,Message msg) throws Exception {
int messageCount = 2;
for(int i = 0;i < messageCount;i++){
producer.sendOneway(msg);
}
producer.shutdown();
}
}
5.使用RocketMQ发送消息
public class UserMomentService{
@Autowired
private static ApplicationContext applicationContext;
public static void main(String[] args) throws Exception {
DefaultMQProducer producer = (DefaultMQProducer) applicationContext.getBean("momentProducer");
Message msg = new Message(UserMomentsConstant.MOMENTS_TOPIC,JSONObject.toJSONString(消息的主体).
getBytes(StandardCharsets.UTF_8));
RocketMQUtil.syncSendMsg(producer,msg);
}
}
总结
生产者发送消息的过程
1.创建生产者producer,设置生产者分组。
(RocketMQ 服务端 5.x 版本开始,生产者是匿名的,无需管理生产者分组ProducerGroup)
2.指定Nameserver地址。
3.启动producer。
4.创建消息对象,指定主题Topic、Tag和消息体。
5.发送消息。
6.关闭生产者producer。
消费者消费消息的过程
1.创建消费者consumer,设置消费者组名。
2.指定Nameserver地址。
3.订阅Topic和Tag。
4.注册消息监听器,设置消费结果回调函数,处理消息。
5.启动消费者consumer。