RebbitMQ介绍及安装

1.什么是消息中间件?

消息队列中间件 (Message Queue Middleware ,简称为 MQ)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传和消息排队模型,它可以在分布式环境下扩展进程间的通信。

2.消息中间件两种传递模式

消息队列中间件,也可以称为消息队列或者消息中间件。它一般有两种传递模式:点对点(P2P, Point-to-Point) 模式和发布/订阅 (Pub/Sub) 模式。点对点模式是基于队列的,消息生产发送消息到队列,消息消费者从队列中接收消息,队列的存在使得消息的异步传输成为可能。布订阅模式定义了如何向 个内容节点发布和订阅消息,这个内容节点称为主题 (topic) ,主题可以认为是消息传递的中介,消息发布者将消息发布到某个主题,而消息订阅者则从主题中订阅消息。主题使得消息的订阅者与消息的发布者互相保持独立,不需要进行接触即可保证消息的传递,发布/订阅模式在消息的一对多广播时采用。

3.消息中间件的作用

解耦:在项目启动之初来预测将来会碰到什么需求是极其困难的。消息中间件在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口,这允许你独立地扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束即可

冗余〈存储) 有些情况下,处理数据的过程会失败。消息中间件可以把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。在把 个消息从消息中间件中删除之前,需要你的处理系统明确地指出该消息己经被处理完成,从而确保你的数据被安全地保存直到你使用完毕。

扩展性: 因为消息中间件解耦了应用的处理过程,所以提高消息入队和处理的效率是很容易的,只要另外增加处理过程即可,不需要改变代码,也不需要调节参数。

削峰: 在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流 并不常见。如果以能处理这类峰值为标准而投入资源,无疑是巨大的浪费 使用消息中间件能够使关键组件支撑突发访问压力,不会因为突发的超负荷请求而完全崩惯

可恢复性: 当系统一部分组件失效时,不会影响到整个系统 消息中间件降低了进程间的耦合度,所以即使 个处理消息的进程挂掉,加入消息中间件中的消息仍然可以在系统恢复后进行处理

顺序保证: 在大多数使用场景下,数据处理的顺序很重要,大部分消息中间件支持 定程度上的顺序性。

缓冲: 在任何重要的系统中,都会存在需要不同处理时间的元素。消息中间件通过 个缓冲层来帮助任务最高效率地执行,写入消息中间件的处理会尽可能快速 该缓冲层有助于控制和优化数据流经过系统的速度。

异步通信: 在很多时候应用不想也不需要立即处理消息 消息中间件提供了异步处理机制,允许应用把 些消息放入消息中间件中,但并不立即处理它,在之后需要的时候再慢慢处理

4.特点

可靠性: RabbitMQ 使用一些机制来保证可靠性 如持久化、传输确认及发布确认等。

灵活的路由: 在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能,bb tMQ 己经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在 起, 可以通过插件机制来实现自己的交换器。

扩展性: 多个 bbi MQ 节点可以组成一个集群,也可以根据实际业务情况动态地扩展集群中节点。

高可用性: 队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队列仍然可用。

多种协议: bbit 除了原生支持 AMQP 协议,还支持 STOMP MQ 等多种消息中间件协议。

多语言客户端::R bitMQ 几乎支持所有常用语言,比如 Java Python Ruby PHP JavaScript 等。

管理界面: RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息、集群中的节点等。

插件机制:: RabbitMQ 提供了许多插件 以实现从多方面进行扩展,当然也可以编写自己的插件。

5.rebbitMQ安装

第一步,解压安装包,并配置安装目录,这里我们预备安装
/opt/erlang 目录下:

[root@hidden -)# tar zxvf otp_src_19.3.tar.gz 
[root@hidden -)# cd otp_src_19.3 
[root@hidden otp_src_19.3)# ./configure --prefix=/opt/er1ang

第二步,如果出现类似关键报错信息 No curses library functions found 。那么此时需要安装
ncurses ,安装步骤(遇到提示输入 后直接回车即可)如下:

[root@hidden otp_src_19.3)# yum install ncurses-devel

第三步,安装 Erlang:

[root@hidden otp_src_19 . 3)# make 
[root@hidden otp_src_19 . 3)# make install 

如果在安装的过程中出现类似 “No ***** found” 的提示,可根据提示信息安装相应的包,
之后再执行第二或者第三步,直到提示安装完毕为止。

第四步,修改 /etc/profile 配置文件,添加下面的环境变量:

ERLANG HOME=/opt/erlang 
export PATH=$PATH:$ERLANG HOME/bin 
export ERLANG_HOME

