Rocketmq异步发送消息
- 异步消息通常用在对响应时间敏感的业务场景,即发送端不能容忍长时间地等待Broker的响应。
例如:结果执行是否成功的回调
代码如下
生产者发送消息
package com.lazycece.sbac.rocketmq.simple;
import com.lazycece.sbac.rocketmq.message.Message;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.UUID;
/**
* @author hjt
* @date 2021/8/6
*/
@Component
@Slf4j
public class RocketmqProducer {
@Resource
private RocketMQTemplate rocketMQTemplate;
//同步发送
public void sync() {
Message<String> message = new Message<>();
message.setId(UUID.randomUUID().toString());
message.setContent("Hello, springboot-ac-rocketmq !");
rocketMQTemplate.convertAndSend("topic-queue-one:tag1", message);
rocketMQTemplate.convertAndSend("topic-queue-two", "Hello, springboot-ac-rocketmq !");
}
//异步发送
public void async() {
rocketMQTemplate.asyncSend("topic-queue-two", "send async message!", new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
log.info("send successful");
}
@Override
public void onException(Throwable throwable) {
log.info("send fail; {}", throwable.getMessage());
}
});
}
public void oneWay() {
rocketMQTemplate.sendOneWay("topic-queue-two", "send one-way message");
}
}
```消费端消费消息
```java
package com.lazycece.sbac.rocketmq.simple;
import com.lazycece.sbac.rocketmq.message.Message;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;
/**
* @author hjt
* @date 2021/8/6
*/
@Slf4j
@Component
public class RocketmqConsumer {
@Component
@RocketMQMessageListener(topic = "topic-queue-one", consumerGroup = "consumer_topic-queue-one")
public class ConsumerOne implements RocketMQListener<Message> {
@Override
public void onMessage(Message message) {
log.info("consumer-one received message: {}", message);
}
}
@Component
@RocketMQMessageListener(topic = "topic-queue-two", consumerGroup = "consumer_topic-queue-two")
public class ConsumerTwo implements RocketMQListener<String> {
@Override
public void onMessage(String message) {
System.out.println("哈哈哈哈我进来接受异步消息啦");
log.info("consumer-two received message: {}", message);
}
}
}
结果
会等一段时间 消费端才收到消息