RabbitMq安装

RabbitMq安装
RabbitMq安装

RabbitMq安装

1、先安装依赖语言

yum -y install epel-release wget

wget https://https://www.360docs.net/doc/a74339097.html,/erlang-solutions-1.0-1.noarch.rpm

rpm -Uvh erlang-solutions-1.0-1.noarch.rpm

rpm --import

https://https://www.360docs.net/doc/a74339097.html,/rpm/erlang_solutions.asc

yum -y install erlang

安装RabbitMQ

yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto socat

wget

https://www.360docs.net/doc/a74339097.html,/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm

做集群

先修改两台主机的hosts文件

vim /etc/hosts

192.168.1.101 centosa

192.168.1.127 centosb

CENTOSA主机

[root@centosa ~]# rabbitmq-server -detached

[root@centosa ~]# rabbitmqctl status

[root@centosa rabbitmq]# vim /var/lib/rabbitmq/.erlang.cookie CVRJQYDDIDZCRIFTABSH

#这一步是查看.erlang.cookie,一会要用这个cookie替换CENTOSB上的cookie

CENTOSB主机

[root@centosb ~]# rabbitmq-server -detached

[root@centosb ~]# rabbitmqctl stop_app

[root@centosb ~]# vim /var/lib/rabbitmq/.erlang.cookie

CVRJQYDDIDZCRIFTABSH

#把这个替换成和A一样的否则会出现这们的错误

[root@centosb ~]# rabbitmqctl join_cluster --ram rabbit@centosa

Clustering node rabbit@centosb with rabbit@centosa ...

Error: unable to connect to nodes [rabbit@centosa]: nodedown

DIAGNOSTICS

===========

attempted to contact: [rabbit@centosa]

rabbit@centosa:

* connected to epmd (port 4369) on centosa

* epmd reports node 'rabbit' running on port 25672

* TCP connection succeeded but Erlang distribution failed

* Authentication failed (rejected by the remote node), please check the Erlang cookie

current node details:

- node name: 'rabbitmq-cli-51@centosb'

- home dir: /var/lib/rabbitmq

- cookie hash: g+x9Zp3HvZ9+HSYvrc0B7Q==

[root@centosb ~]# rabbitmqctl join_cluster --ram rabbit@centosa

Clustering node rabbit@centosb with rabbit@centosa ...

[root@centosb ~]# rabbitmqctl cluster_status

Cluster status of node rabbit@centosb ...

[{nodes,[{disc,[rabbit@centosa]},{ram,[rabbit@centosb]}]},

{alarms,[{rabbit@centosa,[]}]}]

在A主机上也可以看到同样的信息了

[root@centosa rabbitmq]# rabbitmqctl cluster_status

Cluster status of node rabbit@centosa ...

[{nodes,[{disc,[rabbit@centosa]},{ram,[rabbit@centosb]}]},

{running_nodes,[rabbit@centosa]},

{cluster_name,<<"rabbit@centosa">>},

{partitions,[]},

{alarms,[{rabbit@centosa,[]}]}]

[root@centosa rabbitmq]#

管理:

[root@centosa ~]# /etc/init.d/rabbitmq-server start|stop #启动和停止

[root@centosa ~]# rabbitmq-plugins enable rabbitmq_management #启用管理插件[root@centosa ~]# rabbitmqctl add_user admin admin #添加admin用户,密码:admin [root@centosa ~]# rabbitmqctl set_user_tags admin administrator #设置为管理员[root@centosa ~]# rabbitmqctl set_permissions -p / admin ".*"".*"".*" #赋权

[root@centosa ~]# rabbitmqctl list_user_permissions admin

Listing permissions for user "admin" ...

/ .* .* .*

可同时在B机器上也能查看到同样的结果

[root@centosb ~]# rabbitmqctl list_user_permissions admin

Listing permissions for user "admin" ...

/ .* .* .*

WEB监控

http://192.168.1.107:15672

Epmd Port:4369 程序用

Beam.smp port:15672 WEB监控用

几点注意:

保证集群中至少有一个磁盘类型的节点以防数据丢失,在更改节点类型时尤其要注意。

若整个集群被停掉了,应保证最后一个down掉的节点被最先启动,若不能则要使用forget_cluster_node命令将其移出集群

