2019独角兽企业重金招聘Python工程师标准>>>

一、安装

Rabbitmq 是用 erlang 语言写的,所以使用还要安装 Erlang。

安装 erlang 还要安装 python 与 simplejson,我环境中已经安装了 python 2.6.4,simplejson 只要 easy_install 就可以了

安装Python、Erlang、SimpleJson请看红薯的博客:http://www.oschina.net/question/12_7840

二、了解

高级消息队列协议(AMQP) 是一个异步消息传递所使用的应用层协议规范。作为线路层协议,而不是API(例如JMS),AMQP 客户端能够无视消息的来源任意发送和接受信息。现在,已经有相当一部分不同平台的服务器和 客户端可以投入使用。

队列是一个先入先出的数据结构。路由封装了消息 队列中的消息的相关信息,这些信息决定了消息在异步消息系统中的最终展现形式。

异步消息是一个非常普通并且广泛使用的技术,从例如Skype或者XMPP/Jabber这样各种各样的即时消息协议到 古老的email。但是,这些服务都有如下特征:

- 它们会在传输消息的时候或多或少加入一些随意的内容(例如一封email可能会包含一个文本和关于办公室笑话的PPT)和一些比较正式的路由信息(例如 email地址):正式的路由信息+随意的信息

- 它们都是异步的,也就是说它们将生产者和消费者区分开来,因此可能将消息加入队列(例如某人发给你一条消息,但是你不在线或者你的邮箱会收到一封 email):不需要等待消息被处理后的返回值

- 生产者和消费者是具有不同知识的不同角色。我不需要知道你的IMAP用户名和密码就能够给你发送email。事实上,我甚至不需要知道你的email地址 是否是一个马甲或者“真实”地址。这个特性意味着生产者不能控制什么内容被阅读或者订阅了 (只管发,不关心消息是否被使用)- 就像我的email客户端会舍弃掉大多数主动发送给我的医药广告。

AMQP是一个抽象的协议(也就是说它不负责处理具体的数据),这个事实并不会将事情变得更复杂。反而,Internet使得消息无处不在。

AMQ模型

在AMQ规范中描述了一些实体。一个用来分辨这些实体的方法是检查它们是否由服务器管理员配置或者由客户端在运行的时候声明

可配置的实体有:

- 消息协商器(Message Broker),它在TCP/IP等端口监听AMQ消息。

- 将消息协商数据划分到多个不同集合的虚拟主机,它很像webserver中的虚拟主机,例如Apache的http守护进程。

- 使用安全凭据连接到虚拟主机的用户。

值得注意的是,规范中仅仅授予用户访问虚拟主机的权限,并没有采纳其他比这高级的访问控制措施,因此RabbitMQ并不支持这些高级访问控制措 施。--用户角色权限分配目前并不支持,可由厂商扩展。

为了和协商器交流,一个客户端需要建立一个或者多个连接。这些连接只是限于连接用户和虚拟主机。客户端默认使用guest/guest访问权限访问虚拟主机的根目录,这些默认实现也是RabbitMQ的默认安装选项。

在一个连接中,客户端声明了一个通道,通过单一连接到协商器的并发控制需要建立一个可靠的模型,这里可以使用通道池串行访问或者例如线程本地通道这样的线程并发模型。

如果需要在一个通道上进行操作,那么客户端需要声明AMQ组件。声明组件是断言特定的组件存在于协商器中──如果不存在的话,那么在运行时创建。

这些组件包括:

- 交换器(Exchange),它是发送消息的实体。

- 队列(Queue),这是接收消息的实体。

- 绑定器(Bind),将交换器和队列连接起来,并且封装消息的路由信息。

客户端可以通过交换器的名字来发送消息,也可以通过队列的名字收取信息。

绑定器没有名字,它们的生命期依赖于所紧密连接的交换器和队列。如果这两者任意一个被删除掉,那么绑定器便失效了。这就说明,若要知道交换器和队列 的名字,还需要设置消息路由。

消息是一个不透明的数据包,这些包有如下性质:

- 元数据-数据的数据(数据描述),例如内容的编码或者表明来源的字段。

- 标志位,标记消息投递时候的一些保障机制。

- 一个特殊的字段叫做routing key。

三、使用

3.1接受和发送消息:交换器类型
发送消息是一个非常简单的过程。客户端声明一个它想要发送消息的目的交换器,然后将消息传递给交换器。接受消息的最简单办法是设置一个订阅。客户端需要声明一个队列,并且使用一个绑定器将之前的交换器和队列绑定起来,这样的话,订阅就设置完毕。

1 require 'rubygems'
2 require 'mq'
3
4 event_loop = Thread.new do
5   EM.run do
6     EM.add_timer(1) do
7       EM.stop
8     end
9   end
10 end
11
12 def subscribe_to_queue
13
14   exchange = MQ.fanout('my-fanout-exchange')
15   queue = MQ.queue('my-fanout-queue')
16
17   queue.bind(exchange).subscribe do |header, body|
18     yield header, body
19   end
20
21 end
22
23 def send_to_exchange(message)
24
25   exchange = MQ.fanout('my-fanout-exchange')
26   exchange.publish message
27
28 end
29
30 subscribe_to_queue do |header, body|
31   p "I received a message: #{body}"
32 end
33
34 send_to_exchange 'Hello'
35 send_to_exchange 'World'
36
37 event_loop.join

