您好,欢迎访问三七文档
RabbitMQ简介•RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。协议•AMQP,即AdvancedMessageQueuingProtocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。几个基本概念•Exchange:交换机,决定了消息路由规则;•Queue:消息队列;•Channel:进行消息读写的通道;•Bind:绑定了Queue和Exchange,意即为符合什么样路由规则的消息,将会放置入哪一个消息队列;使用过程•消息队列的使用过程大概如下:•(1)客户端连接到消息队列服务器,打开一个channel。•(2)客户端声明一个exchange,并设置相关属性。•(3)客户端声明一个queue,并设置相关属性。•(4)客户端使用routingkey,在exchange和queue之间建立好绑定关系。•(5)客户端投递消息到exchange。Exchange类型•exchange有几种类型•1、完全根据key进行投递的叫做Direct交换机,例如,绑定时设置了routingkey为”abc”,那么客户端提交的消息,只有设置了key为”abc”的才会投递到队列。•2、对key进行模式匹配后进行投递的叫做Topic交换机,符号”#”匹配一个或多个词,符号”*”匹配正好一个词。例如”abc.#”匹配”abc.def.ghi”,”abc.*”只匹配”abc.def”。•3、还有一种不需要key的,叫做Fanout交换机,它采取广播模式,一个消息进来时,投递到与该交换机绑定的所有队列。•4、headers类型的Exchange不依赖于routingkey与bindingkey的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。持久化•RabbitMQ支持消息的持久化,为了数据安全考虑,我想大多数用户都会选择持久化。消息队列持久化包括3个部分:(1)exchange持久化,在声明时指定durable=1(2)queue持久化,在声明时指定durable=1(3)消息持久化,在投递时指定delivery_mode=2(1是非持久化)应用场景-名词解释•RabbitMQ是一个消息代理,从“生产者”接收消息并传递消息至“消费者”。•“生产者”也即message发送者以下简称P,相对应的“消费者”乃message接收者以下简称C,•message通过queue由P到C,多个P可向同一queue发送message,多个C可从同一个queue接收message。应用场景-1“HelloWord”•一个P向queue发送一个message,一个C从该queue接收message并打印。应用场景-2workqueues•将耗时的消息处理通过队列分配给多个consumer来处理,我们称此处的consumer为worker,我们将此处的queue称为TaskQueue,其目的是为了避免资源密集型的task的同步处理,也即立即处理task并等待完成。相反,调度task使其稍后被处理。也即把task封装进message并发送到taskqueue,worker进程在后台运行,从taskqueue取出task并执行job,若运行了多个worker,则task可在多个worker间分配。应用场景-3Publish/Subscribe•在应用场景2中一个message(task)仅被传递给了一个comsumer(worker)。现在我们设法将一个message传递给多个consumer。这种模式被称为publish/subscribe。此处以一个简单的日志系统为例进行说明。该系统包含一个log发送程序和一个log接收并打印的程序。由log发送者发送到queue的消息可以被所有运行的log接收者接收。因此,我们可以运行一个log接收者直接在屏幕上显示log,同时运行另一个log接收者将log写入磁盘文件。应用场景4-Routing•应用场景3中构建了简单的log系统,可以将logmessage广播至多个receiver。现在我们将考虑只把指定的message类型发送给其subscriber,比如,只把errormessage写到logfile而将所有logmessage显示在控制台。应用场景5-topic•topic类型的exchange中routing_key中可以包含两个特殊字符:“*”用于替代一个词,“#”用于0个或多个词。资源与管理•官网•管理方式:•管理界面与httpapi•curl-i-uguest:guest•命令行•rabbitmqctlstatus•rabbitmqctllist_users•rabbitmq-pluginslist•rabbitmqctllist_vhosts•rabbitmq-pluginsenablerabbitmq_management##启用web管理•rabbitmqctladd_usermqadmin123456##添加管理员用户•rabbitmqctlset_user_tagsmqadminadministrator##设置mqadmin这个用户为管理员角色•rabbitmqctldelete_userguest##删除默认用户•rabbitmqctllist_queues谢谢
本文标题:rabbitmq
链接地址:https://www.777doc.com/doc-5017199 .html