RabbitMQ的基础知识与使用

一.MQ引言

   1.1MQ是什么?
 MQ(Message Quene),翻译为消息队列,通过典型的生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断从队列获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,轻松实现系统间解耦。
    别名:消息中间件,通过利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。
    1.2MQ有哪些?
        ActiveMQ,RabbitMQ,kafka(Apache),RocketMQ(阿里)等。
    1.3不同MQ的特点

ActiveMQ
ActiveMQ是Apache出品的最流行的,完全支持JMS(Java Message Service)的消息中间件,有丰富的API,但是性能受限,吞吐量并不高。
Kafka
Kafka目前属于Apache下的顶级项目,它追求高吞吐量,追求高效率。设计之初是为了用在大数据领域做日志的收集和传输,但是对消息的事务,一致性方面并没有很好。
RocketMQ
RocketMQ属于阿里的开源消息中间件,纯Java编写的,具有高吞吐,高可用的特性,它的设计起源与kafka,但并不是对kafka的copy,它对消息的可靠传输以及事务做了优化。目前被应用到阿里集团的交易,充值,流计算,消息推送,日志流处理等场景。
开源版本已经交给Apach托管,但是不支持事务,需要购买其官方版本才提供这个服务。
RabbitMQ
使用Erlang语言(1991年由爱立信公司提出的第一个版本,目前适用于linux,windows,unix等主流系统)开发,处理并发时性能不错,而且基于AMQP协议(JMS和AMQP的区别  https://blog.csdn.net/hpttlook/article/details/23391967)
可以和spring框架做默认对接,spring框架默认支持RabbitMQ
最重要的一点是RabbitMQ对数据的一致性,稳定性和可靠性支持性很高
数据一致性:RabbitMQ > kafka
吞吐量:       kafka > RabbitMQ
二.RabbitMQ是什么?

   1.RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

   一些基础的应用场景:①:登录/修改密码 成功,登录用户要收到短信   1对1
                        ②:淘宝/京东下订单后,通知库房,积分变动,物流系统等等,一对多
       ③:日志系统:对于info,warning,error不同级别日志系统的处理。

在这里插入图片描述
2.RabbitMQ的几种模型 https://www.rabbitmq.com/
在这里插入图片描述

三.多种模式
    1.点对点模式
    2.工作队列模式
      默认平均分配,若要实现能者多劳的效果,需要
     ①:关闭自动确认     channel.basicConsume("work", false, new DefaultConsumer(channel) {}
     ②:channel.basicQos(1);//一次只接收一条消息
     ③:channel.basicAck(envelope.getDeliveryTag(), false);//每次执行完任务手动确认

在这里插入图片描述

3.发布订阅模式
订阅了此channel的队列都能收到消息
     4.Routing之订阅模型(direct)
        在不同的场景下,我们希望不同的消息被不同的队列消费,这时就用到Direct类型的Exchange。
        在Direct模型下:
        ①:队列与交换机的绑定不能再是任意绑定了,而是要指定一个RoutingKey(路由key)
        ②:消息再向交换机发送消息时,也必须指定消息的RoutingKey
        ③:交换机不再把消息交给每一个绑定的队列,而是根据路由key进行判断,只有消息的路由key与队列的路由key完全一致,才会接收到消息
     5.Routing之订阅模型(Topic)
 Topic类型的交换机和Direct类型的相比,都可以根据RoutingKey把消息路由到不同的队列,只不过Topic类型的交换机在定义RoutingKey的时候支持使用通配符。
         *:代表匹配一个    例如:user.info.save     user.info.delete    都可以被RoutingKey为 *.info.*的交换机接收到
 #:代表匹配多个   例如:user.info.save      user.info    user   都可以被RoutingKey为 user.#的交换机接收到
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值