-
docker搭建RabbitMq服务
1.拉取镜像 docker pull rabbitmq:management 2. 运行镜像 docker run -dit --name Myrabbitmq -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 -p 15672:15672 -p 5672:5672 rabbitmq:management
-
Rabbit配置
@Configuration public class RabbitMQConfig { //实现思路是一个交换机器可以绑定一个延时队列和多个普通队列 但是在延时队列生成之后 延时的时间就不可以更改了 除非重新生成 还有就是当前账号下才能看见生成的信息 //延时队列 public static final String delayQueue = "delayQueue"; //正常队列 public static final String normalQueue = "normalQueue"; //交换机 public static final String delayExchange = "delayExchange"; //延时队列路由键 public static final String DELAY_ROUTING_KEY = "delay-routing-key"; //正常队列路由键 public static final String NORMAL_ROUTING_KEY = "normal-routing-key"; //广播队列 public static final String MASSAGE_PRIAVTE_QUEUE = "public_msg_queue"; //广播队列key public static final String MASSAGE_PRIAVTE_KEY = "public_routing_key"; //私信队列 public static final String MASSAGE_PUBLIC_QUEUE = "private_msg_queue"; //私信队列key public static final String MASSAGE_PUBLIC_KEY = "private_routing_key"; //交换机 public static final String MASSAGE_EXCHANGE = "massage_exchange"; @Bean public MessageConverter messageConverter() { return new Jackson2JsonMessageConverter(); } //创建一个延时队列 @Bean public Queue getDelayQueue() { Map args = new HashMap(); /** * 消息生产者==》发送消息给交换机==》交换机通过路由key 把消息发送给延时队列 * 10秒之后,延时队列将消息发送给普通队列 */ args.put("x-dead-letter-exchange", delayExchange);//消息过期之后消息发送给的交换机 args.put("x-dead-letter-routing-key", NORMAL_ROUTING_KEY);//交换机发给指定路由的队列 args.put("x-message-ttl", 10000);//设置消息超时时间 return QueueBuilder.durable(delayQueue).withArguments(args).build(); } //创建交换机 @Bean public Exchange getDelayExchange() { return ExchangeBuilder.directExchange(delayExchange).durable(true).build(); } //延时队列与交换机进行绑定 @Bean public Binding bindDelay() { return BindingBuilder.bind(getDelayQueue()).to(getDelayExchange()).with(DELAY_ROUTING_KEY).noargs(); } //创建普通队列 @Bean public Queue getNormalQueue() { return new Queue(normalQueue); } //普通队列与交换机进行绑定 @Bean public Binding bindNormal() { return BindingBuilder.bind(getNormalQueue()).to(getDelayExchange()).with(NORMAL_ROUTING_KEY).noargs(); } }
-
参数加入死信队列
@Autowired private RabbitTemplate rabbitTemplate; //创建订单 未在规定的时间内进行支付 取消订单 @Transactional public ServerResponse<Map<String,String>>CreateOrder(String userId){ Map<String,String>maps=new HashMap<>(); //发送延时消息 logger.info(String.format("参数:%s", userId)); rabbitTemplate.convertAndSend(RabbitMQConfig.delayExchange, RabbitMQConfig.DELAY_ROUTING_KEY, userId); map.put("params",userId); return ServerResponse.createBySuccess(maps); }
-
死信队列超时接收参数
//监听rabbit死信队列中的参数 @RabbitListener(queues = "normalQueue") public void ReciveDelayMessage(String orderId) { logger.info(String.format("超时的参数:%s", orderId)); }
-
application.properties配置文件 ip 账号 密码 虚拟机
#RabbitMQ spring.rabbitmq.host=ip spring.rabbitmq.port=5672 spring.rabbitmq.username=root spring.rabbitmq.password=123456 spring.rabbitmq.virtual-host=/
springboot整合RabbitMQ的延时队列
最新推荐文章于 2024-09-05 15:58:16 发布
该博客介绍了如何利用Docker拉取并运行RabbitMQ镜像,创建包含延时队列的配置,并展示了如何设置死信队列以处理超时消息。在Spring Boot应用中,配置了RabbitMQ的延时队列、交换机、普通队列以及相关绑定,并提供了发送和接收消息的示例代码。此外,还列出了RabbitMQ连接的application.properties配置参数。
摘要由CSDN通过智能技术生成