RabbitMQ (一)
学习RabbitMQ 可以先先了解一下AMQP
简单介绍:
AMQP从一开始就设计成为开放标准,以解决众多的消息队列需求和拓扑结构问题,凭借开发,任何人都可以执行这一标准。针对标准编码的任何人都可以和任意的AMQP提供商提供的MQ服务器进行互动
RabbitMQ 和邮箱、IM(即时通信)模型是有区别的,邮箱具有离线传递消息的能力,消息格式是固定,RabbitMQ的消息结构怎么不是固定的 ,可以文本也可以二进制数据等。
RabbitMQ 和IM区别在于,RabbitMQ接受和发送方都不知道对方是谁。IM反之
消费者和生产者(跟经济学中的概念可不一样)

上面就是rabbitMQ通信流程,消费者只会接收到到有效载荷不会接受到标签,也就是说它不知道消息的发送者是谁。要想知道谁发的消息除非在内容中标注。工作模式有点像邮局。
AMQP连接

这里每个信道都有一个唯一ID(AMQP会记录在数据库中),发布消息和订阅消息都是都过信道来完成的,为什么使用TCP? 因为tcp的创建和销毁开销是非常昂贵的。反之信道的开销会很小而且不受TCP栈的限制。
AMQP栈(交换器、绑定、队列)

AMQP消息路由必须有三部分:交换器、绑定、队列
生产者(消息放道交换器上)-------交换器---------绑定(Q1,Q2) ------队列(Q1,Q2,Q3,Q4)-----消费者跟Q1建立连接,这样消费者就能收到生产者的消息。这就是一个大致的过程,通过绑定将交换器和队列进行关联这样消息就可以被路由了。
这个结构有点像路由器
消费者通过下面二种方式从特定的队列中接受消息:
1)basic.consume 订阅 ,消息到达后立即接受
2)basic.get 订阅,每次取一条,提示不要在循序操作这个方法来代替第一种方式。get执行完后就会执行取消队列操作。
如果一个消息发送到了一个没有任何人订阅的队列那么这个消息将如何处理? 这个消息将会等待人来订阅然后发送出去。如果多个人同时订阅了一个队列rabbitmq如何处理?
rabbitmq其实就是用循环的方式发送给每个人(一个消息只会发送给一个人)。当a消息发送给A1 ,A1告诉rabbitmq接收到了,rabbitmq就会将消息从队列中删除,B消息来了此时rabbitMQ在给A2发送消息,A2收到后恢复rabbitMQ.rabbitmq在把消息B从
队列中删除。
待续。。。。。。。。。。。。。。。。。。。。
RabbitMQ (一)的更多相关文章
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- RabbitMq应用二
在应用一中,基本的消息队列使用已经完成了,在实际项目中,一定会出现各种各样的需求和问题,rabbitmq内置的很多强大机制和功能会帮助我们解决很多的问题,下面就一个一个的一起学习一下. 消息响应机制 ...
- 如何优雅的使用RabbitMQ
RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具.消息队列的使用场景大概有3种: 1.系统集成,分布式系统的设 ...
- RabbitMq应用一的补充(RabbitMQ的应用场景)
直接进入正题. 一.异步处理 场景:发送手机验证码,邮件 传统古老处理方式如下图 这个流程,全部在主线程完成,注册->入库->发送邮件->发送短信,由于都在主线程,所以要等待每一步完 ...
- RabbitMq应用一
RabbitMq应用一 RabbitMQ的具体概念,百度百科一下,我这里说一下我的理解,如果有少或者不对的地方,欢迎纠正和补充. 一个项目架构,小的时候,一般都是传统的单一网站系统,或者项目,三层架构 ...
- 缓存、队列(Memcached、redis、RabbitMQ)
本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 redis 简介.安装.使用.实例 Python 操作 Redis String.Hash.Li ...
- 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)
Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...
- windows下 安装 rabbitMQ 及操作常用命令
rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...
- RabbitMQ + PHP (三)案例演示
今天用一个简单的案例来实现 RabbitMQ + PHP 这个消息队列的运行机制. 主要分为两个部分: 第一:发送者(publisher) 第二:消费者(consumer) (一)生产者 (创建一个r ...
- RabbitMQ + PHP (二)AMQP拓展安装
上篇说到了 RabbitMQ 的安装. 这次要在讲案例之前,需要安装PHP的AMQP扩展.不然可能会报以下两个错误. 1.Fatal error: Class 'AMQPConnection' not ...
随机推荐
- 816E. Karen and Supermarket 树形DP
LINK 题意:给出n个商品,除第一个商品外,所有商品可以选择使用优惠券,但要求其前驱商品已被购买,问消费k以下能买几个不同的商品 思路:题意很明显就是树形DP.对于一个商品有三种选择,买且使用优惠券 ...
- JavaScript 秘密花园——对象的使用和属性操作
JavaScript 中所有变量都是对象,除了两个例外 null 和 undefined. false.toString(); // 'false' [1, 2, 3].toString(); // ...
- 【BZOJ】2154: Crash的数字表格 莫比乌斯反演
[题意]给定n,m,求Σlcm(i,j),1<=i<=n,1<=j<=m,n,m<=10^7. [算法]数论(莫比乌斯反演) [题解] $$ans=\sum_{i\leq ...
- 【BZOJ】1468: Tree(POJ1741) 点分治
[题意]给定带边权树,求两点距离<=k的点对数.n<=40000. [算法]点分治 [题解]对于一个区域,选择其重心x作为根,则划分出来的每棵子树都是子区域,可以证明至多划分log n次( ...
- VS 2010 应用程序无法启动
其实一般遇到这种问题, 不管是debug还是release, 也不用看提示的内存地址, 首先应该想到库是否包含正确. 一个可能的错误就是32位或64位不匹配的错误. 比如环境变量设的是64位的Open ...
- [转载]Android中Bitmap和Drawable
一.相关概念 1.Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable) ...
- HMM的概述(五个基本元素、两个假设、三个解决的问题)
一.五个基本元素 HMM是个五元组 λ =( S, O , π ,A,B) S:状态值集合,O:观察值集合,π:初始化概率,A:状态转移概率矩阵,B:给定状态下,观察值概率矩阵 二.两个假设 HM ...
- 转:修改shape的文字
Sub 修改shape的文字()'' 修改shape的文字 宏' ' ActiveSheet.Shapes.Range(Array("Flowchart: Connector 193& ...
- Java多线程之赛跑游戏(含生成exe文件)
在JavaSE中,多线程是一个重要的内容. 我们要了解多线程的概念,就要先了解进程的概念:要了解进程的概念,就离不开操作系统的概念. 在一台正常运行的电脑中,计算机硬件(如CPU.内存.硬盘.网卡.显 ...
- Django之Cookie、Session和自定义分页
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...