若集群中节点几乎同时以不可控的方式down了此时在其中一个节点使用force_boot命令重启节点

参考:

https://www.360docs.net/doc/a74339097.html,/man/rabbitmqctl.1.man.html#Server%20Status

https://www.360docs.net/doc/a74339097.html,/zyz511919766/article/details/41896747

https://www.360docs.net/doc/a74339097.html,/huoyunshen88/article/details/33738393

RabbitMQ的应用场景以及基本原理介绍

RabbitMQ的应用场景以及基本原理介绍 1.背景 RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现。 2.应用场景 2.1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并行的方式 (1)串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端。这有一个问题是,邮件,短信并不是必须的,它只是一个通知,而这种做法让客户端等待没有必要等待的东西. (2)并行方式:将注册信息写入数据库后,发送邮件的同时,发送短信,以上三个任务完成后,返回给客户端,并行的方式能提高处理的时间。

假设三个业务节点分别使用50ms,串行方式使用时间 150ms,并行使用时间100ms。虽然并性已经提高的处理时间,但是,前面说过,邮件和短信对我正常的使用网站没有任何影响,客户端没有必要等着其发送完成才显示注册成功,英爱是写入数据库后就返回. (3)消息队列 引入消息队列后,把发送邮件,短信不是必须的业务逻辑异步处理 由此可以看出,引入消息队列后,用户的响应时间就等于写入数据库的时间+写入消息队列的时间(可以忽略不计),引入消息队列后处理后,响应时间是串行的3倍,是并行的2倍。2.2 应用解耦 场景:双11是购物狂节,用户下单后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口.

这种做法有一个缺点: 当库存系统出现故障时,订单就会失败。(这样马云将少赚好多好多钱^ ^)订单系统和库存系统高耦合. 引入消息队列 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。库存系统:订阅下单的消息,获取下单消息,进行库操作。 就算库存系统出现故障,消息队列也能保证消息的可靠投递,不会导致消息丢失(马云这下高兴了). 流量削峰 流量削峰一般在秒杀活动中应用广泛 场景:秒杀活动,一般会因为流量过大,导致应用挂掉,为了解决这个问题,一般在应用前端加入消息队列。 作用: 1.可以控制活动人数,超过此一定阀值的订单直接丢弃(我为

RabbitMQ基本知识介绍

RabbitMQ基础概念详细介绍 引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。 消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)。本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一。 RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。下面将重点介绍RabbitMQ中的一些基础概念,了解了这些概念,是使用好RabbitMQ的基础。 ConnectionFactory、Connection、Channel ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑。ConnectionFactory为Connection的制造工厂。 Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。 Queue Queue(队列)是RabbitMQ的内部对象,用于存储消息,用下图表示。

RabbitMQ搭建过程指南

RabbitMQ安装指南 1.系统编译环境 yum -y install gcc glibc-devel make ncurses-devel openssl-devel autoconf yum -y install unixODBC unixODBC-devel yum -y install tk yum -y install mysql-connector-odbc 2.RabbitMQ所需的附属包安装 2.1.erlang安装 tar -zxf otp_src_R14B.tar.gz cd otp_src_R14B ./configure --prefix=/usr/local/otp_src_R14B make make install 2.2.simplejson安装 Simplejson依赖于Python环境的提前安装,默认Python环境安装成功,版本在2.6.6。 wget https://www.360docs.net/doc/a74339097.html,/packages/source/s/simplejson/simplejson-2.1.3.tar.gz tar -xzvf simplejson-2.1.3.tar.gz cd simplejson-2.1.3 python setup.py build python setup.py install 在安装过程中暂时还没明白simplejson在rabbitmq里边是做什么用途的。

