30分钟学玩转RabbitMQ
转载自 http://www.cnblogs.com/learnhow/p/8362289.html
最近在学习RabbitMQ,在网上找了不少资料发现都特高端。动辄集群部署,分布式架构什么的,对于一个初学者实在不够友好。心想求人不如求自己,为什么不自己整理一套资料呢?于是《30分钟学玩转RabbitMQ》诞生。
一、准备工作
据说RabbitMQ是可以部署到Windows环境的,不过作为一个专业级的开发人员怎么能够让这样的事情发生呢?自然我们的准备工作从Linux开始。首先在虚拟机中安装CentOS 7,选择英文,最小安装,默认开启网络以及创建一个root用户:
完成以后进入系统,由于最小安装有一些基本的命令无法使用,因此在进入一下步之前先将ifconfig、vim以及基本的编译环境准备好:
<!-- 安装ifconfig --> yum install net-tools<!-- 安装vim --> yum install yum<!-- 准备基础编译环境 --> yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto
接下来我们从官网下载安装包rabbitmq-server-3.7.2-1.el7.noarch.rpm和otp_src_19.3.tar.gz(千万别问我Erlang是什么,我也是第一次知道这门语言)。上传到虚拟机后执行命令:
<!-- 解压包 --> [root@MiWiFi-R3-srv ~]# tar -xvf otp_src_19.3.tar.gz [root@MiWiFi-R3-srv ~]# ll
[root@MiWiFi-R3-srv ~]# mkdir /usr/local/erlang [root@MiWiFi-R3-srv ~]# cd otp_src_19.3 [root@MiWiFi-R3-srv otp_src_19.3]# ./configure --prefix=/usr/local/erlang --without-javac [root@MiWiFi-R3-srv otp_src_19.3]# make && make install
编译&安装完成以后配置Erlang环境变量:
[root@MiWiFi-R3-srv otp_src_19.3]# vim /etc/profile#追加环境变量到文件末尾 ERL_HOME=/usr/local/erlang PATH=$ERL_HOME/bin:$PATH export ERL_HOME PATH[root@MiWiFi-R3-srv otp_src_19.3]# source /etc/profile
接下来可以正式安装RabbitMQ:
[root@MiWiFi-R3-srv otp_src_19.3]# cd .. [root@MiWiFi-R3-srv ~]# rpm -ivh --nodeps rabbitmq-server-3.7.2-1.el7.noarch.rpm
运行RabbitMQ需要首先开放15672和5672端口:
[root@MiWiFi-R3-srv ~]# firewall-cmd --zone=public --add-port=15672/tcp --permanent [root@MiWiFi-R3-srv ~]# firewall-cmd --zone=public --add-port=5672/tcp --permanent [root@MiWiFi-R3-srv ~]# firewall-cmd --reload
正常情况下RabbitMQ已经安装完成,最后测试一下:
[root@MiWiFi-R3-srv ~]# rabbitmq-plugins enable rabbitmq_management [root@MiWiFi-R3-srv ~]# rabbitmq-server
正常启动以后,我们可以在本地使用浏览器中访问管理页面:http://<虚拟机IP>:15672/
大功告成...
至此,我们的准备工作已经完成了80%。接下来我们需要为RabbitMQ创建用户并赋权。
[root@MiWiFi-R3-srv ~]# rabbitmqctl add_user root root [root@MiWiFi-R3-srv ~]# rabbitmqctl set_user_tags root administrator [root@MiWiFi-R3-srv ~]# rabbitmqctl set_permissions -p / root '.*' '.*' '.*' <!-- 后台启动 --> [root@MiWiFi-R3-srv ~]# rabbitmq-server -detached
重新通过在本地浏览器访问管理页面,输入用户名和密码。
二、简单开发指南
深入的开发案例网上很多,我就不在这里重复的发明轮子了。作为一个指南,这里主要介绍两种开发方式,更加具体的用例我可能会在以后的文章中专门介绍。
1.单独使用——一个简单的消息生产者
通过maven引入依赖
<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.1.1</version> </dependency>
创建生产者:
package com.learnhow.rabbitmq;import java.io.IOException; import java.util.concurrent.TimeoutException;import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory;public class App {// 队列名称public final static String QUEUE_NAME = "Hello.rabbitMQ";public static void main(String[] args) throws IOException, TimeoutException {// 连接工厂ConnectionFactory factory = new ConnectionFactory();// 配置连接属性factory.setHost("192.168.31.244"); // 虚拟机地址factory.setPort(5672); // 端口号factory.setUsername("root"); // 用户名factory.setPassword("root"); // 密码// 得到连接,创建通道Connection connection = factory.newConnection();Channel channel = connection.createChannel();// 声明一个叫Hello.rabbitMQ的队列channel.queueDeclare(QUEUE_NAME, false, false, false, null);String message = "Hello RabbitMQ";// 发送消息channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));// 关闭通道和连接 channel.close();connection.close();} }
执行完成以后切换到浏览器的管理页面:
我们发现刚才在main函数中声明的QUEUE NAME已经出现了。
2.Spring AMQP——与Spring Boot集成
Maven依赖:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version> </parent> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> </dependencies>
Spring Boot启动项,声明测试队列:
package org.dispatcher;import org.springframework.amqp.core.Queue; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean;@SpringBootApplication public class DispatcherApplication {@Beanpublic Queue helloQueue() {return new Queue("helloQueue");}public static void main(String[] args) throws Exception {SpringApplication.run(DispatcherApplication.class, args);} }
消息生产者:
package org.dispatcher.controller;import java.util.Date;import org.springframework.amqp.core.AmqpTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;@Component public class Producer {@Autowiredprivate AmqpTemplate rabbitTemplate;public void send() {String sendMsg = "Hi~ " + new Date();this.rabbitTemplate.convertAndSend("helloQueue", sendMsg);} }
消息接收者:
package org.dispatcher.controller;import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component;@Component @RabbitListener(queues = "helloQueue") public class Receiver {@RabbitHandlerpublic void process(String msg) {System.out.println("Receiver: " + msg);} }
Restful接口:
package org.dispatcher.controller;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;@RestController @RequestMapping("/rabbitmq") public class RabbitMqController {private static final String SUCCESS = "SUCCESS";private static final String FAILURE = "FAILURE";@Autowiredprivate Producer producer;@GetMapping("/push")public String push() {producer.send();return SUCCESS;}}
配置文件application.yml:
server:port: 8081 spring:rabbitmq:host: 192.168.31.244port: 5672username: rootpassword: rootvirtual-host: /publisher-confirms: true
启动Spring Boot,访问:http://localhost:8081/rabbitmq/push,再切换到管理页面:
新的QUEUE NAME证明Spring Boot与RabbitMQ整合成功。
30分钟学玩转RabbitMQ相关推荐
- 30 分钟学 Erlang
30 分钟学 Erlang (一) Shawn_xiaoyu https://www.jianshu.com/p/b45eb9314d1e 本文写给谁看的? 那些已经有过至少一门编程语言基础,并且需要 ...
- 每天30分钟学python-这个工具,30分钟可以把科研人一天的工作都给干完!
原标题:这个工具,30分钟可以把科研人一天的工作都给干完! 一入科研深似海,每逢返校倍忧桑. 被 paper 和发际线上移支配的恐惧要回来了--一个假发片还够用吗? 1 文献看到眼花,科研热点总是无缘 ...
- 【30分钟学完】canvas动画|游戏基础(1):理论先行
前言 本文虽说是基础教程,但这是相对动画/游戏领域来说,在前端领域算是中级教程了,不适合前端小白或萌新.阅读前请确保自己对前端三大件(JavaScript+CSS+HTML)的基础已经十分熟悉,而且有 ...
- 【30分钟学完】canvas动画|游戏基础(7):动量守恒与多物体碰撞
前言 一路沿着本系列教程学习的朋友可能会发现,前面教程中都尽量避免提及质量的概念,很多运动概念也时刻提醒大家这不是真实的物体运动.因为真实的物体运动其实跟质量都是密不可分的,而且质量的引入自然必须提及 ...
- 【30分钟学完】canvas动画|游戏基础(4):边界与碰撞
前言 本系列前几篇中常出现物体跑到画布外的情况,本篇就是为了解决这个问题. 阅读本篇前请先打好前面的基础. 本人能力有限,欢迎牛人共同讨论,批评指正. 越界检测 假定物体是个圆形,如图其圆心坐标即是物 ...
- 【30分钟学完】canvas动画|游戏基础(5):重力加速度与模拟摩擦力
前言 解决运动和碰撞问题后,我们为了让运动环境更加自然,需要加入一些环境因子,比如常见的重力加速度和模拟摩擦力. 阅读本篇前请先打好前面的基础. 本人能力有限,欢迎牛人共同讨论,批评指正. 重力加速度 ...
- 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程
Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/ 转载于:https://www.cnblogs.com/pegasu ...
- 4.30王者荣耀服务器未响应是什么意思,若王者荣耀还有30分钟关闭服务器,最后一把你会玩什么?我选韩信...
原标题:若王者荣耀还有30分钟关闭服务器,最后一把你会玩什么?我选韩信 大家好,这里是每天带来最新荣耀资讯攻略的小番.王者荣耀早已成为不少玩家日常的消遣娱乐之一,设想一下,如果有一天王者荣耀由于某些原 ...
- 30分钟玩转Python后端Flask
30分钟玩转Python后端 什么是Flask? Flask是一个用Python编写的Web应用程序框架. 它由 Armin Ronacher 开发,他领导一个名为Pocco的国际Python爱好者团 ...
最新文章
- 数据库操作错误:删除对于用户'root':数据库主体在该数据库中拥有架构,无法删除...
- 通过mysql show processlist 命令检查mysql锁的方法
- Tableau数据分析:NC Retail Order Data(英)Data Science Program Lab#1(GTI)
- 构思新巧的173dmba飞鸽
- 大数据学习笔记11:搭建完全分布式Hadoop
- 10年老分析师最终抛弃Excel,它不是最好的数据分析工具
- java 加载shellcode_MSF-Shellcode生成和使用
- 3 Git服务器搭建
- OC 内存管理之手动内存管理MRC
- PC端后台管理系统实现
- 汇编语言下载安装及使用(hello world,仅供学习参考)
- 基于vue的html编辑器,基于vue富文本编辑器的慢慢人生路
- vue根据文件名后缀区分
- 伦斯勒理工学院计算机科学专业强吗,伦斯勒理工学院有哪些专业处于世界顶尖水平?...
- HTML使用样式格式化文档
- 数据治理(二):数据治理功能方面
- 大陆中文网站流量排名前100
- SpringSecurity 安全框架
- 刘慈欣 计算机工程师,刘慈欣:《三体》之外,我只是个普通的工程师
- qt 工具栏下加文字