当前位置: 首页 > news >正文

RabbitMQ学习初整理

rabbitMQ是AMQP的实现,相关语义如下

Broker:提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输

Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列

Queue:消息的载体,每个消息都会被投到一个或多个队列

Bingding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来

Routing Key:路由关键字,exchange根据这个关键字进行消息投递

vhost:虚拟主机,一个broker里可以有多个vhost,用作不同用户的权限分离

Producer:消息生产者,就是投递消息的程序

Consumer:消息消费者,就是接受消息的程序

Channel:消息通道,在客户端的每个连接里,可建立多个channel

核心概念

1:在mq领域中,producer将msg发送到queue,然后consumer通过消费quue完成P.C解耦

2:kafka是由producer决定msg发送到哪个queue

3:rabbitmq是由Exchange决定msg应该怎么样发送到目标queue,这就是binding及对应的策略

Exchange

Direct Exchange:直接匹配,通过Exchange名称+RoutingKey来发送与接收消息

Fanout Exchange:广播订阅,向所有消费者发布消息,但只有消费者将队列绑定到该路由才能接收到消息,忽略RoutingKey

Topic Exchange:主题匹配订阅,这里的主题指的是RoutingKey,RoutingKey可以采用通配符,如:*或#,RoutingKye命名采用" . " 来分割多个词,只有消息这将队列绑定到该路由且指定RoutingKey符合匹配规则时才能收到消息

Headers Exchange:消息头订阅,消息发布前为消息定义一个或多个键值对的消息头,然后消费者接收消息同时需要定义类似的键值对请求头(如:x-match=all 或 x-match=any),只有请求头与消息头匹配,才能接收消息,忽略RoutingKey

默认的Exchange:如果用空字符串去声明一个exchange,那么系统就会使用"amq.direct"这个exchange,我们创建一个queue时,默认的都会有一个和新建queue同名的routingKey绑定到这个默认的exchange上

RabbitMQ如何确保消息发送和消息接收

消息发送确认

1:ConfirmCallback

      ConfirmCallback是一个回调接口,消息发送到Broker后触发回调,确认消息是否到达Broker服务器,也就是只确认是否正确到达Exchange中

2:ReturnCallback

      通过实现ReturnCallback接口,启动消息失败返回,此接口是在交换器路由不到队列时触发回调,该方法可以不使用,因为交换器和队列是在代码里绑定的,如果消息成功投递到Broker后几乎不存在绑定队列失败,除非代码写错

消息接收确认

RabbitMQ消息确认机制(ACK)默认是自动确认的,自动确认会在消息发送给消费者后立即确认,但存在丢失消息的可能,如果消费端消费逻辑抛出异常,假如你用回滚了也只是保证了数据的一致性,但是消息还是丢了,也就是消费端没有处理成功这条消息,那么就相当于丢失了消息

消缺确认模式

AcknowledgeMode.NODE:自动确认

AcknowledgeMode.AUTO:根据情况确认

AcknowledgeMode.MANUAL:手动确认

消费者收到消息后,手动调动Basic.Ack或Basic.Nack或Basic.Reject后,RabbitMQ收到这些消息后,才认为本次投递完成

Basic.Ack:用于确认当前消息

Basic.Nack:用于否定当前消息

Basic.Reject:用于拒绝当前消息

Nack,Reject后有能力要求是否requeue消息或者进入死信队列

相关文章:

  • 20221223英语学习
  • 电脑桌面文件删除了怎么找回?
  • 测试资源管控
  • 大数据处理之ClickHouse概述及架构参考(未完)
  • 实验室搬迁改造需要注意哪些
  • p5.js 光速入门
  • 成功转行Python工程师,年薪30W+,经验总结都在这!
  • 网络安全方向好吗?
  • 华为云CDN,助力电商平台无惧流量洪峰
  • Euler identity
  • 技能梳理32@电源防反接电路+光耦隔离电路+串口磁耦隔离电路
  • 更改Docker容器网络地址
  • 最平坦的路线题解
  • 芯片漫游指南(4) -- UVM序列
  • ACP刷题笔记第一天
  • IPv4地址和子网划分
  • 案例分析: 众包任务
  • 软考网络工程师怎么学习,用那些书籍?
  • PS1文件执行
  • 【MySQL】MySQL初级笔记