RabbitMQ应用场景与实例

  • Publisher:是Message的生产者,Publisher这个Clients产生了一些Message。
  • Consumer:Message的消费者,Publisher产生的Message,最终要到达Consumer这个Clients,进行消费。
  • Exchange: 指定消息按什么规则,路由到哪个Queue,Message消息先要到达Exchange,在Server中承担着从Produce接收Message的责任。
  • Queue:到达Exchange的消息,根据制定的规则(Routing key)到达对应的Queue,在Server中承担着装载Message,是Message的容器,等待被消费出去。
  • Routing key:在Exchange和Queue之间隐藏有一条黑线,可以将这条黑线看成是Routing key,Exchange就是根据这些定义好的Routing key将Message送到对应的Queue中去,是Exchange和Queue之间的桥梁。
  • Broker:之前一直不理解这个Broker,其实Broker就是接收和分发消息的应用,也就是说RabbitMQ Server就是Message Broker。
  • VirtualHost: 虚拟主机,一个Broker里可以开有多个VirtualHost,它的作用是用作不同用户的权限分离。
  • Connection:是Publisher/Consumer和Broker之间的TCP连接。断开连接的操作只会在Publisher/Consumer端进行,Broker不会断开连接,除非出现网络故障或者Broker服务出现问题,Broker服务宕了。
  • Connection: Channel:如果每一次访问RabbitMQ就建立一个Connection,那在消息量大的时候建立TCP Connection的开销就会很大,导致的后果就是效率低下。

左边的Client向右边的Client发送消息,流程:
       第一:获取Conection
       第二:获取Channel
       第三:定义Exchange,Queue
       第四:使用一个RoutingKey将Queue Binding到一个Exchange上
       第五:通过指定一个Exchange和一个RoutingKey来将消息发送到对应的Queue上,
       第六:Consumer在接收时也是获取connection,接着获取channel,然后指定一个Queue,到Queue上取消息,它对Exchange,RoutingKey及如何Binding都不关心,到对应的Queue上去取消息就行了。

应用场景

1、异步处理

场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并行的方式
        (1)串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端。 这有一个问题是,邮件,短信并不是必须的,它只是一个通知,而这种做法让客户端等待没有必要等待的东西.

        (2)并行方式:将注册信息写入数据库后,发送邮件的同时,发送短信,以上三个任务完成后,返回给客户端,并行的方式能提高处理的时间。

         假设三个业务节点分别使用50ms,串行方式使用时间150ms,并行使用时间100ms。虽然并性已经提高的处理时间,但是,前面说过,邮件和短信对我正常的使用网站没有任何影响,客户端没有必要等着其发送完成才显示注册成功,英爱是写入数据库后就返回. 

        (3)消息队列 :引入消息队列后,把发送邮件,短信不是必须的业务逻辑异步处理 

        由此可以看出,引入消息队列后,用户的响应时间就等于写入数据库的时间+写入消息队列的时间(可以忽略不计),引入消息队列后处理后,响应时间是串行的3倍,是并行的2倍。

2 应用解耦

        场景:双11是购物狂节,用户下单后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口. 

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RabbitMQ 是一个功能强大的消息中间件,适用于很多不同的应用场景,特别是在高并发的情况下。下面是一些 RabbitMQ 的常见应用场景以及如何处理高并发的建议: 1. 异步任务处理:将耗时的任务放入消息队列中,异步处理,提高系统的响应速度和吞吐量。 2. 解耦系统:通过将不同模块之间的通信通过消息队列完成,实现系统解耦,提高系统的可维护性和可扩展性。 3. 流量削峰:当系统面临高并发请求时,可以将请求放入消息队列中,通过控制消费者的速率来平滑处理请求,避免系统崩溃。 4. 日志收集:将日志消息发送到消息队列中,然后由消费者进行处理和存储,可以方便地进行日志分析和监控。 对于高并发的处理,可以考虑以下几点: 1. 消息持久化:使用 RabbitMQ 的持久化功能,确保消息在发送过程中不会丢失。 2. 负载均衡:可以通过增加消费者实例来分担消息处理的压力,实现负载均衡。 3. 消息确认机制:使用 RabbitMQ 的消息确认机制(ACK)来确保消息被正确处理,避免消息重复消费或丢失。 4. 并发控制:根据系统的负载情况,合理地设置消费者的并发数,避免过多的并发导致系统资源耗尽。 总之,RabbitMQ 在异步任务处理、解耦系统、流量削峰和日志收集等场景下都有广泛应用,并且可以通过持久化、负载均衡、消息确认和并发控制等方式来处理高并发情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值