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,健身

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值