1.RabbitMQ安装 1.1 windows xp版的安装 第一步:下载erlang安装包及rabbitMQ安装包。 http://www.erlang.org/download/otp_win32_R16B01.exe erlang http://www.rabbitmq.com/releases/rabbitmq-server/v3.1.5/rabbitmq-server-windows-3.1.5.zip rabbitmq 第二步:安装erlang 双击otp_win32_R16B01.exe不断下一步直到成功安装结束。 设置环境变量ERLANG_HOME= C:\Program Files\erlx.x.x (具体请根据自己机器的情况)。 第三步:安装RabbitMQ 双击rabbitmq-server-3.1.5.exe不断下一步直到成功安装结束。 设置环境变量RABBITMQ_SERVER=C:\Program Files\rabbitmq_server-x.x.x。 设置环境变量path加入“;%RABBITMQ_SERVER%\sbin”。 运行cmd->rabbitmq-server start,若出现下图,则代表安装成功。 1.2 linux debian版的安装 第一步:下载rabbitMQ安装包 如果是debian6.0以上版本则直接下rabbitmq-sever-2.8以上版本链接如下 http://www.rabbitmq.com/releases/rabbitmq-server/v3.1.5/rabbitmq-server_3.1.5-1_all.deb 如果是debian5.0则需要下载rabbitmq-server-1.8.1 http://ftp.cn.debian.org/debian/pool/main/r/rabbitmq-server/rabbitmq-server_1.8.1-1_all.deb 如果是debian6.0最好下载rabbitmq-server-3.2.0-1 http://packages.debian.org/sid/rabbitmq-server 第二步:安装rabbitmq-server-x.x.x 切换到root用户下在rabbitmq-server-x.x.x 所在文件夹下运行 dpkg -i rabbitmq-server-x.x.x安装rabbitmq-server 结果会提示你rabbitmq-server-x.x.x依赖于一些 xxx.deb这些包需要你去手动下载,下载依赖包方法如下,以下载rabbitmq-server-1.8.1依赖包为例(因为目前许多服务器依然用debian 5.0版本): 首先,点击rabbitmq-server-1.8.1详细介绍地址 http://packages.debian.org/squeeze/rabbitmq-server 寻找到系统提示你依赖的安装包。 用wget address.deb(具体的依赖包链接地址)命令对依赖包一一下载 下载好之后再用dpkg -i 命令依次安装,直到rabbitmq-server-1.8.1.deb安装完成 这里需要注意的是选择的xx.deb必须与你系统的架构是一致的,如下所示 32位系统选择i386 ,64位系统选择amd64 此手动方法虽然笨看上去慢,但确能保证一次安装成功 第三步:启动rabbitmq-server 运行命令Rabbitmq-server start则rabbitmq-server运行成功 1.3 源码版的安装(适用于大部分linux系统) 主要以CentOS release 6.X为例 第一步:下载erlang R14B04源码包.tar.gz https://www.erlang-solutions.com/downloads/download-erlang-otp 第二步:安装erlang R14B04 在安装包下./configure --prefix=/home/erlang make && make install 第三步:下载rabbitmq-3.2.0.tar.gz http://www.rabbitmq.com/releases/rabbitmq-server/v3.2.0/rabbitmq-server-3.2.0.tar.gz 第四步:安装rabbitmq-3.2.0.tar.gz export TARGET_DIR=/home/rabbitmq export SBIN_DIR=/home/rabbitmq/sbin export MAN_DIR=/home/rabbitmq/man export DOC_INSTALL_DIR=/home/rabbitmq/docs 第五步:配置rabbitmq-3.2.0 建立目录/etc/rabbitmq(否则很多插件功能无法运行) 2.RabbitMQ管理 2.1环境变量管理 2.1.1 rabbitmq-env.config 这是一个配置rabbitmq基本环境变量的配置文件,在windows系统中没有此文件,与rabbitmq相关的环境变量直接在系统环境变量中设置。而在linux系统中此文件一开始是不存在的,当rabbitmq启动时会自动从默认的启动角本就读取所有的环境变量,如果你需要自定义环境变量则需要在/etc/rabbitmq/文件夹下创建rabbitmq-env.config来配置相当的环境变量。 以NODENAME为例,该变量代表服务节点的名称,在Windows环境中直接设置RABBITMQ_NODENAME(在windows环境中所有的环境变量都要加入前缀RABBITMQ_NODENAME=hare,在linux环境中在rabbitmq-env.conf文件中加入NODENAME =hare语句,则当rabbitmq服务再次启动时,服务节点名称就会改变为hare@computername。 有关rabbitmq的基本环境变量参照 http://www.rabbitmq.com/relocate.html 主要参数的作用: RABBITMQ_NODE_IP_ADDRESS 代表服务访问IP,可以设置为内网地址,防止外网IP进行访问,达到安全作用 RABBITMQ_NODE_PORT 代表TCP/IP访问端口 RABBITMQ_CONSOLE_LOG 2.2.2 rabbitmq.config 这是一个配置rabbitmq核心应用的配置文件,一开始此文件不存在,服务启动时通过启动角本获取默认的应用配置。如果你想自定义核心应用配置则需要手动创建rabbitmq.config文件。Windows的文件路径为%APPDATA%\RabbitMQ\。Liunx的文件路径etc/rabbitmq/。 此文件的格式与erlang配置文件的格式相同具体如下图所示。详细格式参照erlang配置文件的详细解释。http://www.erlang.org/doc/man/config.html 有关rabbitmq的核心应用变量参照 http://www.rabbitmq.com/configure.html#config-location 2.2 Web管理 在2.8以上版本在命令行中输入rabbitmq-plugins enable rabbitmq_management (linux,windwos都适用),WEB访问链接为http://server-name:15672。3.0以上版本端口号为55672 2.3 命令行管理 主要介绍rabbitmqctl命令集中的几个常用命令 Rabbitmqctl stop 停止rabbitmq service Rabbitmqctl add_user {username} { password} 添加一个用户并给出用户名密码 Rabbitmqctl list_users 列出所有用户 Rabbitmqctl delete_user {username}删除一个用户 Rabbitmqctl add_vhost {vhostpath}添加一个虚拟主机(类似于命名空间) Rabbitmqctl list_vhosts列出所有的虚拟主机 Rabbitmqctl delete_vhost {vhostpath}删除一个虚拟主机 Rabbitmqctl set_permissions [-p vhostpath] {user} {conf} {write} {read}设置虚拟主机的用户访问权限,如下例所示 rabbitmqctl set_permissions -p /myvhost tonyg "^tonyg-.*" ".*" ".*" 此命令授于用户tonyg访问虚拟主机/myvhost中所有命名以“tonyg-”开头的资源,并且具有读和写的权限 Rabbitmqctl clear_permissions [-p vhostpath] {username}删除某一用户访问一个虚拟主机的权限 Rabbitmqctl list_permissions [-p vhostpath]列出此虚拟主机的所有用户权限 Rabbitmqctl list_user_permissions {username}列出用户的权限 Rabbitmqctl list_queue|list_exchanges.......展示出所有资源 Rabbitmqctl status 展示rabbitmq service的状态 3.RabbitMQ持久化 3.1持久化相关的环境变量 RABBITMQ_BASE rabbitmq数据库及日志存放的根目录 RABBITMQ_CONFIG_FILE rabbitmq.config存放的路径 RABBITMQ_MNESIA_BASE rabbitmq数据库存放的根目录 /var/lib/rabbitmq/mnesia/ RABBITMQ_MNESIA_DIR rabbitmq本机结点的存放目录 $RABBITMQ_MNESIA_BASE/本机节点 RABBITMQ_LOG_BASE rabbitmq日志存放的根目录 /var/log/rabbitmq RABBITMQ_LOGS rabbitmq本结点的存放目录 $RABBITMQ_LOG_BASE/本机节点 tail -f /var/log/rabbitmq/rabbit\@vzw5220.log 在屏幕上显示日志 4.RabbitMQ客户端配置(java) 4.1消息生产者 4.1.1建立连接 需要导入rabbitmq-client.jar ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost");//服务名 factory.setPort(5673);//端口号 factory.setVirtualHost("test");//虚拟主机 factory.setUsername("guest");//用户 factory.setPassword("19851225");//密码 Connection connection = (Connection) factory.newConnection(); 4.1.2建立资源 1) 普通队列 Channel channel = connection.createChannel();//创建转输通道 channel.queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments); 创建一个队列,其中: queue代表队列名称 durable代表队列是否持久化 exclusive代表该队列是否是独占的即连接上来时它占用整个网络连接 autoDelete代表当此队列不再被使用时,是否自动销毁 arguments队列的备用参数 2) 多线程队列 Channel channel = connection.createChannel();//创建转输通道 channel.queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments); channel.basicQos(1); 这条语句告诉RabbitMQ在同一时间不要给一个worker一个以上的消息。或者换一句话说, 不要将一个新的消息分发给同一个worker知道它处理完了并且返回了前一个消息的通知标志(acknowledged)替代的,消息将会分发给下一个不忙的worker。 3) 普通中转站 Channel channel = connection.createChannel(); channel.exchangeDeclare(String exchange,String type,boolean durable,boolean autoDelete,boolean internal,Map<String, Object> arguments); 创建一个中转站,基中: exchange代表中转站名称 type代表中转站的使用方式(包含pub/sub,routing,topics) durable代表队列是否持久化 autoDelete代表当此中转站不再被使用时,是否自动销毁 internal代表中转站是否是内部的,如果是内部的将不能直接发信息给客户端 arguments中转站的其它参数 在普通中转站中type要选择“fanout” 4) 路由中转站 Channel channel = connection.createChannel(); channel.exchangeDeclare(ROUTING_EXCHANGE_NAME, "direct"); “direct”代表路由方式 5) 主题中转站 Channel channel = connection.createChannel(); channel.exchangeDeclare(TOPIC_NAME, "topic"); “topic”代表主题方式 4.1.3发送消息 channel.basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) 发送消息,其中: exchange代表中转站名称 routingKey如果是发送消息至队列则是队列名称,如果发送消息至中转站则代表routing的关键字或者topic的主题内容 mandatory如果是true,exchange根据自身类型和消息routeKey无法找到一个符合条件的queue,那么会调用basic.return方法将消息返还给生产者;当为false时,出现上述情形broker会直接将消息扔掉。 immediate如果是true,exchange在将消息route到queue(s)时发现对应的queue上没有消费者,那么这条消息不会放入队列中。当与消息routeKey关联的所有queue(一个或多个)都没有消费者时,该消息会通过basic.return方法返还给生产者 porps代表其它参数,其中如果值为MessageProperties.PERSISTENT_TEXT_PLAIN则消息为持久化消息 body代表二进制消息流 4.1.4关闭连接 channel.close(); connection.close(); 4.2消息消费者 4.2.1建立连接 同生产者 4.2.2连接资源 同生产者 4.2.3消费资源 QueueingConsumer consumer = new QueueingConsumer(channel); channel.basicConsume(String queue, boolean autoAck, String consumerTag,boolean noLocal, boolean exclusive, Map<String, Object> arguments, Consumer callback) 取出一条消息,其中queue代表队列名称,autoAck是否自动应答,如果为真,消息一旦被消费者收到,服务端就知道该消息已经投递,从而从队列中将消息剔除,否则,需要在消费者端手工调用channel.basicAck()方法通知服务端,如果没有调用,消息将会进入unacknowledged状态,并且当消费者连接断开后变成ready状态重新进入队列 consumerTag消费者标识 noLocal如果为真则服务端不会发送给消息者消息 exclusive如果为真则表示这是一个独占连接的消费者 arguments消费者的参数 callback回调具体的消费者 while (true) { QueueingConsumer.Delivery delivery = consumer.nextDelivery(); String message = new String(delivery.getBody()); //利用多线程对消息进行处理 doWork(message); } 4.2.4关闭连接 同生产者 5.rabbitmq的集群配置 5.1 复制.erlang.cookie 第一步:修改hostname服务中.erlang.cookie的权限 Chomd 777 /var/lib/rabbitmq/.erlang.cookie 或者 Chomd 777 /root/.erlang.cookie(根据系统和安装的不同) 第二步:复制hostname中的.erlang.cookie至slavename中的相应位置 将slavename的权限修改回原始状态 Chmod 400 .erlang.cookie 同时将hostname的权限修改回原始状态 Chmod 400 .erlang.cookie 5.2 分别启动各rabbitmq节点 Rabbitmqctl stop Rabbitmq-server –detached 5.3 配置集群hosts 修改每个节点的hosts 61.135.251.157 hostname 220.181.29.243 slavename 5.4 将slavename加入集群rabbitmq Rabbitmqctl stop_app Rabbitmqctl join_cluster rabbit@hostname Rabbitmqctl start_app 5.5 更改slavename的集群类型 Rabbitmqctl stop_app Rabbitmqctl change_cluster_node_type disc/ram Rabbitmqctl start_app Rabbitmqctl cluster_status 5.6 slavename脱离集群 Rabbitmqctl stop_app Rabbitmqctl reset Rabbitmqctl start_app 5.7 设置镜像队列 5.7.1建立镜像规则 第一种情况,向所有的结点镜像队列: rabbitmqctl set_policy ha-all "^ha" '{"ha-mode":"all"}' ha-all: 规则的名称 “^ha”: 正则表达式 '{"ha-mode":"all"}': 参数模式 第二种情况,只向主服务备用机器镜像队列 Rabbitmqctl set_policy ha-backup “^ha” ‘{“ha-mode”: “nodes”, “ha-params”: [“rabbit@yz-20-157”,“rabbit@bjchinanet29-243”], "ha-sync-mode":"automatic"}' 5.7.2建立镜像队列 第一种方法:通过rabbitmq-management创建 第二种方法:通过客户端创建 Map<String, Object> map = new HashMap(); map.put("x-ha-policy", "all"); channel.queueDeclare(QUEUE_NAME, true, false, false, map); 6.负载匀衡配置 6.1 下载代理服务器HAProxy http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz 下载haproxy1.4.24 6.2 安装代理服务器HAProxy tar -zxvf haproxy-1.4.24.tar.gz cd haproxy-1.4.24 make TARGET=linux26 PREFIX=/home/haprpxy make install PREFIX=/home/haproxy cd /home/haproxy mkdir conf cd conf vi haproxy.conf 在此文件中添加如下内容 global log 127.0.0.1 local0 maxconn 4096 chroot /home/haproxy uid 501 gid 501 daemon nbproc 1 pidfile /home/haproxy/logs/haproxy.pid debug defaults log 127.0.0.1 local3 mode http option httplog option httpclose option dontlognull option forwardfor option redispatch retries 2 maxconn 2000 balance roundrobin stats uri /haproxy-stats contimeout 5000 clitimeout 50000 srvtimeout 50000 listen rabbitservice bind 220.181.29.243:8888 mode tcp option tcplog server r1 192.168.51.243:5672 check 详细的配置说明可以参照http://www.linuxidc.com/Linux/2012-07/65350.htm 6.3 HAProxy命令 /home/haproxy/sbin/haproxy -f /home/haproxy/haproxy.conf 启动HAProxy /home/haproxy/sbin/haproxy -f /home/haproxy/haproxy.cfg -st ‘cat /home/haproxy/haproxy.pid’ 重启HAProxy killall haproxy 停止HAProxy 7.rabbitmq日志管理 7.1 安装日志插件 在rabbitmq环境变量中的日志目录只能记录客户端连接或断开的信息,日志信息非常有限,因此如果要想监控其它运行情况,必须安装日志插件rabbitmq-tracing 第一步:在linux命令行中输入rabbitmq-plugins enable rabbitmq_tracing使该插件得以运行 第二步:运行命令rabbitmqctl trace_on打开日志监控,此时会创建两个基于topic的exchange:amq.rabbitmq.trace和amq.rabbitmq.log。 Amq.rabbitmq.trace:表示成功或者失败的消息记录,保证在系统运行过程中每条消息不会丢失。 Amq.rabbitmq.log:记录每次操作的日志,保证在系统运行过程中每次操作记录不会丢失。 第三步:向这两个exchange邦定队列,将routingKey定义为’#’,会监控系统运行的所有操作信息。routingKey也可以自定义,则只监控感兴趣的日志. |
行业聚焦 面试交流 职位推荐 开发视频 技术交流 腾讯微博 新浪微博
友情链接:课课家教育 阿里云 鲜果 W3Cfuns前端网 中国企业家 环球企业家 投资界 传媒梦工场 MSN中文网 Android开发者社区 cnbeta 投资中国网 又拍云存储 美通说传播 IT茶馆 网商在线 商业评论网 TechOrange IT时代周刊 3W创新传媒 开源中国社区 二维工坊 Iconfans 推酷 智能电视网 FreeBuf黑客与极客 财经网 DoNews 凤凰财经 新财富 eoe移动开发者社区 i黑马 网易科技 新浪科技 搜狐IT 创业家 创业邦 腾讯财经 福布斯中文网 天下网商 TechWeb 雷锋网 新浪创业 和讯科技 品途O2O 极客公园 艾瑞网 抽屉新热榜 卖家网 人民网通信频道 拉勾网 创新派 简单云主机
手机版|黑名单|守望者 成才网 在线教育 linux 高级程序设计 C/C++ 大数据
( 蜀ICP备14029946号 )
成都守望者科技有限公司 © 2013-2016 All Rights Reserved