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 ...
随机推荐
- 实用技巧:如何用 CSS 做到完全垂直居中
本文将教你一个很有用的技巧——如何使用 CSS 做到完全的垂直居中.我们都知道 margin:0 auto; 的样式能让元素水平居中,而 margin: auto; 却不能做到垂直居中……直到现在.但 ...
- 【BZOJ4552】【HEOI2016】排序 [二分答案][线段树]
排序 Time Limit: 60 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 在2016年,佳媛姐姐喜欢上了数字序列 ...
- HDU 1072 Nightmare (广搜)
题目链接 Problem Description Ignatius had a nightmare last night. He found himself in a labyrinth with a ...
- Vue的keep-alive
Vue的keep-alive: 简答的做下理解 缓存!页面从某一个页面跳转到另一个页面的时候,需要进行一定的缓存,然后这个时候调用的钩子函数是actived,而在第一次加载的时候,created.ac ...
- VC连接access
(1)首先拷贝 c:\program files\common files\system\ado\ 目录中的 msado15.dll 文件到项目中. (2)在VC中加入DLL,具体方法如下: (3)创 ...
- D - Keiichi Tsuchiya the Drift King Gym - 102028D (几何)
题目链接:https://cn.vjudge.net/contest/275150#problem/D 题目大意: 问你能满足那个矩形可以顺利通过的条件,然后求出最小的w 具体思路:首先,我们应该将情 ...
- 回溯算法_01背包问题_Java实现
原文地址:http://blog.csdn.net/ljmingcom304/article/details/50314839 本文出自:[梁敬明的博客] 1.回溯算法 回溯算法也叫试探法,通俗的将就 ...
- numpy 简介
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- Shell-history命令加记录用户IP
记录输入的命令 history命令可以查看用户输入过的命令,一个典型history命令输出如下: 980 2017-05-29 20:17:37 cd - 981 2017-05-29 20:17:4 ...
- PHP 结合实例认识 Socket
一.简介 (本部分参考自 揭开Socket的神秘面纱 - 源码工作室) 请结合下图 Socket 抽象层的位置来理解.Socket 是应用层和 TCP/IP 协议族进行通信的中间软件抽象层,是一组接口 ...