分布式 第八章 RabbitMQ


第1章 RabbitMQ 概述

消息:应用间传递的数据

消息队列:应用间的通信方式,有消息系统老确保消息的可靠传递,发布者和使用者都不知道对方的存在

为什么要使用? 异步操作、降低耦合

在这里插入图片描述

其他场景包括最终一致性(允许完成主要部分)、广播、错峰流控等等

强一致性(全都完成或都不完成)

事务特性

  1. 原子性 (atomicity):强调事务的不可分割.
  2. 一致性 (consistency):事务的执行的前后数据的完整性保持一致.
  3. 隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰
  4. 持久性(durability) :事务一旦结束,数据就持久到数据库

RabbitMQ特点

一个有Erlang语言开发的AMQP(高级消息队列协议)的开源实现

  1. 可靠性
  2. 灵活的路由(转发)
  3. 消息集群(高可用、防单点故障)
  4. 高可用
  5. 多协议
  6. 多语言客户端
  7. 管理界面
  8. 跟踪机制(消息异常。。。)

另一款 卡夫卡

第2章 RabbitMQ安装

ErLang

#启动RabbitMQ
rabbitmq-server start &

#停止服务
rabbitmqctl stop

第3章 RabbitMQ 消息发送和接收

通用模型:

在这里插入图片描述

AMQP模型:

在这里插入图片描述

Exchange 交换机类型

  • direct 一对一精准匹配

在这里插入图片描述

  • fanout 类似广播模式,缺点会丢失消息,优点速度快

在这里插入图片描述

  • topic 模式匹配分配消息

在这里插入图片描述

  • headers(与direct一致,但性能差很多,几乎不用)
3.1 Java 发送和接收 Queue的消息 (不依赖交换机)
3.2 Java 绑定 Exchange 发送和接收 Queue的消息
  • direct
  • fanout
  • topic
/**
 * Topic 类型的交换机也是消息一对多的一种交换机类型,它和fanout都能实现一个消息同时发送给多个队列
 * fanout更适合于使用在一个功能不同的进程来获取数据,例如手机App中的消息推送,一个App可能会还有很
 * 多个用户来进行安装然后他们都会启动一个随机的队列来接收着自己的数据
 * Topic更适合不同的功能模块来接收同一个消息,例如商城下单成功以后需要发送消息到队列中。例如RoutingKey
 * 为 的order.success,物流系统监听订单order.* 发票系统监听order.*
 *
 * Topic可以使用随机的队列名也可以使用一个明确的队列名,但是如果应用在和订单有关的功能中,建议是有个
 * 名取的队列名并且要求为持久化的队列
 */

事务

RabbitMQ有两种方式解决事务问题

  1. AMQP的事务机制

channel.txSelect()声明启动事务模式;

channel.txCommint()提交事务;

channel.txRollback()回滚事务;

  1. 发送者确认模式

channel.waitForConfirms()普通发送方确认模式;

channel.waitForConfirmSOrDie() 批量确认模式; 大部分选择批量模式

channel.addConfirmListener() 异步监听发送方确认模式

  1. 消费者确认模式

basicAck(): 用于肯定确认,multiple参数用于多个消息确认。

basicRecover():是路由不成功的消息可以使用recovery重新发送到队列中。

basicReject():是接收端告诉服务器这个消息我拒绝接收,不处理,可以设置是否放回到队列中还是丢掉,而且只能一次拒绝一个消息,官网中有明确说明不能批量拒绝消息,为解决批量拒绝消息才有了basicNack。

basicNack():可以一次拒绝N条消息,客户端可以设置basicNack方法的multiple参数为true。

第4章 SpringBoot 集成 RabbitMQ

添加RabbitMQ依赖,配置连接信息

声明交换机、队列的两种方式

  • 注解
  • 配置文件

第5章 RabbitMQ 集群

集群方式

  • 普通模式(默认) :建立临时通道从A读取消息到B中
  • 镜像模式(高可用模式):A数据镜像到B中

Erlang Cookie是保证不同节点可以互相通信的秘钥,要保证集群中的不同节点互相通信必须共享相同的Erlang Cookie,具体存放在/var/lib/rabbitmq/.erlang.cookie

可以使用scp命令完成文件跨机器拷贝

在这里插入图片描述


传送门

上一章:分布式 第七章 FastDFS
下一章:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值