Nodejs操做RabbitMq快速上手

RabbitMQ

场景

  • 应用解耦(异步)
  • 通知
  • 限流
  • 数据分发

概念

  • 生产者 :生产消息
  • 消费者 :接收消息的
  • 消息队列 : 到达消费者前一刻存储的地方,由于消息也能够发给exchangeexchange确定也有存储消息的地方
  • 通道:创建在链接之上
  • Ack回执:收到消息后确认消息已经消费的应答
  • exchange 路由交换
  • routeing key 路由键
  • topic 主题

simplest 简单队列

简单队列模型

'mq简单队列'

一个生产者对应一个消费者node

三个角色git

  • 消息生产者 Producer
  • 消息中间件(提供消息队列) Queue
  • 消费消费者 consumer

Work Queues 工做队列/任务队列

工做队列模型

'任务队列'

工做队列(又称任务队列)的主要思想是避免当即执行资源密集型任务,而不得不等待它完成。相反,咱们安排任务在之后完成。咱们将任务封装 为消息并将其发送到队列。在后台运行的工做进程将弹出任务并最终执行做业。当您运行许多工做人员时,任务将在他们之间共享。github

  • 工做队列 方式派发消息的方式的两种方式异步

    • 轮询
    • 任务队列
      1. 关闭自动回执(ack)
      2. 设置每次接受消息数
      3. 手动回执

Publish/Subscribe 发布订阅

发布订阅模型

'pubsub'

  1. 一个生产者,多个消费者
  2. 每个消费者都有本身的队列
  3. 生产者没有直接把消息发送到队列 而是发到了交换机 转发器 exchange
  4. 每个队列都要绑定到交换机上
  5. 生产者发送的消息 通过交换机 到达队列 就能实现一个消息被多个消费者消费

x 交换机

消息暂存在交换机,队列拿着类型来找交换机要消息code

交换类型

  • direct
  • topic
  • headers
  • fanout

'pubsub'

Routing

routeing 模型

'routeing'

pub/sub的基础上增长了 routeing key,能够选择性的接收消息cdn

'routeing'

Topics

Topic模型

'topic'

特殊routeing key字符

  • # (哈希)能够替代零个或多个单词。
  • * 能够代替一个单词。

exchange 类型必须是topic中间件

'topic'

RPC

'rpc'
RPC 远程调用服务端的方法,使用 MQ能够实现 RPC的异步调用,基于 Direct交换机实现

  1. 客户端便是生产者又是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列
  2. 服务端监听RPC请求队列,收到消息后执行服务端的方法
  3. 服务端将方法执行后的结果发送到RPC响应队列

消息应答和持久化

消息应答

  • noAck
    • noAck = true 自动确认模式 一旦 mq 将消息把消息分配给消费者,就会从内存中删除,若是业务方拿到消息并无处理完,消息会丢失。
    • noAck = false 若是消费者挂了,没有发送回执,那么这条消息就没有被消费,会被其余消费者接收。消费完成必须发送回执,告诉 MQ 已经消费完成,否则会被其余消费者消费到

持久化

  • MQ是存在内存中的,若是它挂了,咱们的消息依然会丢失!! 可是!!RabbitMQ能够开启持久化

github代码仓库地址

node_rabbitMQ_mqtutorialblog

相关文章
相关标签/搜索