利用第三方做网站永久发布地址,外链群发平台,开发网站网络公司,自建站运营假设在电商系统中有一个订单催付的场景#xff0c;即客户在一段时间内未付款会给用户推送一条短信提醒#xff0c;但是系统中分为大型商家和小型商家。比如像苹果#xff0c;小米这样大商家一年能给我们创造很大的利润#xff0c;所以在订单量大时#xff0c;他们的订单必…假设在电商系统中有一个订单催付的场景即客户在一段时间内未付款会给用户推送一条短信提醒但是系统中分为大型商家和小型商家。比如像苹果小米这样大商家一年能给我们创造很大的利润所以在订单量大时他们的订单必须得到优先处理此时就需要为不同的消息设置不同的优先级此时我们要使用优先级队列。
创建队列和交换机
Configuration
public class RabbitConfig3 {private final String EXCHANGE_NAMEpriority_exchange;private final String QUEUE_NAMEpriority_queue;// 1.创建交换机Bean(EXCHANGE_NAME)public Exchange priorityExchange(){return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();}// 2.创建队列Bean(QUEUE_NAME)public Queue priorityQueue(){return QueueBuilder.durable(QUEUE_NAME)//设置队列的最大优先级最大可以设置到255官网推荐不要超过10,如果设置太高比较浪费资源.maxPriority(10).build();}// 3.将队列绑定到交换机Beanpublic Binding bindPriority(Qualifier(EXCHANGE_NAME) Exchange exchange, Qualifier(QUEUE_NAME) Queue queue){return BindingBuilder.bind(queue).to(exchange).with(my_routing).noargs();}
}
编写生产者
Test
public void testPriority() {for (int i 0; i 10; i) {if (i 5) {// i为5时消息的优先级较高MessageProperties messageProperties new MessageProperties();messageProperties.setPriority(9);Message message new Message((send message... i).getBytes(StandardCharsets.UTF_8), messageProperties);rabbitTemplate.convertAndSend(priority_exchange, my_routing, message);} else {rabbitTemplate.convertAndSend(priority_exchange, my_routing, send message... i);}}
}
编写消费者
Component
public class PriorityConsumer {RabbitListener(queues priority_queue)public void listenMessage(Message message, Channel channel) throws Exception {//获取消息System.out.println(new String(message.getBody()));//手动签收channel.basicAck(message.getMessageProperties().getDeliveryTag(),true);}
}
优先级越高越先被消费