2.3.xmlto安装 wget https://https://www.360docs.net/doc/a74339097.html,/releases/x/m/xmlto/xmlto-0.0.23.tar.gz tar -xzvf xmlto-0.0.23.tar.gz cd xmlto-0.0.23 ./configure --prefix=/usr/local/xmlto make & make install Centos发行版Linux中还可以直接通过yum install -y xmlto安装处理 3.Centos下RabbitMQ安装 开发环境使用的是centos6.6,因此此处介绍centos环境下rabbitmq安装过程,其他Linux 发行版的请查阅相关文档即可。 wget https://www.360docs.net/doc/a74339097.html,/releases/rabbitmq-server/v3.4.4/rabbitmq-server-3.4.4.tar.gz tar -xzvf rabbitmq-server-3.4.4.tar.gz cd rabbitmq-server-3.4.4 make make install TARGET_DIR=/usr/local/rabbitmq SBIN_DIR=/usr/local/rabbitmq/sbin \ MAN_DIR=/usr/local/rabbitmq/man cd /etc/rabbitmq vim rabbitmq-env.conf # 此处为rabbitmq默认约定的环境变量配置文件 配置内容明细为: RABBITMQ_NODE_IP_ADDRESS=192.168.1.78 RABBITMQ_NODE_PORT=5672 HOSTNAME=xftest0 RABBITMQ_NODENAME=rmq01 RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbitmq.config RABBITMQ_MNESIA_BASE=/etc/rabbitmq/data RABBITMQ_LOG_BASE=/var/log/rabbitmq RABBITMQ_PLUGINS_DIR=/usr/local/rabbitmq/plugins vim rabbitmq.config # 此处为rabbitmq配置文件,明细为: 参考地址为:https://www.360docs.net/doc/a74339097.html,/configure.html#config-items

posix消息队列使用全面介绍

POSIX消息队列是linux进程间通信的重要方式,下面按照创建,使用,关闭的顺序讲述了POSIX消息队列的使用方法: 创建POSIX消息队列: mq_open #include mqd_t mq_open(const char *name,int oflag,int mode,mq_addr *attr); 参数说明: Name:消息队列的名字字符串,必须以’/’开头,否则会出错。 Oflag: 表示打开的方式, 1.首先必须说明读写方式,可以使以下的值之一: O_RDONLY:建立的队列是只读的 O_WRONLY:建立的队列是只写的 O_RDWR:建立的队列是可读可写 2.必须有O_CREATE,说明是创建消息队列。 3.还有可选的选项: O_NONBLOCK:说明在创建的队列上发送和接收消息时,如果没有资源,不会 等待,之间返回,如果不设置这个选项,缺省是会等待。 O_EXCL:在创建队列时,检测要创建的队列的名字是否已经存在了,如果已存 在,函数会返回出错 可以以或的方式形成Oflag,例如:O_RDWR|O_CREAT|O_EXCL Mode:是一个可选参数,在oflag中含有O_CREA T标志且消息队列不存在时,才需要提供该参数。表示默认的访问权限,这个权限和文件访问的权限是相同的,取值也 相同。 Mode可以由多个值组合而成,如:S_IRUSR|S_IWUSR,队列的所有者有读和 写的权限。 Attr:指向结构struct mq_attr的指针。我们可以在创建队列时通过这个结构设置队列的最大消息数和每个消息的最大长度。 struct mq_attr { long mq_flags; // 0或者O_NONBLOCK,说明是否等待

RabbitMQ高级使用指南

RabbitMQ高级使用指南

一、RabbitMQ简介 1、介绍 RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面都非常的优秀。是当前最主流的消息中间件之一。 RabbitMQ官网:https://www.360docs.net/doc/a74339097.html, 2、AMQP AMQP是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,同样,消息使用者也不用知道发送者的存在。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 3、系统架构

key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。 如上图所示:AMQP里主要说两个组件:Exchange和Queue。绿色的X就是Exchange ,红色的是Queue ,这两者都在Server端,又称作Broker,这部分是RabbitMQ实现的,而蓝色的则是客户端,通常有Producer和Consumer两种类型。 4、几个概念 ?P:为Producer,数据的发送方。 ?C:为Consumer,数据的接收方。 ?Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。 ?Queue:消息队列载体,每个消息都会被投入到一个或多个队列。 ?Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。 ?Routing Key:路由关键字,exchange根据这个关键字进行消息投递。 ?vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。 ?channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

ubuntu系统下RabbitMQ安装和配置详细步骤(step by step)

