简介 

    官网 https://www.rabbitmq.com/ 

    RabbitMQ 是用erlang语言开发的消息组件,erlang属于爱立信,是为通讯设计的语言 

    RabbitMQ在2010年被SpringSource收购 

    RabbitMQ在2013年被并入Pivotal公司 


消息组件分两种 

    一种是JMS,代表作ActiveMQ 

    一种是AMQP,代表作 

        KafKa(大数据时代的产物), 

        RabbitMQ(老一辈消息组件,应用最为广泛) 

性能分析 

    JMS(慢)的消息组件工作在应用层,要对数据进行解析后才能应用,不支持跨平台 

    AMQP(快) 的消息组件工作在传输层,不用对数据进行解析,所以支持跨平台 

    所以AMQP的性能是要高于JMS的 


安装erlang开发环境 

    首先要先安装GCC GCC-C++ Openssl等模块 

        yum install gcc-c++ 

        yum -y install ncurses-devel 


下载erlang source 包 

    http://erlang.org/download/otp_src_19.0.tar.gz 
解压包 

    tar -zxvf otp_src_19.0.tar.gz 

进入包里,执行(/opt/modules/erlang是我安装目录) 

    ./configure --prefix=/usr/local/erlang 

看到如下界面,表示成功 

    ********************************************************************* 

    **********************  APPLICATIONS DISABLED  ********************** 

    ********************************************************************* 


    jinterface     : No Java compiler found 

    odbc           : ODBC library - link check failed 


    ********************************************************************* 

    ********************************************************************* 

    **********************  APPLICATIONS INFORMATION  ******************* 

    ********************************************************************* 


    wx             : wxWidgets not found, wx will NOT be usable 


    ********************************************************************* 

    ********************************************************************* 

    **********************  DOCUMENTATION INFORMATION  ****************** 

    ********************************************************************* 


    documentation  : 

                     fop is missing. 

                     Using fakefop to generate placeholder PDF files. 


    ********************************************************************* 


编绎 

    执行 make(这一步是真的慢) 

安装 

    执行make install 

添加环境变量 

    把我安装路径/usr/local/erlang/bin路径添加到etc 下面的 profile 文件 

    vim /etc/profile 

    export ERLANG_HOME=/usr/local/erlang 

    export PATH=$PATH:$ERLANG_HOME/bin: 


让配置生效 

    source /etc/profile 


测试erlang是否安装成功 

    输入erl进入erlang控制台,输入io:format("hello world"). 打印hello world,输入halt().退出erl控制台 

    [root@localhost ~]# erl 

    Erlang/OTP 19 [erts-8.2] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false] 


    Eshell V8.2  (abort with ^G) 

    1> io:format("hello world"). 

    hello worldok 

    2> halt(). 

    [root@localhost ~]# 


RabbitMQ的官方文件不是tar.gz文件,而是xz文件,要对其进行解压缩 

    [root@localhost erlang]# xz -d /tmp/rabbitmq-server-generic-unix-3.6.6.tar.xz 

    此时会得到一个tar文件,在对tar文件进行解压缩,不能带z而用-xvf 


    [root@localhost tmp]# tar -xvf /tmp/rabbitmq-server-generic-unix-3.6.6.tar -C /usr/local/ 



启动RabbigMQ 

    [root@localhost sbin]# rabbitmq-server start 

后台方式运行 

    #service rabbitmq-server start 

见到如下界面,表示启动成功 

              RabbitMQ 3.6.6. Copyright (C) 2007-2016 Pivotal Software, Inc. 

  ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/ 

  ##  ## 

  ##########  Logs: /usr/local/rabbitmq/var/log/rabbitmq/rabbit@localhost.log 

  ######  ##        /usr/local/rabbitmq/var/log/rabbitmq/rabbit@localhost-sasl.log 

  ########## 

              Starting broker... 

 completed with 0 plugins. 



查看rabbitmq的命令 

    [root@localhost sbin]# rabbitmqctl --help 


增加用户名(yns),密码(123456),此时这个用户还不是管理员 

    [root@localhost sbin]# rabbitmqctl add_user yns 123456 


把用户放入管理员组(administrator) 

    [root@localhost sbin]# rabbitmqctl set_user_tags yns administrator 


查看用户 

    [root@s1376 sbin]# rabbitmqctl list_users 

    Listing users ... 

    guest    [administrator] 

    yns    [administrator] 



启动rabbitmq的web服务,就可以通过浏览器访问(http://192.168.88.141:15672),并进行配置 15672 

    [root@localhost sbin]# rabbitmq-plugins enable rabbitmq_management 

    The following plugins have been enabled: 

      mochiweb 

      webmachine 

      rabbitmq_web_dispatch 

      amqp_client 

      rabbitmq_management_agent 

      rabbitmq_management 


    Applying plugin configuration to rabbit@localhost... started 6 plugins. 



设置用户生成虚拟主机权限 

    http://192.168.88.141:15672 --> admin --> Name下的 yns --> set Permission(生成用户权限) 


查看设置是否成功 

    http://192.168.88.141:15672 --> admin --> Users 

    Name Tags Can access virtual hosts    Has password 

    guest administrator    /    ● 

    yns   administrator    /    ● 




/*************** 以下是rabbitMQ的使用 **************/ 

创建消息队列:队列可以手工在web创建,也可以通过程序自动创建,以下演示手工创建 


    http://192.168.88.141:15672 --> queues --> add new queue 


    Name:(队列的名字) 

    Durability:(消息是否持久) 

        durable(持久,如果RabbitMQ重启,未被消费的消息仍然存在) 

        Transient(知暂的,如果RabbitMQ重启,未被消费的消息就被清空) 

    Auto delete:(是否自动删除yes) 


    Add queue:(创建队列) 



为了区分各各队列的作用空间,RabbitMQ设置了“虚拟主机”,“交换空间” 


虚拟主机,可以区分不同用户的操作空间 

创建虚拟主机,此时的虚拟主机不属于任何用户 

    http://192.168.88.141:15672 --> admin --> Virtual Hosts --> 输入虚拟主机的名字hello --> Add a new virtual host 

为虚拟主机设置用户 

    hello --> 选择用户 --> Set permission 



交换空间Exchange --> 绑定队列Queue --> 消费者 

    广播模式:fanout 一条消息会被所有的消费者处理 

    直连模式:direct 交换空间与队列通过routingkey辨别彼此的消费关系,只有routingkey相同,才能消费 

    主题模式:topic  与直连模式类似,只不过通过不同的routingkey把消息发给不同的消费者 





/**************** 以下是RabbitMQ与Spring的整合 ****************/