一.rabbitmq是什么
rabbitmq是一个异步处理消息的框架,在一个商品下单的项目中,用户成功下单后,需要扣除金额,产生订单信息,发送短信通知等等,如果整个业务逻辑都写再一个service层,则就会导致请求耗时大大增加,在高并发的场景下,这是不可取的。而rabbitmq则能帮我们解决这个问题。
当业务逻辑本身是异步操作时,我们就可以利用mq异步来处理来减少业务执行的耗时时间。就比如上面这个场景,当用户成功下完单时,我们可以利用mq来异步发送消息"成功下单啦",在另一个业务层来接受到这个消息异步的来执行产生订单信息和发送短信通知。当再异步操作的需求时,比如用户下单后我需要累加积分,我们只需要创建一个消费者来消费这个信息即可。
二.rabbitmq的执行流程
生产者将消息转发至交换机,然后路由到队列中,根据队列的先进先出特性,消费中从队列中取出消息通知然后执行一些列的操作。
mq的队列和交换机被称作为虚拟机,类似于MySQL中的数据库,在mq配置文件中,要表明是对哪个虚拟机操作。在发送消息时,可以直接发送至队列,也可以发送至交换机,由于交换机和队列存在着绑定关系,交换机在根据关系路由到队列中,记住交换机是没有存储功能的,他之负责转发。
交换机由三种,findout,direct,topic,findout交换机可以路由到他所绑定的所有队列中,direct交换机除了绑定关系外,会给每个队列设置一个boundingkey,boudingkey通常是一个单词。在发送消息时,除了要指定交换机,还要带上一个routkingkey,当boundingkey和routingkey相同时才路由到指定的队列上。。topic交换机和direct类似,只是routingkey可以是多个单词,单词之间以“ . ”分割,队列的bindingkey可以用通配符(“ * ”代表一个单词,“ # ”代表0个或多个单词)来接收多个消息。例如,当bindnigkey为*.new,则该队列会接收所有以new单词结尾的消息。
消费者从队列获取消息,消息只能被消费一次,当有多个执行能力相同的消费者监听同一个队列时,默认会

最低0.47元/天 解锁文章
2071

被折叠的 条评论
为什么被折叠?



