介绍
消息传送使软件应用程序能够连接。应用程序能够彼此互相连接,作为一个大的应用程序的组件,或者用户设备和数据。
消息是异步的,通过分离发送和接收数据来解耦合应用程序。
你可以认为数据传输,非阻塞的运作或者推送通知。又或你想使用发布/订阅,异步处理,或者工作队列。
所有这一切都是模式,他们是组成消息的一部分。
RabbitMQ 是一个消息代理——一个消息传送的中介。它给你的应用程序提供一个通用平台去发送和接收消息,
你的消息在被接收之前会待在一个可靠的地方。
安装
安装Erlang :
http://www.erlang.org/download.html
然后是Rabbit:
http://www.rabbitmq.com/getstarted.html
入门
常用命令:
rabbitmq-server start|stop|restart
来启动、停止、重启rabbitmq。
在正式应用之前,我们先在RabbitMQ里创建一个vhost,加一个用户,并设置该用户的权限。
使用rabbitmqctl客户端工具,在根目录下创建”/pyhtest”这个vhost:
rabbitmqctl add_vhost /pyhtest
创建一个用户名”pyh”,设置密码”pyh1234″:
rabbitmqctl add_user pyh pyh1234
术语:
生产无非意味着发送。一个发送消息的程序就是一个生产者。我们将它描绘如下:
一个队列是邮箱的名字。它存活于RabbitMQ内部,尽管消息流经RabbitMQ和你的应用程序,它们可以仅仅存在于队列内部,队列没有被绑定到任何范围。
将队列和它的名字一起,画成下面那样:
消费者也有类似的意义去接受消息,消费者是一个等待接受消息的程序。我们将它画成:
在RabbitMQ中消息模型的核心思想是:生产者从不直接地发送任何消息到队形中。其实,很多时候生产者根本不知道一个消息将被交付给任何队列。
相反,生产者仅仅发送消息到exchange,exchange是很简单的,一方面它从生产者那里接受消息,另一方面它发布消息到队列中。Exchange必须
知道如何正确地处理一个消息的接收。它应该被添加到一个特定的队列?它应该被追加到许多队列?或者它应该被丢弃。它的定义如下:
有效的exchange类型是: direct, topic, headers和 fanout。我们将重点关注最后一个——fanout,让我们创建一个fanout类型的exchange,并称它为“logs”:
channel.exchangeDeclare("logs", "fanout");
fanout类型的exchange相当简单,你大概可以从名字里猜到:它仅仅广播所有它接收到消息到它所知道的的队列中。