了解RabbitMQ

MQ:Message Queue,消息队列是应用程序和应用程序之间的通信方式。从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已。其主要用途:不同进程Process/线程Thread之间通信。产生消息队列的主要原因:不同进程(process)之间传递消息时,两个进程之间耦合程度过高,改动一个进程,引发必须修改另一个进程,为了隔离这两个进程,在两进程间抽离出一层(一个模块),所有两进程之间传递的消息,都必须通过消息队列来传递,单独修改某一个进程,不会影响另一个;不同进程(process)之间传递消息时,为了实现标准化,将消息的格式规范化了,并且,某一个进程接受的消息太多,一下子无法处理完,并且也有先后顺序,必须对收到的消息进行排队,因此诞生了事实上的消息队列;RabbitMQ是一个开源的,再AMQP基础上完整的,可复用的企业消息系统,支持主流的操作的系统,Linux,Windows,MacOx等,多种开发语言支JAVA,Python,Ruby,.NET,PHP, C/C++, node.js等ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑。ConnectionFactory为Connection的制造工厂。Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。

RabbitMQ应用场景:异步处理;场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并行的方式。串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端。 这有一个问题是,邮件,短信并不是必须的,它只是一个通知,而这种做法让客户端等待没有必要等待的东西。并行方式:将注册信息写入数据库后,发送邮件的同时,发送短信,以上三个任务完成后,返回给客户端,并行的方式能提高处理的时间。消息队列引入消息队列后,把发送邮件,短信不是必须的业务逻辑异步处理

RabbitMQ应用工作模式:工作队列模式:与简单模式相比,仅仅是多了一个(或多个)消费端,多个消费端共同消费同一个队列中的消息。对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度,因为对于多个任务,MQ可以把它们分别交给不同的消费端同时进行处理,这样就提高了任务处理的效率。发布/订阅模式此种模式下生产者将消息发给broker,broker中的由交换机将消息转发到绑定到此交换机上的每个队列中(假如交换机收到10条消息,它会把这10条消息分别发给每个队列,如下图两个队列中,每个都会收到相同的10条消息),而消费者这边去监听自己的队列。发布订阅模式具体包括:Fanout模式:模式特点:可以理解他是一个广播模式不需要routing key它的消息发送时通过Exchange binding进行路由的~~在这个模式下routing key失去作用这种模式需要提前将Exchange与Queue进行绑定,一个Exchange可以绑定多个Queue,一个Queue可以同多个Exchange进行绑定如果接收到消息的Exchange没有与任何Queue绑定,则消息会被抛弃。Direct模式:任何发送到Direct Exchange的消息都会被转发到routing_key中指定的Queue1. 一般情况可以使用rabbitMQ自带的Exchange:”” (该Exchange的名字为空字符串), 也可以自定义Exchange2. 这种模式下不需要将Exchange进行任何绑定(bind)操作。当然也可以进行绑定。可以将不同的routing_key与不同的queue进行绑定,不同的queue与不同exchange进行绑定3. 消息传递时需要一个“routing_key”4. 如果消息中不存在routing_key中绑定的队列名,则该消息会被抛弃。如果一个exchange 声明为direct,并且bind中指定了routing_key,那么发送消息时需要同时指明该exchange和routing_key.简而言之就是:生产者生成消息发送给Exchange, Exchange根据Exchange类型和basic_publish中的routing_key进行消息发送 消费者:订阅Exchange并根据Exchange类型和binding key(bindings 中的routing key) ,如果生产者和订阅者的routing_key相同,Exchange就会路由到那个队列。Topic模式:前面讲到direct类型的Exchange路由规则是完全匹配binding key与routing key,但这种严格的匹配方式在很多情况下不能满足实际业务需求。topic类型的Exchange在匹配规则上进行了扩展,它与direct类型的Exchage相似,也是将消息路由到binding key与routing key相匹配的Queue中,但这里的匹配规则有些不同,它约定:routing key为一个句点号“. ”分隔的字符串(我们将被句点号“. ”分隔开的每一段独立的字符串称为一个单词),如“stock.usd.nyse”、“nyse.vmw”、“quick.orange.rabbit”binding key与routing key一样也是句点号“. ”分隔的字符串binding key中可以存在两种特殊字符“*”与“#”,用于做模糊匹配,其中“*”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)

路由模式:路由模式相较于发布订阅模式的不同点在于,路由模式要求队列在绑定交换机的时候要指定routingkey,这个routingkey的主要作用就是让交换机根据不同的routingkey把消息发送到不同的队列中。不像发布订阅模式那样,如果交换机收到了10条消息,它会把这10条消息不加筛选的一股脑全部发给每个队列。而对于路由模式,生产者将消息发给交换机,由交换机会根据routingkey来转发消息到指定的队列,同时每个消费者也会监听自己的队列,并且设置相应的routingkey进而只接收指定队列发来的消息。主题模式:主题工作模式其实和路由模式很相似,在交换机和队列进行绑定的时候也需要指定routingkey,只不过主题模式中的routingkey可以带有通配符,而路由模式的routingkey必须精确指定。另外一点不同的地方就是交换机的type类型,路由模式的交换机type类型为direct,而主题模式的交换机type类型为topic。但Topic模式功能更多加强大,它可以实现Routing、publish/subscirbe模式的功能。RPC模式:RPC即客户端远程调用服务端的方法 ,使用MQ可以实现RPC的异步调用,基于Direct交换机实现,流程如下:1、客户端即是生产者也是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列。2、服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果3、服务端将RPC方法 的结果发送到RPC响应队列。4、客户端(RPC调用方)监听RPC响应队列,接收到RPC调用结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值