第一章 前言
1.1 文档总体介绍
该文档针对rabbitmq进行了相关搭建工作以及相关文档的摘录包括java连接mq进行消息发送、消息监听并消费的内容
1.2 使用范围
使用初学者搭建简单环节,进行java简单的测试使用
1.3 作用
通过这个文档让之前的经历得到总结升华,让以后再做这件事的时候可以更加迅速,另外也可以让自己在以后的角度去看待搭建简单环节以及进行测试工作,并为自己以后更深入的研究做铺垫。
第二章 环境搭建
注:相关安装包读者可到rabbitMQ官网自行下载,官网地址如下:http://www.rabbitmq.com/news.html#2018-07-05T17:00:00+00:00
1.1 安装erlang
将下载包放到相关位置,执行命令如下:
tar -xvf otp_src_19.1.tar.gz
到解压的包中执行如下命令:
yum -y install ncurses-devel ./configure make install
检查是否启动成功,命令以及正确结果如下图:erl –version
1.2 安装rabbitmq
安装:将压缩包解压即可 tar –xvf rabbitmq-server-generic-unix-3.5.8.tar.gz
启动:cd到sbin目录执行:./rabbitmq-server start
后台启动:./rabbitmq-server–detached
停止:./rabbitmqctl stop
1.3 安装管理控制台并设置外部访问权限
启动web管理界面
rabbitmq-plugins enablerabbitmq-management
增加访问用户,默认用户guest只能本地访问。
rabbitmqctl add_user admin admin
设置角色:
rabbitmqctl set_user_tags adminadministrator
设置默认vhost(“/”)访问权限
rabbitmqctl set_permissions -p “/” admin“.” “.” “.*”
浏览器访问:http://IP:15672
用户名admin,密码admin进行登录
第三章 java例子实战
1.1 java发送小例子
public static void main(String[] args) { try{ //创建连接工厂 ConnectionFactory factory = new ConnectionFactory(); //设置RabbitMQ相关信息 factory.setHost("192.168.37.144"); factory.setUsername("admin"); factory.setPassword("admin"); factory.setPort(5672); //创建一个新的连接 Connection connection = factory.newConnection(); //创建一个通道 Channel channel = connection.createChannel(); // 声明一个队列 // channel.queueDeclare("aaatext", false, false, false, null); //发送消息到队列中 String message = "Hello RabbitMQ"; channel.basicPublish("aaatext", "aaatext", null, message.getBytes("UTF-8")); System.out.println("Producer Send +'" + message + "'"); //关闭通道和连接 channel.close(); connection.close(); }catch (Exceptione){ e.printStackTrace(); } }
1.2 java监控消息并消费小例子
private void init() { try{ //mq用户名 String mqUserName = globalService.getConfigValue(Global.MQUSERNAME); //mq密码 String mqPassword = globalService.getConfigValue(Global.MQPASSWORD); //mqip String mqHost = globalService.getConfigValue(Global.MQHOST); //mq端口号 int mqPort = Integer.valueOf(globalService.getConfigValue(Global.MQPORT)); //回调消费 String mqBackSendRoute = globalService.getConfigValue(Global.MQBACKSENDROUTE); AddRabbitMqUtil.getMsg(mqUserName,mqPassword,mqHost,mqPort,mqBackSendRoute); }catch (Exceptione){ e.printStackTrace(); } }
public static void getMsg(String mqUserName,StringmqPassword,String mqHost,int mqPort, String mqBackSendRoute)throws Exception{ Connection conn = createConnection(mqUserName,mqPassword, mqHost, mqPort); Channel channel = createChannel(conn); QueueingConsumer consumer = new QueueingConsumer(channel); channel.basicConsume(mqBackSendRoute,true, consumer); while (true) { QueueingConsumer.Deliverydelivery = consumer.nextDelivery(); String message = new String(delivery.getBody()); System.out.println("收到消息'"+ message + "'"); //调用外部接口向上层应用推送转后的素材信息 } }
第四章:遇到的坑
1.1 mq和erlang版本不统一导致的问题:报错信息:
Warning: Mochiweb enabled and Erlangversion 18 detected.
Enabling plugins that depend on Mochiweb is not supported on this Erlang
version. At least R13B01 is required.
RabbitMQ will not start successfully in this configuration. You *must*
disable the Mochiweb plugin, or upgrade Erlang.
原因:开始我mq用的是rabbitmq-server-generic-unix-2.7.0.tar.gz
erlang用的是:otp_src_R16B02.tar.gz
导致版本不一致报了上面的错误,后来将mq修改为:rabbitmq-server-generic-unix-3.5.8.tar.gz 以上问题解决。
1.2消息发送没报错,但是mq没接收到消息
原因:由于服务器存储占满导致通过java代码发送的消息没有被mq接收,但是发送过程中并没有出现异常情况;另外通过mq控制台模拟发送消息是可以的。