第一章:Rabbitmq简单介绍

简单介绍:

Rabbitmq是一个消息中间件。主要用于消息的转发和接收。假设把rabbitmq比作邮局:仅仅要你将信件投递到邮箱,你就能够确信邮递员将能够把你的信件递送到目的地。

Rabbitmq的功能就相当于邮箱、邮局、邮递员的所代表的功能。

邮局递送的是纸质信件,Rabbitmq所不同之处就是其功能是接收、存储和转发的是二进制大对象数据。即Messages。

Rabbitmq相关术语:

(1)      Producing(生产):生产相当于消息发送(sending)。我们把发送消息的程序成为一个生产者(producer)。用例如以下图形表示:

(2)      queue(队列):Rabbitmq的队列相当于上文比喻的邮箱。它位于rabbitmq内部。虽然消息在应用程序和Rabbitmq间传递。但其仅仅能保存在队列中。

假设未对队列设定限制条件。队列是可以保存你想保存的随意信息。

其实,队列本质上是一个无容量限制的buffer。一些生产者向队列中发送消息后。消息消费者就行从队列中获取消息进行处理。

队列可以用例如以下图表示:

(3)      Consuming(消费):消费相当于消息接收(receiving)。

通常。消息消费者是一个等待接收消息队列中消息的应用程序。消息消费者用例如以下图表:

通常,消息生产者、消息消费者和消息中间件通常不在同一台机器上。

一个简单的rabbitmqhelloworld程序

helloword程序主要简单实现消息的发送,接收并打印到屏幕上。实现该功能须要写两个简单程序:一个用于发送消息。一个用于接收消息并打印消息到屏幕上。

例如以下图所看到的:

消息生产者发送消息到名为“hello”的消息队列中,消息消费者从该队列中接收消息。

TIPS:

rabbitmq库

Rabitmq实现了AMQP协议。使用rabbit须要导入一些库,这些库也须要像 rabbit一样遵循AMQP协议。

每一种语言都会有多种库可供选择。

Python语言的实现库主要有:

->Py-amqplib

->txAMQP

->pika

本文档主要使用pika库。

安装pythonpika包: $ sudo pip install pika==0.9.8

安装pika 依赖 pip 和git-core包。

在安装pika前须要安装这些依赖包。

Ubuntu安装: sudo apt-get install python-pip git-core

Debian安装: apt-get install python-setuptools git-core

sudo easy-install pip

window安装: easy_install pip

pip install pika==0.9.8

消息发送:

本文档通过send.py来完毕消息的发送。首先须要建立一个到RabbitMQ 服务的连 接。

上面已经建立了一个到本机中间件的连接。

假设中间件服务执行在远程的机器上,仅仅需改动连接參数为远程主机的 ip地址就可以。

建立完连接后。还须要确保消息接收队列已存在。假设发送一条消息到一个不存在的位置,rabbitmq 将对发送的消息进行垃圾回收。比如,创建一个名为“hello”的消息队列来接收消息,创建步骤例如以下:

创建完后,就能够開始发送消息了。本例中将发送一条包括一个“hello”字符串的消息到名为“hello”的消息队列中。

在rabbitmq中。消息永远都无法直接发送到消息队列中。总是须要通过exchange,然后发送到消息队列。Exchange的具体介绍将在后面给出。这里仅仅需了解怎样使用一个默认的名为空字符串的exchange,这个特定的exchange可以指定我们的消息应该发到哪个消息队列中。消息队列名须要在routing_key參数中指定:

在退出程序前,我们须要确保网络缓存被刷清,而且消息被发送到rabbitmq。

然后我们才关闭连接。

TIPS: 消费发送过程无法完毕

假设你第一次使用rabbitmq。当看到消息无法发送且不知道为何出错时。或许你须要检測你的消息中间件启动时是否有足够的磁盘空间(默认须要至少1G空间)。空间太少可能导致消息中间件拒绝接收消息。检測中间日志发现确实是空间少后,能够降低磁盘空间限制。配置文件文档中具体说明了怎样通过设置disk_free_limit来降低磁盘空间的限制。

消息接收:

本文档通过receive.py来完毕消息队列中消息的接收并输出显示出来。相同,首先须要连接到rabbitmq server。连接方法如上。

然后确保消息队列已经存在。

通过queue_declare 方法能够创建消息队列。他们能够多次运行该方法。

但仅仅有第一次运行时才会创建。

或许你会问为什么我们在前面运行过该方法,为什么还需再次调用该方法呢?假设你能确定以及运行过该方法,那么就能够不用反复运行。但假设我们不确定是否运行过该方法时。

在多个程序中反复调用该方法来确保消息队列已经存在也不失为一种好的解决方法。