RabbitMQ安装需要安装较多的依赖包,之前如果安装过RabbitMQ-server必须要先彻底删除。 重装的ubuntu系统(ubuntu server)的开发环境几乎是裸的,再重新编译安装erlang需要一些关键库。 1. gcc/g++、make等开发工具 Bash代码 1.sudo apt-get install build-essential 2. 其它Erlang用到的关键库 Bash代码 1.sudo apt-get install libncurses5-dev 2.sudo apt-get install m4 3.sudo apt-get install libssl-dev 3. 此外还有一些非关键库也可以装上,不然make也通不过 Bash代码 1.sudo apt-get install libc6 (Ubuntu 9.10以后自动带这个,所以不 用再装了) 2.sudo apt-get install unixodbc unixodbc-dev ODBC方式提供对传统 关系数据库支持 3.sudo apt-get install freeglut3-dev libwxgtk2.8-dev 4. 安装JDK,需要这个编译JInterface sudo apt-get install sun-java6-jdk 安装后设置环境变量JAVA_HOME和PATH,并在/usr/bin中设置java和javac 的符号链接: Bash代码 1.sudo ln -s /usr/local/jdk1.6.0_20/bin/java /usr/bin/java 2.sudo ln -s /usr/local/jdk1.6.0_20/bin/javac /usr/bin/javac 5. 在R13B03后,帮助文档的生成方式有了变化,要想自动生成帮助文件,需要安装xsltproc和 Bash代码 1.sudo apt-get install xsltproc

RabbitMQ的应用场景以及基本原理介绍

RabbitMQ 的应用场景以及基本原理介绍 1. 背景 RabbitMQ 是一个由erlang 开发的AMQP(Advanved Message Queue) 的开源实现。 2. 应用场景 2.1 异步处理 场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1. 串行的方式;2.并行的方式 (1) 串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信, 以上三个任务全部完成后才返回给客户端。这有一个问题是,邮件,短信并不是必须的,它只是一个通知,而这种做法让客户端等待没有必要等待的东西. (2) 并行方式:将注册信息写入数据库后,发送邮件的同时,发送短信, 以上三个任务完成后,返回给客户端,并行的方式能提高处理的时间。

假设三个业务节点分别使用50ms, 串行方式使用时间150ms, 并行使用时间100ms 。虽然并性已经提高的处理时间,但是,前面说过,邮件和短信对我正常的使用网站没有任何影响,客户端没有必要等着其发送完成才显示注册成功,英爱是写入数据库后就返回. (3) 消息队列 引入消息队列后,把发送邮件,短信不是必须的业务逻辑异步处理 由此可以看出,引入消息队列后,用户的响应时间就等于写入数据库的时间+写入消息队列的时间(可以忽略不计),引入消息队列后处理后,响应时间是串行的3 倍,是并行的2 倍。2.2 应用解耦 场景:双11 是购物狂节,用户下单后,订单系统需要通知库存 系统,传统的做法就是订单系统调用库存系统的接口

