网站建设的流程电子商务,长沙百度关键词排名,网站被挂马原因,上海市建设工程咨询有限公司1、rabbitmq服务端打开延迟插件 #xff08;超过 4294967295毫秒 ≈ 1193 小时 ≈ 49.7 天 这个时间会立即触发#xff09; 注意#xff1a;只有RabbitMQ 3.6.x以上才支持 在下载好之后#xff0c;解压得到.ez结尾的插件包#xff0c;将其复制到RabbitMQ安装目录下的plug…1、rabbitmq服务端打开延迟插件 超过 4294967295毫秒 ≈ 1193 小时 ≈ 49.7 天 这个时间会立即触发 注意只有RabbitMQ 3.6.x以上才支持 在下载好之后解压得到.ez结尾的插件包将其复制到RabbitMQ安装目录下的plugins文件夹。
然后通过命令行启用该插件 rabbitmq-plugins enable rabbitmq_delayed_message_exchange该插件在通过上述命令启用后就可以直接使用不需要重启。
2、添加依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-amqp/artifactId/dependency
3、配置交换机和队列
Configuration
public class DelayedConfig {public static String EXCHANGE_NAME delayed_exchange;public static String QUEUE_NAME delayed_queue;public static String KEY_NAME delayed_key;/*** 基于插件实现的交换机必须是CustomExchange类型标识这是一个延时类型的交换机*/Bean()public CustomExchange delayedExchange(){MapString,Object params new HashMap();params.put(x-delayed-type,direct);//参数1交换机名字参数2交换机的类型参数3是否持久化参数4是否自动删除队列参数5交换机的额外参数设置return new CustomExchange(EXCHANGE_NAME,x-delayed-message,true,false,params);}Bean()public Queue delayedQueue(){return new Queue(QUEUE_NAME);}Beanpublic Binding delayedBinding(){return BindingBuilder.bind(delayedQueue()).to(delayedExchange()).with(KEY_NAME).noargs();}} 4、发送和接收消息
GetMapping(/t5)public void t5(){Date date new Date();System.out.println(发送时间: date.toString());//发送消息rabbitTemplate.convertAndSend(DelayedConfig.EXCHANGE_NAME,DelayedConfig.KEY_NAME,1延迟消息wxm,msg-{msg.getMessageProperties().setHeader(MessageProperties.X_DELAY, 15552000000L);msg.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);return msg;});//发送消息rabbitTemplate.convertAndSend(DelayedConfig.EXCHANGE_NAME,DelayedConfig.KEY_NAME,延迟消息wxm,msg-{msg.getMessageProperties().setDelay(10000);msg.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);return msg;});log.info(发送成功);}RabbitHandlerRabbitListener(queues delayed_queue)public void getDelayed(Message message, Channel channel) throws Exception{Date date new Date();String rightNow date.toString();String msg new String(message.getBody());// 手动应答System.out.println(message.getMessageProperties().getDeliveryTag());channel.basicAck(message.getMessageProperties().getDeliveryTag(), true);System.out.println(接受成功msgrightNow);}