RabbitMQ理论

 

消息 = 有效载荷(数据) + 标签(包含载荷和收件人的信息)

 

信道:你的应用于RabbitMQ代理服务器之间的TCP连接(有唯一的ID),信道主要解决了每一个线程单独TCP连接造成的性能瓶颈。

 

AMQP:高级消息队列协议(Advance Message Queuing protocol)

 

AMQP 栈 = 交换器 + 队列 + 虚拟主机 (提高了吞吐量)

 

交换器类型:

direct(默认):按照路由键分发

fanout:广播分发给每一个订阅者

topic: 按照主题分发

headers(只匹配消息的header,很少用)

 

交换器与队列之间存在绑定。

 

如何让消息持久化?

1:将消息表示为持久化的:

durable属性设置为true 、投递模式 delivery model 设置为2

2:必须发布到持久化的交换器中,并且到达持久化的队列中

这样的消息会写入磁盘持久化日志文件(写好之后才会响应给生产者,消息被消费之后要标为等待垃圾收集。)

 

 

 

命令:

1:自动接收消费信息:basic.consume:

2:只获取单条信息:basic.get

3:丢弃一条消息:将requeue设置为false,消息放入死亡队列

4:创建队列:queue.declare(不指定队列的名字,会返回随机名称,在订阅和绑定时都会用到队列名称,匿名队列在构建RPC应用时会很有用)

5:队列的设置:

exclusive:true 表示私有队列,只有自己的应用能够订阅。

auto-delete:true 表示最后一个消费者取消订阅之后,队列自动移除

exclusive + auto-delete这两个命令常常组合在一起使用。

6:如何检测队列是否存在?

设置 queue.declare的passive属性为true,队列会让queue.declare返回成功,否则返回错误

7:查看运行的虚拟机:rabbitmpctl list vhost

 

 

 

多个消费者订阅了同一个队列:按照一个订阅者一条消息公平分发(因此具有负载均衡的作用),消费者受到消息必须向RabbitMQ回复确认(basic.ack),RabbitMQ将消息从队列里面删除。在应用崩溃时,RabbitMQ没有受到确认,会将消息分发给下一个订阅者,且不会再为此订阅者分发消息,人为该订阅者已经挂掉。

 

 

RabbitMQ理论的更多相关文章

  1. RabbitMQ理论部分

    概念 queue        队列 exchange   交换机 bind          绑定 channel     通道 一个发送消息流程包含上述四个概念.消息经过channel传递给exc ...

  2. RabbitMQ学习总结 第一篇:理论篇

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  3. RabbitMQ 集群与网络分区(理论知识)

    关于network partition网络设备故障导致的网络分裂.比如,存在A\B\C\D\E五个节点,A\B处于同一子网,B\C\D处于另外一子网,中间通过交换机相连.若两个子网间的交换机故障了即发 ...

  4. RabbitMQ基本理论

    本节内容 一  RabbitMQ介绍 二  RabbitMQ安装配置 三  RabbitMQ的Python实现-pika 1. 生产者消费者 2. 工作队列 3. 持久化和公平分发 4. 发布与订阅 ...

  5. RabbitMQ 相关理论部分

    集群配置方式 RabbitMQ可以通过三种方法来部署分布式集群系统,分别是:cluster,federation,shovel cluster: 不支持跨网段,用于同一个网段内的局域网 可以随意的动态 ...

  6. RabbitMQ入门-理论

    目录 RabbitMQ简介 RabbitMQ原理简介 RabbitMQ安装 .NET Core 使用 RabbitMQ Hello World 工作队列 扇型交换机 直连交换机 主题交换机 远程过程调 ...

  7. RabbitMQ 高可用集群搭建及电商平台使用经验总结

    面向EDA(事件驱动架构)的方式来设计你的消息 AMQP routing key的设计 RabbitMQ cluster搭建 Mirror queue policy设置 两个不错的RabbitMQ p ...

  8. RabbitMQ学习系列(四): 几种Exchange 模式

    上一篇,讲了RabbitMQ的具体用法,可以看看这篇文章:RabbitMQ学习系列(三): C# 如何使用 RabbitMQ.今天说些理论的东西,Exchange 的几种模式. AMQP协议中的核心思 ...

  9. RabbitMQ原理与相关操作(三)消息持久化

    现在聊一下RabbitMQ消息持久化: 问题及方案描述 1.当有多个消费者同时收取消息,且每个消费者在接收消息的同时,还要处理其它的事情,且会消耗很长的时间.在此过程中可能会出现一些意外,比如消息接收 ...

随机推荐

  1. Xcode 编辑器之Workspace,Project,Scheme,Target

    一,前言 最近老是突然对Workspace,Project,Scheme,Target四者的关系有些疑惑,所以查阅资料总结一下. 二,Workspace,Project,Scheme,Target四者 ...

  2. mysql 数据库操作 数据库的增删改查

    一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MyS ...

  3. 报错解决——DateTimeField *** received a naive datetime (***) while time zone support is active

    这是一个跟时区有关的问题,报错中说到datetime字段得到一个naive datetime,而不是支持time zone的active datetime由于Django的设置中米哦人USE_TZ设置 ...

  4. 007-优化web请求三-异步调用【WebAsyncTask】

    一.什么是同步调用 浏览器发起请求,Web服务器开一个线程处理,处理完把处理结果返回浏览器.好像没什么好说的了,绝大多数Web服务器都如此般处理.现在想想如果处理的过程中需要调用后端的一个业务逻辑服务 ...

  5. 【剑指offer】二叉搜索树与双向链表

    一.题目: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二.思路: 对于一棵搜索二叉树来说,中序遍历得到的即是有序的结果,所以整 ...

  6. vs2005新建项目中没有ASP.NET WEB应用程序

    今天正准备使用vs 2005,发现根本打不开老师发过来的源代码Portal_Article.csproj文件,上网查了一下,好多人都说是是因为没有给vs 2005打补丁.我的新建项目里根本没有ASP. ...

  7. api-gateway-engine知识点(1)

    1     密钥绑定时,通过Channel 实现监控 后台发送数据 :      redisTemplate.convertAndSend(RedisMessageChannel.API_GATEWA ...

  8. BI-LSTM and CRF using Keras

    问题1:CUDA_ERROR_OUT_OF_MEMORY: How to activate multiple GPUs from Keras in Tensorflow import keras.ba ...

  9. 新手解读JSP

    一.解读简单JSP代码(承接上篇文章中的代码) 1. <%@ page language="java" contentType="text/html; charse ...

  10. 解决异地服务器接口访问跨域,node构建反向代理

    跨域对于前端来说是一个老大难的问题,许多方法如jsonp.document.domain + iframe...都有或多或少的问题,一个最佳实践就是通过服务器nginx做反向代理,但奈何不懂相关知识, ...