三个标准决定了一条消息是否真的被投递到了队列中:

  1. 交换器的类型。在这个例子中类型是fanout。
  2. 消息的属性。在这个例子中,消息没有任何属性,只是有内容(首先是Hello,然后World)。
  3. 给定的绑定器的唯一可选属性:键值。在这个例子中绑定器没有任何键值。

--------明见:http://www.oschina.net/question/12_9192






转载于:https://my.oschina.net/hanzhankang/blog/201024

RabbitMq--AMQP高级消息队列协议--简单了解相关推荐

  1. 深入剖析 RabbitMQ —— Spring 框架下实现 AMQP 高级消息队列协议

    前言 消息队列在现今数据量超大,并发量超高的系统中是十分常用的.本文将会对现时最常用到的几款消息队列框架 ActiveMQ.RabbitMQ.Kafka 进行分析对比. 详细介绍 RabbitMQ 在 ...

  2. 浅谈RabbitMQ的基石—高级消息队列协议(AMQP)

    点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 大数据真好玩 点击右侧关注,大数据真好 ...

  3. 组件分享之后端组件——基于Golang实现的高级消息队列协议 (AMQP) 的消息代理garagemq...

    组件分享之后端组件--基于Golang实现的高级消息队列协议 (AMQP) 的消息代理garagemq 背景 近期正在探索前端.后端.系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成 ...

  4. Python通过amqp消息队列协议中的Qpid实现数据通信

    简介: 这两天看了消息队列通信,打算在配置平台上应用起来.以前用过zeromq但是这东西太快了,还有就是rabbitmq有点大,新浪的朋友推荐了qpid,简单轻便.自己总结了下文档,大家可以瞅瞅. A ...

  5. 消息队列、RabbitMQ原理、消息队列保证幂等性,消息丢失,消息顺序性,以及处理消息队列消息积压问题

    消息队列 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已 常见的消息队列 RabbitMq ActiveM ...

  6. springboot高级——消息队列相关

    写在前边:本文学习尚硅谷的springboot高级整理笔记. 消息队列是什么,有什么好处? 我们可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用.消息队列是分布式 ...

  7. 消息队列(2):常见的消息队列协议

    协议很常见,只要是通信,就会用到协议,就像我们说话的语言一样,不同的语言连通着不同的人群. 所以说,消息队列也是一样,想要互相通信,就要使用同一种协议. 每个协议下的消息队列,都有着不同的角色定义. ...

  8. 【重难点】【RabbitMQ 01】消息队列的作用、主流的消息队列、RabbitMQ 基于什么传输消息、RabbitMQ 模型架构、死信队列和延迟队列

    [重难点][RabbitMQ 01]消息队列的作用.主流的消息队列.RabbitMQ 基于什么传输消息.RabbitMQ 模型架构.死信队列和延迟队列 文章目录 [重难点][RabbitMQ 01]消 ...

  9. 第二百九十二节,RabbitMQ多设备消息队列-Python开发

    RabbitMQ多设备消息队列-Python开发 首先安装Python开发连接RabbitMQ的API,pika模块 pika模块为第三方模块  对于RabbitMQ来说,生产和消费不再针对内存里的一 ...

最新文章

  1. linux安装mysql5.6.26_linux mysql-5.6.26 安装
  2. 简单排查定位linux系统的性能瓶颈
  3. VS的包含目录、库目录、引用目录、可执行目录解释
  4. wordpress获取当前登录用户信息的方法
  5. LeetCode - 7 - Reverse Integer
  6. centeros 卸载mysql_完全卸载MySql
  7. 使用 ngrok(小米球)实现内网穿透映像到外网访问项目
  8. 联合分布、条件分布、边缘分布还有贝叶斯公式
  9. 创新金融科技:从零到一构建新房交易供应链金融服务 PPT分享
  10. 1人30天44587行代码,分享舍得网开发经验(修订版)
  11. centos安装aria2c_CentOS下安装aria2教程
  12. kettle 读xml无法获得属性信息,输出表修改不能自动更新修改办法
  13. c语言蜂鸣字符,蜂鸣器原理
  14. java合并果子_【单调队列】合并果子
  15. 3dmax 2014加载panda3d插件失败
  16. 攻防世界_moile
  17. 聊聊那些我们不应该被百度惯坏的搜索技巧
  18. 《程序员练习生》第5期 学习编程的乐趣
  19. 关于apple watch(苹果表)
  20. 微信小程序完整精品demo:移动小商城:基于node,包含前后台

热门文章

  1. 实现页面弹框背景虚化效果
  2. Hsiao United Cheap Nike Air Max
  3. Scrapy学习之报错ModuleNotFoundError: No module named 'win32api'
  4. FTP服务器配置固定IP才能访问
  5. 微信公众号配置后台接入
  6. Java 各种日期/时间 对象转Long时间戳
  7. php+mysql+into_PHP+MySQL之InsertInto数据插入用法分析_php技巧
  8. python创建数组并运行_python-Cython中从现有数组和变量创建新数组...
  9. PyQt5笔记(05) -- 绝对位置
  10. 彻底理解被称为二叉树神级遍历的莫里斯(Morris)算法