这种做法有一个缺点: 当库存系统出现故障时,订单就会失败。(这样马云将少赚好多好多钱八八)订单系统和库存系统高耦合 引入消息队列 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。库存系统:订阅下单的消息,获取下单消息,进行库操作。 就算库存系统出现故障,消息队列也能保证消息的可靠投递 不会导致消息丢失(马云这下高兴了). 流量削峰 流量削峰一般在秒杀活动中应用广泛 场景:秒杀活动,一般会因为流量过大,导致应用挂掉,为了解决这个问题,一般在应用前端加入消息队列。 作用: 1. 可以控制活动人数,超过此一定阀值的订单直接丢弃(我

4.1消息队列服务

通过认证服务的学习,我们可以以不同的身份访问企业云平台,可以通过研发部的账户登录研发部,可以通过业务部访问业务部的资源,也可以通过IT 工程部的身份登录查看整个系统的运行状况;下面我们继续学习消息服务(RabbitMQ )、镜像服务(Glance )和计算控制服务(Nova ),了解这3个组件是如何为平台的正常运行提供支撑的。 了解RabbitMQ 、Glance 和Nova 的基本概念。 理解3种服务的服务流程和工作机制。 掌握3种服务的基本操作及常见运维。 消息队列服务 在日常的工作生活中,消息传递是一个必不可少的需求。在大型软件的内部信息交换和外部信息传递中,消息传递都是不可或缺的。在系统间通信窗体的最基本方法是socket ,但是这是一个最底层的协议,所以在使用时需要程序来调用。 在进行后序的学习过程之前,小李首先要了解消息服务的基本状况和使用的情景,以及OpenStack 的RPC (远程呼叫机制)的运行机制。 1.消息队列 AMQP 是一种标准化的消息中间件协议,全称为高级消息队列协议(advanced message queuing protocol )。可以让不同语言、不同系统的应用互相通信,并提供一个简单统一的模型和编程接口。这样,就可以采用各种语言和平台来实现自身的应用,当需要和其他系统通信时,只要承认AMQP 协议即可。 2.Rabbitmq 消息服务 RabbitMQ 是一个基于AMQP 协议的高级消息中间件,它主要的技术特点是可用性, 学习目标 项目 基础控制服务 四

OpenStack 云计算基础架构平台技术与应用 52 提示 available )高可用性集群。 1.了解消息队列AMQP 消息队列AMQP 服务架构,如图4-1所示。 AMQP 中有3个重要的角色,如图4-2所 示。 Publisher :消息的发出者。 Exchange :消息的传递者。 Consumer :消息的接收者。 用户可以模拟写信作为其工作的方式来说 明。为了传递给收件人,首先需要用信封把信 的内容装起来,然后在信封上写好收件人的信 息,再把信放到邮筒里;后面邮局会拿到信然 后根据信封上的收件人信息来看最终把信给 谁。写信的人就是那个Publisher ,邮局就是 Exchange ,收件人就是Consumer 。 不同的Consumer 会创建不同的Queue (消息队列),然后将对应的Exchange 绑定到Queue 上。在消息的传递过程中,Publisher 不会直接的把Message 放到Queue 中,也不管Message 如何分发。Publisher 只管准备好消息,然后交给 Exchange ,而Exchange 做的事情也很简单,一手从Publisher 拿到消息,然后就把消息放入Queue 中。 对于Exchange ,是放到某一个Queue 中,还是放到多个Queue ?实际上,在Publisher 发出消息的时候会附加一个条件,Exchange 会根据这个条件来决定发送的方法,这个条件就是 routingkey 。 图4-2 AMQP 消息传递示意图 2.了解Rabbitmq 消息服务 Rabbitmq 架构图,如图4-3所示。 通过上面这张应用相结合的结构图既能够清晰的看清楚整体的send Message 到 图4-1 AMQP 架构图

程序员必知RabbitMQ

RabbitMQ 是中小型企业常用的消息中间件,也是互联网公司面试经常问到的技术点,如果你了解并熟悉 RabbitMQ 对于你的面试、实际工作都会有比较大的帮助;本文希望能让更多的开发人员快速了解 RabbitMQ 相关知识点,分享是一种信念,让我们一起努力。 1. 应用场景说明 2. 理论介绍 3. 重要特性 4. 消息模型 5. 下载安装基于 Linux 命令 6. 基于 Spring Boot 访问核心 API 说明 7. 简单代码实例 8. 监控管理 Web UI 简单介绍 一、应用场景说明 首先我们以实际的用户下单支付场景为例,其业务主流程如下: 用户提交订单—> 生成订单—> 发消息(短信&微信推送)—> 支 付—> 回调通知订单支付成功 上面的流程我们可以拆分为两个模块:订单模块和支付模块。在订单模块中主流程为生成订单之前的过程,在支付模块中回调通知订单是用户支付完后,第三方支付渠道(比如微信)通知支付回调网关,支付回调网关调用订单模块的回调接口。 从上述分析我们知道: ?发消息如果是同步发送,则会影响主流程业务,比如发送消息慢,则会影响订单服务的性能,考虑到发送消息的状态不是强一致的,所以我们采用异步发送机制。 ?订单模块和支付模块存在依赖关系,这样就会出现,订单模块的回调通知服务接口修改了,则支付模块的代码也会跟着修改,反之也是一样;还有如果订单服务网络超时等异常了则支付的回调通知网关也势必受到影响,所以我们想办法让其解耦。 而 MQ 正好满足两大特性异步 + 解耦,其中 RabbitMQ 被企业广泛使用。 二、RabbitMQ 理论介绍 RabbitMQ(以下简称 RQ )是部署最广泛的开源的消息中间件, 由 Erlang 语言开发。

