消息中间件
今天你敲代码了吗?
学如逆水行舟,不进则退
展开
-
订单一个时间段没有支付,需要对订单进行操作
场景:例如在美团点外卖,当长时间没有支付,订单会自动关闭;医院挂号,达到一个时间段没有支付,订单需要关闭,同时还需要取消锁号(取消号源,防止占坑不拉屎);抢火车票,没有支付,订单取消,座位释放等 方式1:延迟队列(DelayQueue) 我们的第一反应是用 数据库轮序+任务调度 来实现此功能。但这种高效率的延迟任务用任务调度(定时器)实现就得不偿失。而且对系统也是一种压力且数据库消...原创 2019-10-14 11:24:37 · 798 阅读 · 0 评论 -
消息重试机制幂等性
如何合适选择重试机制 情况1: 消费者获取到消息后,调用第三方接口,但接口暂时无法访问,是否需要重试? 需要重试 情况2: 消费者获取到消息后,抛出数据转换异常,是否需要重试? 不需要重试 总结:对于情况2,如果消费者代码抛出异常是需要发布新版本才能解决的问题,那么不需要重试,重试也无济于事。应该采用日志...原创 2019-10-14 09:25:02 · 594 阅读 · 0 评论 -
RabbitMQ的介绍和安装
官网文档:https://www.rabbitmq.com/getstarted.html 参考文档:https://blog.csdn.net/hellozpc/article/details/81436980 简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,Erlan...原创 2019-10-02 11:09:43 · 217 阅读 · 0 评论 -
rabbitMq-点对点(简单)的队列
简介 对于rabbitMq的各个参数见:https://blog.csdn.net/vbirdbest/article/details/78670550 功能:一个生产者P发送消息到队列Q,一个消费者C接收 其中:P表示为生产者 、C表示为消费者 红色表示队列。 代码 使用amqp-client 依赖...原创 2019-10-02 15:07:31 · 545 阅读 · 0 评论 -
rabbitMq-工作队列(work)
示例图: 说明: 1、消费者1和消费者2获取到的消息内容是不同的,同一个消息只能被一个消费者获取。 2、消费者1和消费者2获取到的消息的数量是相同的,一个是消费奇数号消息,一个是偶数。 其实,这样是不合理的,因为消费者1线程停顿的时间短。应该是消费者1要比消费者2获取到的消息多才对。 RabbitMQ 默认将消息顺序发送给下一个消费者,这样,每个消费者会得到相同数量的消息。即轮询(roun...原创 2019-10-02 18:32:29 · 110 阅读 · 0 评论 -
rabbitMq-发布订阅-fanout
原理图: 1、1个生产者,多个消费者 2、每一个消费者都有自己的一个队列 3、生产者没有将消息直接发送到队列,而是发送到了交换机 4、每个队列都要绑定到交换机 5、生产者发送的消息,经过交换机,到达队列,实现,一个消息被多个消费者获取的目的 注意:一个消费者队列可以有多个消费者实例,只有其中一个消费者实例会消费 生产者 // 1.创建新的连接 Connection conne...原创 2019-10-02 19:28:26 · 125 阅读 · 0 评论