延迟队列:简单说就是发送出去的消息经过给定的时间后,消费者才能看见消息(消费消息)。
这里简单说下步骤:
创建一个队列,如:bs-queue, 设置死信交换机(死信交换机路由key(这是可选的))及队列,如:dead-exchange; 消息的消费端监听该dead-queue队列。设置消息有效期参数x-message-ttl参数(值为自己需要延迟的时间,单位:毫秒)。发送消息发送到bs-queue上。由于消息消费端监听的是死信队列,所以只需要等待指定的时间后消息会自动被转发到死信队列上(dead-queue)。消息的消费端监听dead-queu队列即可。优先级队列优先级队列是在RabbitMQ3.5.0之后的版本才支持的。
(相关资料图)
具有高优先级的队列具有高的优先权,优先级高的消息具备优先被消费的特权。
队列的优先级通过x-max-priority参数设置。
建立一个priority-exchange交换机,类型:direct。
图片
建立一个priority-queue队列,并与priority-exchange绑定。
图片
设置x-max-priority参数的值为100,表示最大优先级为100。
注意:x-max-priority参数的值应该介于1到255。建议使用1到10之间的队列。如果设置的优先级更大将使用更多的Erlang进程消耗更多的CPU资源。运行时调度也会受到影响。
接下来演示优先级队列
我们先只发送消息,然后再把消息的消费功能打开。
发送消息接口:
@GetMapping("/sendPriority")public Object sendPriority(String msg, Integer priority) { ms.sendPriorityQueue(msg, priority) ; return "success" ;}public void sendPriorityQueue(String msg, Integer priority) { logger.info("准备发送消息:{}", msg); Message message = MessageBuilder.withBody(msg.getBytes()).setPriority(priority).build() ; rabbitTemplate.convertAndSend("priority-exchange", "pe.msg", message) ;}发送4条消息:
// 第一条消息msg=第一条消息&priority=2 // 第二条消息msg=第二条消息&priority=10// 第三条消息msg=第三条消息&priority=1// 第四条消息msg=第四条消息&priority=7查看消息队列:
图片
消息消费端:
@RabbitListener(queues = { "priority-queue" })@RabbitHandlerpublic void listenerPriority(Message message, Channel channel) { System.out.println("接受到消息.....income"); byte[] body = message.getBody(); MessageProperties mps = message.getMessageProperties(); String content = new String(body, Charset.forName("UTF-8")); try { System.out.println("接受到消息来自交换机: 【" + mps.getReceivedExchange() + "】, 队列:【" + mps.getConsumerQueue()+ "】:\n内容: " + content); channel.basicAck(message.getMessageProperties().getDeliveryTag(), true); } catch (Exception e) { e.printStackTrace(); try { channel.basicReject(mps.getDeliveryTag(), false); } catch (IOException e1) { e1.printStackTrace() ; } }}启动服务
图片
根据打印出的结果,正好是我们设置优先级的顺序输出。
上面设置的消息优先级都是在指定的范围<100,如果消息的优先级超过这个值会怎么样呢?
发送8条消息:
// 第一条消息msg=第一条消息&priority=2 // 第二条消息msg=第二条消息&priority=10// 第三条消息msg=第三条消息&priority=1// 第四条消息msg=第四条消息&priority=7// 第五条消息msg=第五条消息&priority=101消费消息:
图片
同样是按照顺序输出的。
关键词:
“村网共建”开启精河县电力便民服务新模式 8月4日,“村网共建”电力便民服务合作签约仪式在茫
亚太财险副总裁桑萍此前跳槽频繁 起码去过5个单位 近日,据天眼查网站显示,民生信托所持的亚太财险20%股份被冻结,冻结
农牧融合发展 盐碱地变了样 因地制宜发展特色农业,让盐碱地变了大模样。
几经波折《Dark and Darker》终于进入抢先体验 IronmaceGames开发的奇幻类塔科夫游戏《DarkandDarker》在经历了一段时
基金调研丨兴证全球任相栋调研宏发股份 近日,宏发股份被机构调研,兴证全球任相栋现身。近半年数据显示,任相
日政府一意孤行强推核污染水排海 福岛灾民返乡遥遥无期 距离2011年福岛核事故发生已经过去12年了,但遭到核辐射污染地区的居民
苏丹一法院向快速支援部队领导人达加洛发出逮捕令 苏丹一法院向快速支援部队领导人达加洛发出逮捕令