安装 rabbitmq 和 延迟队列插件 我就不赘述了。直接上链接。主要讲Spring Cloud中的实现步骤
pom.xml
<!--消息队列-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
bootstrap.yml
spring:
cloud:
rabbitmq:
host: 192.168.1.90
port: 5672
username: guest
password: guest
stream:
function:
definition: myDelayed
bindings:
# 延迟消息
myDelayed-in-0: # 消费者绑定名称,myDelayed是自定义的绑定名称,in代表消费者,0是固定写法
destination: my-delayed-topic # 对应的真实的 RabbitMQ Exchange
myDelayed-out-0: # 生产者绑定名称,myDelayed是自定义的绑定名称,out代表生产者,0是固定写法
destination: my-delayed-topic # 对应的真实的 RabbitMQ Exchange
rabbit:
bindings:
myDelayed-in-0:
consumer:
delayedExchange: true # 开启延迟功能
myDelayed-out-0:
producer:
delayedExchange: true # 开启延迟功能
生产端 延迟5秒
@RestController
@RequestMapping("/test")
@Slf4j
public class TestController {
@Resource
private StreamBridge streamBridge;
@PostMapping("/test1")
public String test1(){
String tt = "延迟队列的消息内容";
streamBridge.send("myDelayed-out-0", MessageBuilder.withPayload(tt)
.setHeader("x-delay", 5 * 1000)
.build());
log.info("发送延迟消息成功");
return "成功";
}
}
消费端
@Configuration
@Slf4j
@EnableRabbit
public class MessageQueueConfig {
// 消费延迟消息
@Bean
public Consumer<String> myDelayed() { // 方法名必须与生产消息时自定义的绑定名称一致
return tt -> {
log.info("接收延迟消息:{}", tt);
};
}
}
控制台 5秒后收到消息