消息队列(Message Queue)简介及其使用

消息队列(Message Queue)简介及其使用 利用MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信。消息处理为您提供了有保障的消息传递和执行许多业务处理的可靠的防故障方法。 MSMQ与XML Web Services和.Net Remoting一样,是一种分布式开发技术。但是在使用XML Web Services或.Net Remoting组件时,Client端需要和Server端实时交换信息,Server需要保持联机。MSMQ则可以在Server离线的情况下工作,将Message临时保存在Client端的消息队列中,以后联机时再发送到Server端处理。 显然,MSMQ不适合于Client需要Server端及时响应的这种情况,MSMQ以异步的方式和Server端交互,不用担心等待Server端的长时间处理过程。 虽然XML Web Services和.Net Remoting都提供了[OneWay]属性来处理异步调用,用来解决Server端长方法调用长时间阻碍Client端。但是不能解决大量Client负载的问题,此时Server接受的请求快于处理请求。 一般情况下,[OneWay]属性不用于专门的消息服务中。 1. 基本术语和概念(Basic terms and concepts) ―消息‖是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。 消息被发送到队列中。―消息队列‖是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。

RabbitMQ双活架构设计

RabbitMQ双活架构设计

消息服务中间件在日常工作中用途很多,如业务之间的解耦,其中RabbitMQ 是比较容易上手且企业使用比较广泛的一种,本文主要介绍有货在使用RabbitMQ 的一些实践与尝试。 有货的RabbitMQ 部署架构采用双中心模式,在两套数据中心中各部署一套RabbitMQ 集群,各中心的RabbitMQ 服务除了需要为业务提供正常的消息服务外,中心之间还需要实现部分队列消息共享。 消息传递的可靠性 场景1:生产者与消费者互不感知,怎么确认生产者已将消息投递到RabbitMQ 服务端,又如何确认消费者已经消费了该消息? 消息Publish 可靠性 首先来谈谈Publisher 的可靠发送,如果使用标准AMQP 0-9-1,保证消息不丢失的唯一方法是使用事务,但使用事务模式会导致服务端吞吐量急剧下降。为了弥补这一点,AMQP 引入了确认机制。它模仿了协议中已经存在的消费者ACK 确认机制。Publisher 通过发送confirm.select 命令开启

确认模式,随后RabbitMQ 服务端在收到消息后会进行确认,Publisher 会收到服务端发送的确认回复。要注意:无法在通道中同时使用确认模式与事务模式,只可二选一。 消息Consume 可靠性 再说说如何保证队列中消息至少被消费一次。当RabbitMQ 交付消息给Consumer 时,需要确认Message 已被投递到Consumer。Acknowledgements 作用,Consumer 发送确认消息通知RabbitMQ 服务端已收到消息或已成功消费消息。看下消息生产、消费的流程图: 在1 号的位置需要开启Channel 的Confirm 模式,接收RabbitMQ 服务端发送的确认消息已到达的Ack 信息;在3 号的位置,消费者在成功消费或者业务处理失败后,需要告诉RabbitMQ 服务端,消息已被消费成功或者失败;当然在某些网络故障中,数据包丢失可能意味着中断的TCP 连接需要较长时间才能够被操作系统检测到。通过心跳功能,确保应用程序层及时发现连接中断。

rabbitmq文档整理

Rabbitmq 初识rabbitmq RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。如果不熟悉AMQP,直接看RabbitMQ的文档会比较困难。不过它也只有几个关键概念,这里简单介绍 几个概念说明: Broker:简单来说就是消息队列服务器实体。 Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。 Queue:消息队列载体,每个消息都会被投入到一个或多个队列。 Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。 Routing Key:路由关键字,exchange根据这个关键字进行消息投递。 vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。 producer:消息生产者,就是投递消息的程序。 consumer:消息消费者,就是接受消息的程序。 channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。 由Exchange,Queue,RoutingKey三个才能决定一个从Exchange到Queue的唯一的线路。 消息队列的使用过程大概如下: (1)客户端连接到消息队列服务器,打开一个channel。 (2)客户端声明一个exchange,并设置相关属性。