TIPS:想要查看哪些rabbitMQ已经存在和消息队列中有多少消息。能够通过rabbitmqctl 工具查看:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3l1bmxpbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

从消息队列中接收消息略微复杂些。其通过预先在消息队列中声明一个回调函数callback来完毕。当我们接收一条消息后,回调函数将会被pika库调用。回调函数函数体能够将对应的内容显示在屏幕上:

然后,我们须要通知rabbitmq特定的回调函数来接收来自“hello”消息队列中的消息:

在通知rabbitmq之前。我们也须要确保消息队列已经存在。

这在我们之前调用queue_declare函数后就已经完毕了该确认工作。

No_ack參数在后面会具体介绍。

最后我们将进入通过一个循环来等待接收数据并在须要时执行回调函数(即收到消息后):

rabbitmq 入门基础(一)的更多相关文章

  1. RabbitMQ 入门系列:2、基础含义理解:链接、通道、队列、交换机

    系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...

  2. RabbitMQ 入门系列:3、基础含义:持久化、排它性、自动删除、强制性、路由键。

    系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...

  3. RabbitMQ 入门系列:3、基础编码:官方SDK的引用、链接创建、单例改造、发送消息、接收消息。

    系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...

  4. RabbitMQ 入门系列:5、基础编码:交换机的进阶介绍及编码方式。

    系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...

  5. RabbitMQ入门与使用篇

    介绍 RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue)协议的开源实现.用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面都非常的优秀 ...

  6. [转]RabbitMQ入门教程(概念,应用场景,安装,使用)

    原文地址:https://www.jianshu.com/p/dae5bbed39b1 RabbitMQ 简介 RabbitMQ是一个在AMQP(Advanced Message Queuing Pr ...

  7. RabbitMQ 入门指南——安装

    RabbitMQ好文 Rabbitmq Java Client Api详解 tohxyblog-博客园-rabbitMQ教程系列 robertohuang-CSDN-rabbitMQ教程系列 Rabb ...

  8. RabbitMQ入门:总结

    随着上一篇博文的发布,RabbitMQ的基础内容我也学习完了,RabbitMQ入门系列的博客跟着收官了,以后有机会的话再写一些在实战中的应用分享,多谢大家一直以来的支持和认可. RabbitMQ入门系 ...

  9. .NET 环境中使用RabbitMQ RabbitMQ与Redis队列对比 RabbitMQ入门与使用篇

    .NET 环境中使用RabbitMQ   在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的 ...

随机推荐

  1. String和八种基本数据类型互相转换

    //String转换为对应的八种基本数据类型 String str="100"; //Value out of range. Value:"200" Radix ...

  2. 树莓派-USB存储设备自动挂载

    简单介绍实现命令行下USB存储设备自动挂载的方法,Linux gnome/kde窗口环境下有移动存储的管理程序,可以实现自动挂载移动存储设备,但是在命令行下 通常需要用mount命令手动挂载USB存储 ...

  3. eclipse中server 没有tomcat选项

    eclipse集成Tomcat: 打开eclipse - 窗口 - 首选项 - 服务器 - 运行时环境 找到Tomcat然后添加. eclipse添加插件: 开发WEB项目时要集成Tomcat可以并不 ...

  4. Android第三方登陆之新浪微博Weibo篇(原生登陆授权)

    前言 Android第三方登录可以说是非常的常见,今天主要先说一下新浪微博第三方登陆授权. SDK版本支持 SDK v3.0已经发布了支持iPhone和Android的版本. 须将你的应用的包名签名信 ...

  5. 1C课程笔记分享_StudyJams_2017

    课程1C 概述 课程1C是创建一个生日贺卡应用的实践课程,所以本篇笔记分享主要记录个人的实践过程,此外分享一些比较零散的知识点. Drawable文件夹 Drawable文件夹是Android项目统一 ...

  6. I2C controller core之Bit controller(04)

    4) detect start/stop condition START- falling edge on SDA while SCL is high;  STOP -  rising edge on ...

  7. 学习廖雪峰的Python教程之数据类型

    数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...

  8. redis 主从复制 redis 探索

    http://blog.csdn.net/column/details/12804.html

  9. 08--MOOC--C/C++ 根据年月日计算星期几

    计算任何一天是星期几的几种算法 一:常用公式 W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D Y是年份数,D是这一天在这一年中的累积天数,也 ...

  10. Android 性能测试初探(四)

    书接上文 Android 性能测试初探(三) 自从 cpu及内存后,GPU 这个词对于 PC 性能测试者也不陌生了,什么 3Dmax,安兔兔之类的第三方软件让 GPU 在移动端性能测试领域都知晓,但对 ...