从零开始实现消息队列(二)

.

在这里插入图片描述

核心API

对于Broker来说,要实现以下核心API,通过这些API来实现消息队列的基本功能.

  1. 创建队列(queueDeclare)
  2. 销毁队列(queueDelete)
  3. 创建交换机(exchangeDeclare)
  4. 销毁交换机(exchangeDelete)
  5. 创建绑定(queueBind)
  6. 解除绑定(queueUnbind)
  7. 发布消息(basicPublish)
  8. 订阅消息(basicConsume)
  9. 确认消息(basicAck)

Producer和Consumer则通过网络的方式,远程调用这些API,实现生产者消费者模型
对于RabbitMQ而言,VirtualHost也只是可以进创建和删除,但是我们这里就不实现了

交换机类型

对于 RabbitMQ而言,交换机有以下四种类型

  1. Direct,生产者发布消息时,直接指定被该交换机绑定的队列名
  2. Fanout,生产者发送的消息会被复制到该交换机上的所有队列中
  3. Topic,绑定队列到交换机上时,指定一个字符串为bindingKey,发送消息指定一个字符串为routingKey,当bindingKey和routingKey满足一定的匹配条件的时候,则把消息投递到指定队列中
  4. Header

其中header比较复杂,我们这里就不进行实现了,并且常见的也就只有前三种

持久化

Exchange,Queue,Binding,Message都有持久化需求,要保证程序重启和主机重启过后,上述内容不会丢失.

网络通信

生产者和消费者都是客户端,Broker是服务器,客户端和服务器之间是通过网络进行通信的,在网络通信的过程中,客户端部分要提供对应的API,来实现对服务器的操作

  1. 创建Connection
  2. 关闭Connection
  3. 创建Channel
  4. 关闭Channel
  5. 加上Broker服务器有的所有API

Connection和Channel

Connection对应一个TCP连接.
Channel则是Connection中的逻辑通道.
一个Connection中可以包含多个Channel.
Channel和Channel之间的数据是独立的,不会相互干扰
这样的设计是为了避免频繁的创建关闭TCP连接,达到长连接的效果

消息应答

被消费的消息,需要进行应答
应答模式分为两种:

  1. 自动应答:消费者只要消费了消息,就算应答完毕了,Broker就会直接删除这个消息
  2. 手动应答:消费者需要手动调用应答接口,Broker接收到了应答请求之后,才会对这个消息进行删除(可靠性更高)

模块划分

在这里插入图片描述

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值