RabbitMQ 安装和配置03

rabbitMQ说明文档

rabbitMQ是什么

RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP)的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成(因此也是继承了这些优点)。

首先介绍 AMQP 和一些基本概念:

当前各种应用大量使用异步消息模型,并随之产生众多消息中间件产品及协议,标准的不一致使应用与中间件之间的耦合限制产品的选择,并增加维护成本。 AMQP 是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与消息中间件可传递消息,并不受客户端 / 中间件不同产品,不同开发语言等条件的限制。 当然这种降低耦合的机制是基于与上层产品,语言无关的协议。 AMQP 协议是一种二进制协议,提供客户端应用与消息中间件之间异步、安全、高效地交互。从整体来看, AMQP 协议可划分为三层。

这种分层架构类似于 OSI 网络协议,可替换各层实现而不影响与其它层的交互。AMQP 定义了合适的服务器端域模型,用于规范服务器的行为 (AMQP 服务器端可称为 broker) 。

Model 层决定这些基本域模型所产生的行为,这种行为在 AMQP 中用 ”command”表示,在后文中会着重来分析这些域模型。

Session 层定义客户端与 broker 之间的通信 ( 通信双方都是一个 peer ,可互称做partner) ,为 command 的可靠传输提供保障。

Transport 层专注于数据传送,并与 Session 保持交互,接受上层的数据,组装成二进制流,传送到 receiver 后再解析数据,交付给 Session 层。 Session 层需要Transport 层完成网络异常情况的汇报,顺序传送 command 等工作。

AMQP 当中有四个概念非常重要:虚拟主机( virtual host ),交换机( exchange),队列( queue )和绑定( binding )。

虚拟主机( virtual host ):一个虚拟主机持有一组交换机、队列和绑定。为什么需要多个虚拟主机呢? RabbitMQ 当中,用户只能在虚拟主机的粒度进行权限控制。因此,如果需要禁止 A 组访问 B 组的交换机 / 队列 / 绑定,必须为 A 和 B 分别创建一个虚拟主机。每一个 RabbitMQ 服务器都有一个默认的虚拟主机 “/” 。

队列( Queue ):由消费者建立的,是 messages 的终点,可以理解成装消息的容器。消息一直存在队列里,直到有客户端或者称为 Consumer 消费者连接到这个队列并将 message 取走为止。队列可以有多个。

交换机( Exchange ):可以理解成具有路由表的路由程序。每个消息都有一个路由键( routing key ),就是一个简单的字符串。交换机中有一系列的绑定( binding),即路由规则( routes )。交换机可以有多个。多个队列可以和同一个交换机绑定,同时多个交换机也可以和同一个队列绑定。(多对多的关系)

三种交换机:

1.   Fanout Exchange (不处理路由键):一个发送到交换机上的消息都会被转发到与该交换机绑定的所有队列上。 Fanout 交换机发消息是最快的。

2.   Direct Exchange (处理路由键):如果一个队列绑定到该交换机上,并且当前要求路由键为 X ,只有路由键是 X 的消息才会被这个队列转发。

3.   Topic Exchange (将路由键和某模式进行匹配,可以理解成模糊处理):路由键的词由 “.” 隔开,符号 “#” 表示匹配 0 个或多个词,符号 “*” 表示匹配不多不少一个词。因此 “ 
     audit.#
    ” 能够匹配到 “ 
     audit.irs.corporate
    ” ,但是 “ 
     audit.*
    ” 只会匹配到 “ 
     audit.irs
    ”

具体例子可以看下图

持久化:队列和交换机有一个创建时候指定的标志durable,直译叫做坚固的。durable的唯一含义就是具有这个标志的队列和交换机会在重启之后重新建立,它不表示说在队列当中的消息会在重启后恢复。那么如何才能做到不只是队列和交换机,还有消息都是持久的呢?

但是首先一个问题是,你真的需要消息是持久的吗?对于一个需要在重启之后回复的消息来说,它需要被写入到磁盘上,而即使是最简单的磁盘操作也是要消耗时间的。如果和消息的内容相比,你更看重的是消息处理的速度,那么不要使用持久化的消息。

当你将消息发布到交换机的时候,可以指定一个标志“Delivery Mode”(投递模式)。根据你使用的AMQP的库不同,指定这个标志的方法可能不太一样。简单的说,就是将 Delivery Mode设置成2,也就是持久的即可。一般的AMQP库都是将Delivery Mode设置成1,也就是非持久的。所以要持久化消息的步骤如下:

1.   将交换机设成 durable 。

2.   将队列设成 durable 。

3.   将消息的 Delivery Mode 设置成 2 。

绑定( Bindings )如何持久化?我们无法在创建绑定的时候设置成 durable 。没问题,如果绑定了一个 durable 的队列和一个 durable 的交换机, RabbitMQ 会自动保留这个绑定。类似的,如果删除了某个队列或交换机(无论是不是 durable ),依赖它的绑定都会自动删除。

注意两点:

1.   RabbitMQ 不允许绑定一个非坚固( non-durable )的交换机和一个 durable 的队列。反之亦然。要想成功必须队列和交换机都是 durable 的。

