一、创建一个springboot 项目
二、添加依赖
添加RocketMq依赖,根据需要选择对应的版本
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
三、添加配置文件
rocketmq: consumer: one: name-server: 127.0.0.1:9876 topic: topic_one consumer-group:group_one access-key: accesskey secret-key: secretkey two: name-server: 10.104.215.132:9876 topic: topic_two consumer-group: group_two
四、添加配置类及消息监听
Acl认证工具类
package com.tswdya.utils;
import org.apache.rocketmq.acl.common.AclClientRPCHook;
import org.apache.rocketmq.acl.common.SessionCredentials;
/**
* @author taoshiwei
*/
public class AclClientRpcHookUtil {
private static volatile AclClientRPCHook rpcHook = null;
public static AclClientRPCHook getRpcHook(String accessKey,String secretKey){
if (null == rpcHook) {
synchronized (AclClientRPCHook.class){
if (null == rpcHook) {
rpcHook = new AclClientRPCHook(new SessionCredentials(accessKey, secretKey));
}
}
}
return rpcHook;
}
}
RocketMqConfig配置类
package com.tswdya.config;
import com.tswdya.utils.AclClientRpcHookUtil;
import lombok.extern.slf4j.Slf4j;
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.client.consumer.rebalance.AllocateMessageQueueAveragely;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.List;
/**
* @author taoshiwei
*/
@Configuration
@Slf4j
public class RocketMqConfig {
@Value("${rocketmq.consumer.one.name-server}")
private String nameServerOne;
@Value("${rocketmq.consumer.one.topic}")
private String topicOne;
@Value("${rocketmq.consumer.one.consumer-group}")
private String consumerGroupOne;
@Value("${rocketmq.consumer.one.access-key}")
private String accessKey;
@Value("${rocketmq.consumer.one.secret-key}")
private String secretKey;
@Value("${rocketmq.consumer.two.name-server}")
private String nameServerTwo;
@Value("${rocketmq.consumer.two.topic}")
private String topicTwo;
@Value("${rocketmq.consumer.two.consumer-group}")
private String consumerGroupTwo;
@Bean(name = "consumer1",initMethod = "start", destroyMethod = "shutdown")
public DefaultMQPushConsumer consumer1() throws MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroupOne, AclClientRpcHookUtil.getRpcHook(accessKey, secretKey), new AllocateMessageQueueAveragely());
consumer.setNamesrvAddr(nameServerOne);
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
consumer.subscribe(topicOne, "*");
consumer.setInstanceName("consumer1-instance");
consumer.registerMessageListener(new MessageListenerConcurrently(){
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
log.info(Thread.currentThread().getName()
+ "consumer1 Receive New Messages: {}" + list);
for (MessageExt msg : list) {
// 业务实现
log.info("consumer1 消费消息:{}" ,new String(msg.getBody()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
log.info("consumer1 started");
return consumer;
}
@Bean(name = "consumer2",initMethod = "start", destroyMethod = "shutdown")
public DefaultMQPushConsumer consumer2() throws MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroupTwo);
consumer.setNamesrvAddr(nameServerTwo);
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
consumer.subscribe(topicTwo, "*");
consumer.setInstanceName("consumer2-instance");
consumer.registerMessageListener(new MessageListenerConcurrently(){
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
log.info(Thread.currentThread().getName()
+ "consumer2 Receive New Messages: {}" + list);
for (MessageExt msg : list) {
// 业务实现
log.info("consumer2 消费消息:{}" ,new String(msg.getBody()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
log.info("consumer2 started");
// 设置消息监听器等其他配置...
return consumer;
}
}