上一篇文章写了docker安装RabbitMQ及延迟插件的安装,这篇的话是基于RabbitMQ延迟插件实现延迟队列的示例

那么废话不多说 直接上代码!!

首先创建延迟队列配置类 DelayedQueueConfig

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.CustomExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class DelayedQueueConfig {
//交换机
public static final String DELAYED_EXCHANGE_NAME = "delayed.exchange";
//队列
public static final String DELAYED_QUEUE_NAME = "delayed.queue";
//routingkey
public static final String DELAYED_ROUTING_KEY = "delayed.routingkey";
//声明交换机
@Bean
public CustomExchange delayedExchange() {
Map<String, Object> arguments = new HashMap<>();
//设置延迟交换机为直接类型
arguments.put("x-delayed-type", "direct");
/**
* 参数说明
* 1.交换机名字
* 2.交换机类型
* 3.是否持久化
* 4.是否自动删除
* 5.其他参数
*/
return new CustomExchange(DELAYED_EXCHANGE_NAME, "x-delayed-message", true, false, arguments);
}
//声明队列
@Bean
public Queue delayedQueue() {
return new Queue(DELAYED_QUEUE_NAME);
}
//绑定
@Bean
public Binding delayedQueueBindingdelayedExchange(
@Qualifier("delayedQueue") Queue delayedQueue,
@Qualifier("delayedExchange") CustomExchange delayedExchange) {
return BindingBuilder.bind(delayedQueue).to(delayedExchange).with(DELAYED_ROUTING_KEY).noargs();
}
}

接着编写生产者代码

   //基于插件发送延迟消息
@GetMapping("/senddelayedMsg/{message}/{delayedTime}")
public void sendMsg(@PathVariable String message, @PathVariable Integer delayedTime) {
log.info("当前时间:{},发送一条时长{}毫秒给延迟队列delayed.queue:{}", new Date().toString(), delayedTime, message);
/**
* convertAndSend 方法参数说明
* 1.交换机名称
* 2.routingkey
* 3.发送的消息
* 4.发送完消息后的回调
*/
rabbitTemplate.convertAndSend(DELAYED_EXCHANGE_NAME, DELAYED_ROUTING_KEY, message, msg -> {
msg.getMessageProperties().setDelay(delayedTime);
return msg;
});
}

最后编写消费者代码

import com.zfd.config.DelayedQueueConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.util.Date;
@Slf4j
@Component
public class DelayedqueueConsumer {
@RabbitListener(queues = DelayedQueueConfig.DELAYED_QUEUE_NAME)
public void receiveDelayQueue(Message message) {
String msg = new String(message.getBody());
log.info("当前时间:{},收到延迟队列的消息:{}", new Date().toString(), msg);
}
}

接着运行程序 发送请求

到这里我们基于插件实现RabbitMQ延迟队列就写完了!!

最新文章

  1. C语言 独木舟问题
  2. nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element &#39;beans&#39;.
  3. Caffe学习系列(15):计算图片数据的均值
  4. linux包之nc之nc命令
  5. hdu2021(很闲~~)
  6. java service
  7. Node.js权威指南 (5) - 使用Buffer类处理二进制数据
  8. url 的httppost 和http get ,put,delect
  9. win32 清空ListBox所有内容
  10. Egret初体验–躲避类小游戏
  11. JAVA函数的参数传递
  12. Ping pong(树状数组求序列中比某个位置上的数小的数字个数)
  13. Apache日志分析_shell命令行
  14. 数组的迭代方法(every、filter、forEach、map、some)
  15. python读取导出数据
  16. jenkins登录后页面显示为空的问题
  17. mecacheq的配置
  18. 内存或磁盘空间不足 Microsoft Excel无法再次打开解决方法
  19. BZOJ4517[Scoi2016]美味——主席树
  20. j2ee分布式缓存同步实现方案dlcache

热门文章

  1. 使用 ssm 实现登录日志记录
  2. mybatis 实现分页和过滤模糊查询
  3. [ Shell ] 通过 Shell 脚本导出 GDSII/OASIS 文件
  4. spring-xml实现aop-通知的种类
  5. NodeJs学习日报day7——简单中间件
  6. OA办公软件篇(二)—权限管理
  7. 原生 js 重点案例 [tab栏切换]
  8. 用 GraphScope 像 NetworkX 一样做图分析
  9. 攻防世界-MISC:stegano
  10. Linux常用命令格式