RabbitMQ学习

您所在的位置:网站首页 队列排列拼音 RabbitMQ学习

RabbitMQ学习

2023-06-04 18:48| 来源: 网络整理| 查看: 265

一、使用场景 在我们系统中有一个订单催付的场景,我们的客户在天猫下的订单,淘宝会及时将订单推送给我们,如 果在用户设定的时间内未付款那么就会给用户推送一条短信提醒,很简单的一个功能对吧,但是,tmall 商家对我们来说,肯定是要分大客户和小客户的对吧,比如像苹果,小米这样大商家一年起码能给我们创 造很大的利润,所以理应当然,他们的订单必须得到优先处理,而曾经我们的后端系统是使用 redis 来存放的定时轮询,大家都知道 redis 只能用 List 做一个简简单单的消息队列,并不能实现一个优先级的场景,所以订单量大了后采用 RabbitMQ 进行改造和优化,如果发现是大客户的订单给一个相对比较高的优先级, 否则就是默认优先级。

二、如何添加 2.1 控制台页面添加-->优先级队列

2.2 代码添加-->优先级队列

Map params = new HashMap(); params.put("x-max-priority", 10); channel.queueDeclare("hello", true, false, false, params);

2.3 代码添加-->优先级消息

AMQP.BasicProperties properties = new AMQP.BasicProperties().builder().priority(5).build();

2.4 注意事项 要让队列实现优先级,需要确保:

队列需要设置为优先级队列 消息需要设置消息的优先级 队列中需要存储一些消息后,消费者再去消费,这样才有机会对消息在队列里进行排序  

代码:

a. 消息生产者 public class Producer { private static final String QUEUE_NAME="hello"; public static void main(String[] args) throws Exception { try (Channel channel = RabbitMqUtils.getChannel();) { //给消息赋予一个 priority 属性 AMQP.BasicProperties properties = new AMQP.BasicProperties().builder().priority(5).build(); for (int i = 1; i { String receivedMessage = new String(delivery.getBody()); System.out.println("接收到消息:"+receivedMessage); }; channel.basicConsume(QUEUE_NAME,true,deliverCallback,(consumerTag)->{ System.out.println("消费者无法消费消息时调用,如队列被删除"); }); } }



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3