(3)客户端声明一个queue,并设置相关属性。 (4)客户端使用routing key,在exchange和queue之间建立好绑定关系。 (5)客户端投递消息到exchange。 exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。 exchange也有几个类型,完全根据key进行投递的叫做Direct交换机,例如,绑定时设置了routing key为”abc”,那么客户端提交的消息,只有设置了key为”abc”的才会投递到队列。对key进行模式匹配后进行投递的叫做Topic交换机,符号”#”匹配一个或多个词,符号”*”匹配正好一个词。例如”abc.#”匹配”abc.def.ghi”,”abc.*”只匹配”abc.def”。还有一种不需要key的,叫做Fanout交换机,它采取广播模式,一个消息进来时,投递到与该交换机绑定的所有队列。 RabbitMQ支持消息的持久化,也就是数据写在磁盘上,为了数据安全考虑,我想大多数用户都会选择持久化。消息队列持久化包括3个部分: (1)exchange持久化,在声明时指定durable => 1 (2)queue持久化,在声明时指定durable => 1 (3)消息持久化,在投递时指定delivery_mode => 2(1是非持久化) 如果exchange和queue都是持久化的,那么它们之间的binding也是持久化的。如果exchange和queue两者之间有一个持久化,一个非持久化,就不允许建立绑定。 安装开发环境和库 1.将目录中的librabbitmq.so.1 放到目录/usr/local/lib/librabbitmq.so.1 2.安装rabbitm需要的环境和库 yum install -y ncurses-devel yum install gcc yum install g++ yum install cmake yum install make yum install php yum install mysql yum install php-process yum install php-devel yum install mysql-server #安装php的amq支持扩展 wget https://www.360docs.net/doc/a74339097.html,/get/amqp-1.0.3.tgz tar zxvf amqp-1.0.3.tgz cd amqp-1.0.3 /usr/bin/phpize ./configure --with-php-config=/usr/bin/php-config --with-amqp make && make install

消息队列介绍及原理

消息队列MQ技术的介绍和原理 (2010-03-14 00:00:00) 转载▼ 标签: 杂谈 消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。 消息中间件概述 消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。 在分布式计算环境中,为了集成分布式应用,开发者需要对异构网络环境下的分布式应用提供有效的通信手段。为了管理需要共享的信息,对应用提供公共的信息交换机制是重要的。 设计分布式应用的方法主要有:远程过程调用(PRC)--分布式计算环境(DCE)的基础标准成分之一;对象事务监控(OTM)--基于CORBA的面向对象工业标准与事务处理(TP)监控技术的组合;消息队列(MessageQueue)--构造分布式应用的松耦合方法。 (a)分布计算环境/远程过程调用(DCE/RPC) RPC是DCE的成分,是一个由开放软件基金会(OSF)发布的应用集成的软件标准。RPC模仿一个程序用函数引用来引用另一程序的传统程序设计方法,此引用是过程调用的形式,一旦被调用,程序的控制则转向被调用程序。 在RPC实现时,被调用过程可在本地或远地的另一系统中驻留并在执行。当被调用程序完成处理输入数据,结果放在过程调用的返回变量中返回到调用程序。RPC完成后程序控制则立即返回到调用程序。因此RPC模仿子程序的调用/返回结构,它仅提供了Client(调用程序)和Server(被调用过程)间的同步数据交换。 (b)对象事务监控(OTM) 基于CORBA的面向对象工业标准与事务处理(TP)监控技术的组合,在CORBA规范中定义了:使用面向对象技术和方法的体系结构;公共的Client/Server程序设计接口;多平台间传输和翻译数据的指导方针;开发分布式应用接口的语言(IDL)等,并为构造分布的 Client/Server应用提供了广泛及一致的模式。

RabbitMQ基础概念详细介绍

RabbitMQ基础 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据? 你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎? 如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。 消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)。本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一。 RabbitMQ简介 AMQP(Advanced Message Queuing Protocol高级消息队列协议),是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 ConnectionFactory、Connection、Channel ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。 ●Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑; ●ConnectionFactory为Connection的制造工厂; ●Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中 完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等; Queue Queue(队列)是RabbitMQ的内部对象,用于存储消息,用下图表示。 RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费。 多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。

相关主题
相关文档
最新文档