最后执行如下命令让配置文件生效

[root@hidden otp_src_19 .3) # source /etc/profile

可以输入 erl 命令来验证 Erlang 是否安装成功,如果出现类似以下的提示即表示安装成功:

[root@hidden -)# erl 
Erlang/OTP 19 [erts-8.1) [source) [64-bit) [smp:4 : 4) [async-threads : 10) [hipe) 
[kernel-poll:false)
Eshell V8 . 1 (abort with ^G ) 
1>

这里选择将 RabbitMQ 安装到与 rlang 个目录 (/ opt) 下面

[root@hidden -]# tar zvxf rabbitmq-server- generic-unix-3.6.10 . tar . gz -c lopt 
[root@hidden - ]# cd lopt 
[root@hidden -]# mv rabbitmq_server-3 . 6.10 rabbitmq

同样修改/etc/profile 文件 添加下面的环境变量

export PATH=$PATH : /opt/rabbitmq/sbin 
export RABBITMQ HOME=/opt/rabbitmq 

之后执行 source/etc/profile 命令让配置文件生效。
在修改了 /etc/profile 配置文件之后,可以任意打开一个 hell 窗口,输入如下命令以
运行 RabbitMQ服务

rabbitmq-server -detached

运行 rabbitmqctl status 命令查看 RabbitMQ 是否正常启动,示例如下:

[root@hidden -]# rabbitmqctl status 
Status of node rabbit@hidden 
[{
    
    pid, 6458} , 
{
    
    running_applications, 
[{
    
    rabbitmq_management , "RabbitMQ Management Console " , " 3 . 6 . 10 " },
{
    
    rabbitmq_management agent , "RabbitMQ Management Agent" , "3 . 6 .1 0 " }, 
{
    
    rabbitmq_web_dispatch, "RabbitMQ Web Dispatcher " , " 3 . 6 . 10 "} , 
{
    
    rabbit, "RabbitMQ " , " 3.6 . 10 "} , 
{
    
    mnesia , "MNESIA CXC 138 12" , " 4 . 14 . 1 " }, 
{
    
    amqp c1ient , "RabbitMQ AMQP Client" , " 3.6.10 " }, 
{
    
    os mon , "CPO CXC 138 46 " , " 2 . 4.1"} , 
{
    
    rabb工 t common , 
"Modules shared by rabb tmq server and rabbitmq-erlang-client " , 
" 3.6 . 10 " }, 
{
    
    compiler, "ERTS CXC 138 10" , " 7 . 0 . 2 " }, 
{
    
    inets, " INETS CXC 138 49 " , " 6 . 3.3" }, 
{
    
    cowboy, " Small , fast , modular HTTP server ." ," 1. 0.4"} , 
{
    
    ranch, " Socket acceptor pool for TCP protocols ." , " 1.3 . 0 " }, 
{
    
    ssl, "Erlang/OTP SSL appl cation" 8.0.2
{
    
    public key Publ 工 c key infrastructure " , " 1 . 2 " }, 
{cowlib, " Support library for manipulating Web protocols." , "1 . 0 . 2 " }, 
{crypto, " CRYPTO " , " 3.7 . 1 " }, 
{sy tax tools, " Syntax tools " , " 2 . 1 " }, 
{asn1 , " The Erlang ASN1 comp 1er vers on 4.0.4" , "4.0.4"} , 
{xmerl , " XML parser " , " 1 . 3.12 " }, 
{sasl, " SASL CXC 138 11 " , " 3 . 0.1 " }, 
{stdlib, "ERTS CXC 138 10 " , " 3 . 1 " }, 
{kernel, "ERTS CXC 138 10 " , " 5 . 1 " }]} ,
...
下边就省略了

如果 RabbitMQ 正常启动 会输出 上所示的信息。当然也可以通过 rabbitmqctl
clu ster sta tus 命令来查看集群信息,目前只有一个 RabbitMQ 服务节点,可以看作单节点
的集群

[root@hidden -]# rabbitmqctl c l uster status 
Cluster status of node rabbit@hidden 
[{
    
    nodes, [{
    
    disc , [rabbit@hidden]}]) , 
{
    
    runn ng nodes, [rabbit@hidden]) , 
{
    
    cluster name , << " rabbit@hidden" >>) , 
{
    
    partitions, [] } , 
{
    
    alarms, [{
    
    rabbit@hidden , []}])]

猜你喜欢

转载自blog.csdn.net/cheers_bin/article/details/115094445