rocketmq:
consumer:
consumer-group: TestConsumerGroup
producer:
producer-group: TestProducerGroup
namesrv-addr: 127.0.0.1:9876
@Component
public class ProducerSchedule {
private DefaultMQProducer producer;
@Value("${rocketmq.producer.producer-group}")
private String producerGroup;
@Value("${rocketmq.namesrv-addr}")
private String namesrvAddr;
public ProducerSchedule() {
}
@PostConstruct
public void defaultMQProducer() {
if (this.producer == null) {
this.producer = new DefaultMQProducer(this.producerGroup);
this.producer.setNamesrvAddr(this.namesrvAddr);
}
try {
this.producer.start();
System.out.println("-------producer start");
} catch (MQClientException e) {
e.printStackTrace();
}
}
public String send(String topic, String messageText) throws Exception {
Message message = new Message(topic, messageText.getBytes());
// messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
// 這裏設置4,即30s的延遲
message.setDelayTimeLevel(4);
SendResult result = this.producer.send(message);
System.out.println(result.getMsgId());
System.out.println(result.getSendStatus());
return result.getMsgId();
}
}
@Component
public class ConsumerSchedule implements CommandLineRunner {
@Value("${rocketmq.consumer.consumer-group}")
private String consumerGroup;
@Value("${rocketmq.namesrv-addr}")
private String namesrvAddr;
public void messageListener() throws MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroup);
consumer.setNamesrvAddr(namesrvAddr);
consumer.subscribe("TopicTest", "*");
// 每次消費的消息數
consumer.setConsumeMessageBatchMaxSize(1);
consumer.registerMessageListener((MessageListenerConcurrently) (messages, context) -> {
for (Message message : messages) {
System.out.println("消息:" + new String(message.getBody()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
});
consumer.start();
}
@Override
public void run(String... args) throws Exception {
this.messageListener();
}
}
@Autowired
private ProducerSchedule producerSchedule;
public void pushMessageToMQ() throws Exception {
producerSchedule.send("TopicTest", "test");
}