rabbitmq入门教程
1·什么是MQ
消息队列(Message Queue,简称MQ)它其实就是一个queue,用来存放消息的,然后等待消费者消费,
2 · 介绍一下rabbitmq,
·MQ为message Queue,消息队列是应用程序与应用程序之间通信方法
·RabbitMq是一个开源的,在amqp基础上完整的,可复用的企业消息系统
·支持主流的操作系统,linux,windows,macox等等
·支持多种开发语言,java,python,.net等等
3·介绍一下里面的主要的组件
- Server:又称Broker,接收客户端的连接,实现AMQP实体服务
- Connection:连接,应用程序与Broker的网络连接
- Channel:网络信道,几乎所有的操作都在Channel中进行,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。Channel是进行消息读写的通道。客户端可以建立多个Channel,每个Channel代表一个会话任务。
- Message:消息,服务器和应用程序之间传送的数据,由Properties和Body组成。Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body就是消息体内容。
- Virtual host:虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual host可以有若干个Exchange和Queue,同一个Virtual host里面不能有相同的Exchange和Queue
- Exchange:交换机,接收消息,根据路由键转发消息到绑定的队列
RabbitMQ中有三种常用的交换机类型:
direct: 如果路由键匹配,消息就投递到对应的队列
fanout:投递消息给所有绑定在当前交换机上面的队列
topic:允许实现有趣的消息通信场景,使得5不同源头的消息能够达到同一个队列。topic队列名称有两个特殊的关键字。
* 可以替换一个单词
# 可以替换所有的单词
- Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routing key
- Routing key:一个路由规则,虚拟机可用它来确定如何路由一个特定消息
- Queue:也称为Message Queue,消息队列,保存消息并将它们转发给消费者,多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。
- Prefetch count:如果有多个消费者同时订阅同一个Queue中的消息,Queue中的消息会被平摊给多个消费者。这时如果每个消息的处理时间不同,就有可能会导致某些消费者一直在忙,而另外一些消费者很快就处理完手头工作并一直空闲的情况。我们可以通过设置prefetchCount来限制Queue每次发送给每个消费者的消息数,比如我们设置prefetchCount=1,则Queue每次给每个消费者发送一条消息;消费者处理完这条消息后Queue会再给该消费者发送一条消息。
这张图片的就是mq的架构流程,也是比较简单的,生产者先发送消息给交换机 然后在将交换机跟队列进行绑定,在使用监听器监听队列里面的消息,如果队列里面有消息,就进行消费‘
将交换机跟队列绑定有两种方式,一使用代码
二 就是直接在客户端进行操作
这样就行了,
4 在介绍一下mq的两个机制 confirm机制和ack机制
confirm机制 就是判断消息是否发送到了Exchange交换机上,如果失败了,我们可以采取一些补救措施,然后具体是怎么使用呢
使用这个ConfirmCallback对象的去重写他的confirm方法,correlationData 这个对象就是消息的唯一标识,然后ack就是交换机返回是否成功,如果成功我们就去数据库中更新消息为已发送,否则就重试等等
第二个就是ack机制,这个机制就是在消费消息的是否用到的,ack机制分为两种一种是自动ack,一种是手动ack,自动ack有一个弊端,就是消费者拿到消息就会返回ack消息给交换机说我已经消费成功了,这个时候如果消费出现了问题,也会返回成功,所以说我们一般使用手动ack,就是等到我完全确认之后我才返回给交换机,我已经消费了,下面就看看具体怎么使用的
manual意思就是手动ack
如果我们消费完消息之后,直接调用 channel.basicAck这个方法就行了
第一个参数为消息的id,第二个为bool类型 如果是false 就是确认消费了 如果
为true 则额外将比第一个参数指定的 delivery tag 小的消息一并确认
channel.basicAck(deliveryTag,multiple);
谢谢大家
希望我这两件事可以坚持到底 1,写博客 2,健身