学习rabbitMQ心得
来源:互联网 发布:绘制平面图的软件 编辑:程序博客网 时间:2024/05/17 00:57
这几天公司要用rabbitmq实现公司消息发送队列,我就在闲暇之余研究了一下这个
由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成,因此也是继承了这些优点...
开发的工具
关于MQ,百度百科上的解释是:MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。
wget http:
//www
.rabbitmq.com
/releases/rabbitmq-server/v3
.0.4
/rabbitmq-server-generic-unix-3
.0.4.
tar
.gz
tar
-xzvf rabbitmq-server-generic-unix-3.0.4.
tar
.gz
mv
rabbitmq_server-3.0.4/
/usr/local/
cd
/usr/local/rabbitmq_server-3
.0.4
/sbin
.
/rabbitmq-server
到这里会出现一个报错信息: ./rabbitmq-server: line 86: erl: command not found 这是因为erlong指定了安装路径,在系统的PATH中找不到。只要export PATH=$PATH:/usr/local/erlong/bin 就可以了。
如果为了rc.local启动方便,可以将 export PATH=$PATH:/usr/local/erlong/bin 这一行写入到 rabbitmq-server 文件中:
执行后,ps -aux 一下,看到进程中有/usr/local/erlong/lib/erlang/erts-5.10.1/bin/epmd -daemon 和 /usr/local/erlong/lib/erlang/erts-5.10.1/bin/beam.smp 就OK了
AMPQ协议为了能够满足各种消息队列需求,在概念上比较复杂。首先,rabbitMQ启动默认是没有任何配置的,需要客户端连接上去,设置交换机等才能工作。不把这些基础概念弄清楚,后面程序设计就容易产生问题。
vhosts : 虚拟主机。
为了将不同类型的消息进行区分,设置了交换机与路由两个概念。比如,将A类型的消息发送到名为‘C1’的交换机,将类型为B的发送到'C2'的交换机。当客户端连接C1处理队列消息时,取到的就只是A类型消息。进一步的,如果A类型消息也非常多,需要进一步细化区分,比如某个客户端只处理A类型消息中针对K用户的消息,routingkey就是来做这个用途的。
对于交换机,有两个重要的概念:
A,类型。有三种类型: Fanout类型最简单,这种模型忽略routingkey;Direct类型是使用最多的,使用确定的routingkey。这种模型下,接收消息时绑定'key_1'则只接收key_1的消息;最后一种是Topic,这种模式与Direct类似,但是支持通配符进行匹配,比如: 'key_*',就会接受key_1和key_2。Topic貌似美好,但是有可能导致不严谨,所以还是推荐使用Direct。
B,持久化。指定了持久化的交换机,在重新启动时才能重建,否则需要客户端重新声明生成才行。
需要特别明确的概念:交换机的持久化,并不等于消息的持久化。只有在持久化队列中的消息,才能持久化;如果没有队列,消息是没有地方存储的;消息本身在投递时也有一个持久化标志的,PHP中默认投递到持久化交换机就是持久的消息,不用特别指定。
讲了这么多,才讲到队列呀。事实上,队列仅是针对接收方(consumer)的,由接收方根据需求创建的。只有队列创建了,交换机才会将新接受到的消息送到队列中,交换机是不会在队列创建之前的消息放进来的。换句话说,在建立队列之前,发出的所有消息都被丢弃了。下面这个图比RabbitMQ官方的图更清楚——Queue是属于ReceiveMessage的一部分。
AMQP中的基本概念:
Queue:队列,可以看做消息发送的目的地,接受消息的必备参数。若无consumer接受,将会一直存在服务器内存中。
Exchange:交换机,发送消息必须指定的参数,一般需要和routingkey组合路由到指定的队列中去。
ExchangeType:交换机类型,有四种:direct(严格按照key寻找queue),fanout(不需要key只要是绑定到该交换机的queue都能收到消息),topic(正则匹配key寻找queue),system(不常用),自定义(不常用)
RoutingKey:路由键,配合Exchange确定发送消息的目标队列,在Fanout类型的Exchange中忽略此参数。
Binding:绑定关系,将交换机与队列绑定,依据交换机类型确定不同参数。
Virtual hosts:虚拟机,感觉像是命名空间的概念,为了区分不同类别的资源
Spring-amqp是Spring为了方便开发RabbitMQ程序而做的一个第三方类库。
- 学习rabbitMQ心得
- RabbitMQ学习之:(一)初识、概念及心得
- RabbitMQ学习之:(一)初识、概念及心得
- RabbitMQ学习之:(一)初识、概念及心得
- RabbitMQ学习
- RabbitMQ 学习
- rabbitmq学习
- rabbitmq学习
- rabbitmq学习
- RabbitMQ学习
- RabbitMQ学习
- rabbitmq学习
- RabbitMQ学习
- RabbitMQ学习
- RabbitMQ学习
- RabbitMQ学习
- 研究RabbitMQ的一些心得
- rabbitmq 学习-6-rabbitmq基础
- Windows下查看进程与线程的相关工具
- Java String,Date类型转换
- UVALive 3635 Pie 二分查找
- VisualVM远程监控
- NSBundle、[NSBundle mainBundle] 详解
- 学习rabbitMQ心得
- ubuntu12.04 PPA 安装 java7
- Struts2基础学习(3)-结果集
- struts1和struts2安全性比较
- README.TXT
- C可变参数函数 实现
- 如何使图片在DIV 中水平垂直居中
- LVS环境搭建及图形化管理(Pacemaker管理+heartbeat心跳+ipvs(DR)+ldirector健康检查及转发)
- hdu-4615 Partition