1.导入依赖坐标
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client-java</artifactId>
<version>5.0.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.32</version>
</dependency>
2.生产者Demo
package com.example.mq;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.apis.ClientConfiguration;
import org.apache.rocketmq.client.apis.ClientServiceProvider;
import org.apache.rocketmq.client.apis.StaticSessionCredentialsProvider;
import org.apache.rocketmq.client.apis.message.Message;
import org.apache.rocketmq.client.apis.producer.Producer;
import org.apache.rocketmq.client.apis.producer.SendReceipt;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class RocketMQProducer{
@Value("${rocketmq.topic}")
private String topic;
@Value("${rocketmq.accessKey}")
private String accessKey;
@Value("${rocketmq.secretKey}")
private String secretKey;
@Value("${rocketmq.proxy}")
private String proxy;
public void sendMessage(Object messageData){
try{
ClientServiceProvider provider = ClientServiceProvider.loadService();
StaticSessionCredentialsProvider sscProvider = new StaticSessionCredentialsProvider(accessKey, secretKey);
ClientConfiguration config = ClientConfiguration.newBuilder()
.setEndpoints(proxy)
.setCredentialProvider(sscProvider)
.build();
Producer producer = provider.newProducerBuilder()
.setClientConfiguration(config)
.build();
Message message = provider.newMessageBuilder()
.setTopic(topic)
.setBody(JSONObject.toJSON(messageData).toString().getBytes())
.build();
SendReceipt sendReceipt = producer.send(message);
log.info("发送消息的结果:{}",sendReceipt.toString());
}catch(Exception e){
log.error("发送消息出现异常:{}",e.toString());
}
}
}
3.消费者Demo
package com.example.mq;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.apis.ClientConfiguration;
import org.apache.rocketmq.client.apis.ClientServiceProvider;
import org.apache.rocketmq.client.apis.StaticSessionCredentialsProvider;
import org.apache.rocketmq.client.apis.consumer.FilterExpression;
import org.apache.rocketmq.client.apis.consumer.FilterExpressionType;
import org.apache.rocketmq.client.apis.consumer.SimpleConsumer;
import org.apache.rocketmq.client.apis.message.MessageView;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.Collections;
import java.util.List;
@Component
@Slf4j
public class RocketMQConsumer implements CommandLineRunner {
@Value("${rocketmq.topic}")
private String topic;
@Value("${rocketmq.accessKey}")
private String accessKey;
@Value("${rocketmq.secretKey}")
private String secretKey;
@Value("${rocketmq.proxy}")
private String proxy;
public void consumerMessage(){
ClientServiceProvider provider = ClientServiceProvider.loadService();
StaticSessionCredentialsProvider sscProvider = new StaticSessionCredentialsProvider(accessKey, secretKey);
ClientConfiguration config = ClientConfiguration.newBuilder()
.setEndpoints(proxy)
.setCredentialProvider(sscProvider)
.build();
try{
String tag = "*";
FilterExpression filterExpression = new FilterExpression(tag, FilterExpressionType.TAG);
SimpleConsumer consumer = provider.newSimpleConsumerBuilder()
.setClientConfiguration(config)
.setConsumerGroup("consumer_group")
.setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression))
.setAwaitDuration(Duration.ofSeconds(30))
.build();
int maxMessageNum = 16;
Duration invisibleDuration = Duration.ofSeconds(30);
do{
List<MessageView> messageViewList = consumer.receive(maxMessageNum, invisibleDuration);
messageViewList.forEach(messageView -> {
try{
consumer.ack(messageView);
log.info("消费的消息属性:{}",messageView);
String messageStr = StandardCharsets.UTF_8.decode(messageView.getBody()).toString();
Object messageData = JSONObject.parseObject(messageStr, Object.class);
log.info("消费的消息内容:{}",messageData.toString());
}catch (Exception e){
log.error("消息消费出现异常:{}",e.toString());
}
});
}while (true);
}catch (Exception e){
log.error("消息消费出现异常:{}",e.toString());
}
}
@Override
public void run(String... args){
Thread rocketMQConsumerThread = new Thread(()->{
this.consumerMessage();
});
rocketMQConsumerThread.setDaemon(true);
rocketMQConsumerThread.start();
}
}