2.   一旦创建了队列和交换机,就不能修改其标志了。例如,如果创建了一个 non-durable 的队列,然后想把它改变成 durable 的,唯一的办法就是删除这个队列然后重现创建。因此,最好仔细检查创建的标志。

消息队列(MQ)使用过程

几个概念说明:

1.  Broker:简单来说就是消息队列服务器实体。

2.  Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。

3.  Queue:消息队列载体,每个消息都会被投入到一个或多个队列。

4.  Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。

5.  Routing Key:路由关键字,exchange根据这个关键字进行消息投递。

6.  vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。

7.  producer:消息生产者,就是投递消息的程序。

8.  consumer:消息消费者,就是接受消息的程序。

9.  channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

消息队列的使用过程大概如下:

1.  客户端连接到消息队列服务器,打开一个channel。

2.  客户端声明一个exchange,并设置相关属性。

3.  客户端声明一个queue,并设置相关属性。

4.  客户端使用routing key,在exchange和queue之间建立好绑定关系。

5.  客户端投递消息到exchange。

6.  exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。

时间: 2024-10-15 01:40:18

RabbitMQ 安装和配置03的相关文章

RabbitMQ 安装和配置

Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模式.镜像模式 单一模式:最简单的情况,非集群模式. 及单实例服务. 普通模式:默认的集群模式. queue创建之后,如果没有其它policy,则queue就会按照普通模式集群.对于Queue来说,消息实体只存在于其中一个节点,A.B两个节点仅有相同的元数据,即队列结构,但队列的元数据仅保存有一份,即

RabbitMQ安装和配置

RabbitMQ: MQ:message queue.MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过 队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求.其中较为成熟的MQ产品有IBM WEBSPHERE MQ

CentOS7 erlang RabbitMQ 安装并且配置远程访问

对于安装RabbitMQ,我也是着实废了一番力气,版本下载很多,但是都存在编译问题,编译不通过,报错找不到错误原因,甚至error都是***这样的存在. 其他的依赖, 我没有测试过,因为我环境中存在: Python,simplejson,安装 介于RabbitMQ是依赖erlang语言. erlang安装比较重要,版本问题,编译问题,不能存在任何问题,否则RabbitMQ是绝对安装不了的,即便是二进制包也不能使用 可以使用yum安装,我找了很久,用下面的方式成功 1.下载源码wget http:

AMQP之RabbitMQ安装与配置

刚开始接触RabbitMQ,今天尝试安装,具体流程如下,参照了一些网上同行的经验,环境如下图: rabbitmq版本:3.1.5 下载地址:http://www.rabbitmq.com/releases/rabbitmq-server/v3.1.5/rabbitmq-server-3.1.5.tar.gz 文件下载目录:/home/gao/server以下简称为当前目录 准备工作:安装依赖环境 yum install build-essential openssl openssl-devel

linux学习:持续集成篇--Maven私有库和本地库的安装与配置-03

如果构建的Maven 项目本地仓库没有对应的依赖包,那么就会去Nexus 私服去下载,那么如果Nexus 私服也没有此依赖包,就回去远程中央仓库下载依赖,Nexus 私服下载成功后再下载至本地Maven 库供项目引用. maven私服器Sonatype Nexus的安装与配置 1.安装 1.1 下载 Nexus(这里使用的是:nexus-2.11.2-03-bundle.tar.gz) http://www.sonatype.org/nexus/go/ 1.2 解压:因为解压后有两个文件夹,所以

RabbitMQ安装,配置

安装(centos系统) 第一步: 下载rabbitmq安装包 第二步: 安装erlang 1) 安装Erlang Solutions仓库到你的系统(目的在于让你可以使用yum安装到最新版本的erlang, 如果不设置, yum安装的erlang版本通常太低)  wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm  rpm -Uvh erlang-solutions-1.0-1.noarch.r

RabbitMQ安装与配置

1.安装 Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装RabbitMQ之前要先安装Erlang. erlang:http://www.erlang.org/download.html rabbitmq:http://www.rabbitmq.com/download.html 注意:1.默认安装的Rabbit MQ 监听端口是:5672 2.配置 1. 安装完以后erlang需要手动设置ERLANG_HOME 的系统变量. 输入:set ERLANG_HOME=C:\P

RabbitMQ学习系列(二): RabbitMQ安装与配置

1.安装 Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装RabbitMQ之前要先安装Erlang. erlang:http://www.erlang.org/download.html rabbitmq:http://www.rabbitmq.com/download.html 注意: 1.现在先别装最新的 3.6.3 ,本人在安装完最新的版本,queue 队列有问题,降到了 3.6.2 就解决了. 2.默认安装的Rabbit MQ 监听端口是:5672 2.配置 1.

RabbitMQ安装、配置

RabbitMQ是最流行开源消息系统,已经超过35000个RabbitMQ生产部署在各种规模的企业.RabbitMQ是轻量级.易部署自建机房或云上.它支持多种消息协议,RabbitMQ支持分布式部署满足高可用.高扩展的需求.RabbitMQ能运行在各种操作系统.云环境并且提供各种开发工具支持多种开发语言.这篇文章是个人生产环境部署的操作,各位大神可以根据自己环境做调整,欢迎各位的批评与建议.[温馨提示:在复制命令时注意先放在编辑器里面格式化下] 第一步:下载正确的软件 Socat下载连接: ht