学习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 (一)的更多相关文章

  1. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  2. RabbitMq应用二

    在应用一中,基本的消息队列使用已经完成了,在实际项目中,一定会出现各种各样的需求和问题,rabbitmq内置的很多强大机制和功能会帮助我们解决很多的问题,下面就一个一个的一起学习一下. 消息响应机制 ...

  3. 如何优雅的使用RabbitMQ

    RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具.消息队列的使用场景大概有3种: 1.系统集成,分布式系统的设 ...

  4. RabbitMq应用一的补充(RabbitMQ的应用场景)

    直接进入正题. 一.异步处理 场景:发送手机验证码,邮件 传统古老处理方式如下图 这个流程,全部在主线程完成,注册->入库->发送邮件->发送短信,由于都在主线程,所以要等待每一步完 ...

  5. RabbitMq应用一

    RabbitMq应用一 RabbitMQ的具体概念,百度百科一下,我这里说一下我的理解,如果有少或者不对的地方,欢迎纠正和补充. 一个项目架构,小的时候,一般都是传统的单一网站系统,或者项目,三层架构 ...

  6. 缓存、队列(Memcached、redis、RabbitMQ)

    本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 redis 简介.安装.使用.实例 Python 操作 Redis String.Hash.Li ...

  7. 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)

    Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...

  8. windows下 安装 rabbitMQ 及操作常用命令

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...

  9. RabbitMQ + PHP (三)案例演示

    今天用一个简单的案例来实现 RabbitMQ + PHP 这个消息队列的运行机制. 主要分为两个部分: 第一:发送者(publisher) 第二:消费者(consumer) (一)生产者 (创建一个r ...

  10. RabbitMQ + PHP (二)AMQP拓展安装

    上篇说到了 RabbitMQ 的安装. 这次要在讲案例之前,需要安装PHP的AMQP扩展.不然可能会报以下两个错误. 1.Fatal error: Class 'AMQPConnection' not ...

随机推荐

  1. HDU 1431 思维 基础数论

    找范围内回文素数,最大到1e8,我就是要枚举回文串,再判素数,然后因为这种弱智思路死磕了很久题目. /** @Date : 2017-09-08 15:24:43 * @FileName: HDU 1 ...

  2. [洛谷P3293] [SCOI2016]美味

    洛谷题目链接:[SCOI2016]美味 题目描述 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1<=i<=n).有 m 位顾客,第 i 位顾客的期望值为 ...

  3. selenium.common.exceptions.ElementNotVisibleException: Message: element not visible处理方法:selenium针对下拉菜单事件的处理

    使用Selenium爬虫时,可能会遇到一些下拉菜单,动态加载,如果直接使用find_element_by_函数会报错,显示selenium.common.exceptions.ElementNotVi ...

  4. JAVA多线程提高九:Semaphere同步工具

    java 中Semaphere可类比操作系统信号量,硬件资源如IO.内存.磁盘等都是有固定量的,多个程序需要竞争这些资源,没有资源就需要被挂起. 一.类和方法摘要 构造函数: public Semap ...

  5. 【CodeForces】679 B. Bear and Tower of Cubes

    [题目]B. Bear and Tower of Cubes [题意]有若干积木体积为1^3,2^3,...k^3,对于一个总体积X要求每次贪心地取<=X的最大积木拼上去(每个只能取一次)最后总 ...

  6. 从python入门ruby

    1.Ruby的函数可以不使用括号 def h(name) puts "hello #{name}" end h "jack" 2.python可以直接访问实例的 ...

  7. 使用迭代法穷举1到N位最大的数

    这是何海涛老师剑指offer上面第12题,这题首先注意不能使用整数int型作为操作对象,因为N很大时明显会溢出.这种大数据一般都是使用的字符串来表示. 直接法就是:1.针对字符串的加法,涉及循环进位及 ...

  8. IE6-IE9不支持table.innerHTML的解决方法--终极解决办法

    一.把要转译的内容放到其他属性中,例如“tt” <p class="feedback_answer_content" tt='${feedInfo.feedback_answ ...

  9. 136.Single Number---异或、位运算

    题目链接 题目大意:给出一串数组,里面的数都是两个,只有一个数是一个,把这个只有一个的数找出来.时间复杂度最好是线性的,空间复杂度最好为O(1). 法一:利用map,空间换时间,代码如下(耗时26ms ...

  10. 设置Git远程仓库

    1,注册一个GitHub账户,登陆GitHub账户,添加一个储存库 2,进入Ubuntu命令窗口,创建文件夹.如   mkdir   git echo "# first_git" ...