消息中间件RabbitMQ入门

消息中间件RabbitMQ

消息中间件有时候又被人们成为消息队列,目前基本没有针对于消息中间件标准的定义。一般将消息中间件认为是松耦合的分布式系统中的一个子系统,关注于数据的发送与接收,利用高效可靠的异步消息传递机制对分布式各个子系统进行解耦和集成。

松耦合架构的优势

1.解耦
2.异步处理能力
3.缓冲能力 这一点在秒杀时特别常用,削峰填谷
4.伸缩性 加MQ机器与减MQ的机器来适应实际的并发量
5.扩展性 增加功能时已开发完毕的功能不需要进行改动

与传统RPC的区别

RPC,远程过程调用。dubbo(TCP)与SpringCloud(HTTP) 是较为常用的RPC框架,相比起中间件,RPC与中间件最大的区别就是RPC是同步的,对被调用方有很强的依赖性,而对于消息中间件来说,不需要知道消息的接受方是谁,只需要往队列里面发送消息就可以了,自然有消费者来对消息进行消费。

如何选择消息中间件

目前常用的消息中间件大概有,ActiveMQ,RabbitMQ,RocketMQ和kafka,下表对其有个简单的比较

ActiveMQRabbitMQRocketMQkafka
性能(单机)6000+12000+十万级百万级
消息持久化支持支持支持支持
多语言支持支持支持支持

根据自己项目的需要,个人认为,
1.ActiveMQ,RabbitMQ:在并发量较小时,可以选用ActiveMQ,RabbitMQ,对于两者来说ActiveMQ是基于java的,而RabbitMQ是基于Erlang的,如果想要做一些插件开发又没有Erlang开发的能力,可以选择ActiveMQ。
2.RocketMQ:是阿里社区开源的一款消息中间件,较其他几种中间件来说的话,诞生的稍微晚一点,但正因为晚也弥补的其他消息中间件的一些缺陷,在使用上会很方便。
3.Kafka: 性能很强大,使用非常简单,在并发量很高。在需要大数据,流计算等需求时可以考虑,当然有的公司目前在记录日志时也直接使用了Kafaka,不过Kafka维护起来较为麻烦一些,偶尔会出现数据混乱的情况,对ZooKeeper有较强的依赖性。

RabbitMQ属性简介

RabbitMQ 使用了AMQP协议(Advanced Message Queuing Protocol),是应用层的标准高级消息队列协议,RabbitMQ的架构图如下图所示:
在这里插入图片描述
在RabbitMQ中有如下几种要素:
1.生产者。可以将其理解为传统开发模式上的服务的调用方。
2.消费者。可以将其理解为传统开发模式上的服务的被调用方,从队列中获取消息进行消费。
3.消息:在RabbitMQ中,消息就是有效载荷,说的通俗一点就是我们需要传递的数据,比如说订单系统下单后库存系统需要扣减商品数量,就需要将订单编号还有商品编号商品数量等一些数据传递给库存系统,这些数据就是所谓的消息,当然消息里面中还有一些描述这些数据的标签。
4.路由键:可以将其理解为一个访问地址,通过这一地址找到相应的队列
5.交换器:可以近似理解为一个路由器,之所以能够通过路由键找到队列,就是因为队列与路由键做了绑定,并在交换区中进行了注册。
6:队列:用与存放生产者生产的消息,等待消费者消费
7:虚拟主机:虚拟主机(vhost)在RabbitMQ中间是一个很重要的概念,每一个虚拟主机都是互相独立的,类似于tomcat(RabbitMQ)下面有很多个war(vhost)包,每个war包下的java类都是独立的

RabbitMQ有direct、fanout、topic、header四种交换器。
direct交换器:需要路由键完全匹配,可以用sql查询时的“=”来理解,如果队列的路由键绑定为abc,那生产者与消费者在对消息进行操作时,必须告诉交换器我操作的是abc这一个队列,传入ab或abcd等其他不能匹配的都不能找到正确的队列
fanout交换器:属于一种广播模式的交换器,意味着只要生产者生产了消息,在fanout交换器绑定的队列中都将进行消息的入队操作.
topic交换器: 主题交换器,较前两种交换器来说要复杂很多,有通配符*和#两种,如 a.*和a.#*.a和#.a,具体的匹配规则这里暂时陈述了,网上有大量的文章来解释。
header交换器:与direct交换器基本相同,使用的极少。

消息中间件和RabbitMQ的简单介绍暂时就到这里,如果需要安装RabbitMQ的朋友可以看看我这一篇文章
有很详细的安装教程https://editor.csdn.net/md/?articleId=103858910

有需要学习rabbitmq原生编程的朋友可以看看我github上的示例代码https://github.com/denghang96/RabbitMQ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值