转载自 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相关推荐

  1. 30 分钟学 Erlang

    30 分钟学 Erlang (一) Shawn_xiaoyu https://www.jianshu.com/p/b45eb9314d1e 本文写给谁看的? 那些已经有过至少一门编程语言基础,并且需要 ...

  2. 每天30分钟学python-这个工具,30分钟可以把科研人一天的工作都给干完!

    原标题:这个工具,30分钟可以把科研人一天的工作都给干完! 一入科研深似海,每逢返校倍忧桑. 被 paper 和发际线上移支配的恐惧要回来了--一个假发片还够用吗? 1 文献看到眼花,科研热点总是无缘 ...

  3. 【30分钟学完】canvas动画|游戏基础(1):理论先行

    前言 本文虽说是基础教程,但这是相对动画/游戏领域来说,在前端领域算是中级教程了,不适合前端小白或萌新.阅读前请确保自己对前端三大件(JavaScript+CSS+HTML)的基础已经十分熟悉,而且有 ...

  4. 【30分钟学完】canvas动画|游戏基础(7):动量守恒与多物体碰撞

    前言 一路沿着本系列教程学习的朋友可能会发现,前面教程中都尽量避免提及质量的概念,很多运动概念也时刻提醒大家这不是真实的物体运动.因为真实的物体运动其实跟质量都是密不可分的,而且质量的引入自然必须提及 ...

  5. 【30分钟学完】canvas动画|游戏基础(4):边界与碰撞

    前言 本系列前几篇中常出现物体跑到画布外的情况,本篇就是为了解决这个问题. 阅读本篇前请先打好前面的基础. 本人能力有限,欢迎牛人共同讨论,批评指正. 越界检测 假定物体是个圆形,如图其圆心坐标即是物 ...

  6. 【30分钟学完】canvas动画|游戏基础(5):重力加速度与模拟摩擦力

    前言 解决运动和碰撞问题后,我们为了让运动环境更加自然,需要加入一些环境因子,比如常见的重力加速度和模拟摩擦力. 阅读本篇前请先打好前面的基础. 本人能力有限,欢迎牛人共同讨论,批评指正. 重力加速度 ...

  7. 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程

    Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/ 转载于:https://www.cnblogs.com/pegasu ...

  8. 4.30王者荣耀服务器未响应是什么意思,若王者荣耀还有30分钟关闭服务器,最后一把你会玩什么?我选韩信...

    原标题:若王者荣耀还有30分钟关闭服务器,最后一把你会玩什么?我选韩信 大家好,这里是每天带来最新荣耀资讯攻略的小番.王者荣耀早已成为不少玩家日常的消遣娱乐之一,设想一下,如果有一天王者荣耀由于某些原 ...

  9. 30分钟玩转Python后端Flask

    30分钟玩转Python后端 什么是Flask? Flask是一个用Python编写的Web应用程序框架. 它由 Armin Ronacher 开发,他领导一个名为Pocco的国际Python爱好者团 ...

最新文章

  1. 数据库操作错误:删除对于用户'root':数据库主体在该数据库中拥有架构,无法删除...
  2. 通过mysql show processlist 命令检查mysql锁的方法
  3. Tableau数据分析:NC Retail Order Data(英)Data Science Program Lab#1(GTI)
  4. 构思新巧的173dmba飞鸽
  5. 大数据学习笔记11:搭建完全分布式Hadoop
  6. 10年老分析师最终抛弃Excel,它不是最好的数据分析工具
  7. java 加载shellcode_MSF-Shellcode生成和使用
  8. 3 Git服务器搭建
  9. OC 内存管理之手动内存管理MRC
  10. PC端后台管理系统实现
  11. 汇编语言下载安装及使用(hello world,仅供学习参考)
  12. 基于vue的html编辑器,基于vue富文本编辑器的慢慢人生路
  13. vue根据文件名后缀区分
  14. 伦斯勒理工学院计算机科学专业强吗,伦斯勒理工学院有哪些专业处于世界顶尖水平?...
  15. HTML使用样式格式化文档
  16. 数据治理(二):数据治理功能方面
  17. 大陆中文网站流量排名前100
  18. SpringSecurity 安全框架
  19. 刘慈欣 计算机工程师,刘慈欣:《三体》之外,我只是个普通的工程师
  20. qt 工具栏下加文字

热门文章

  1. 省选考试防爆0注意事项(PART1考试习惯)
  2. Kafka分区分配策略(2)——RoundRobinAssignor和StickyAssignor
  3. 数据库相关中间件收录集
  4. 怎么确保网站的可用性
  5. 力扣174. 地下城游戏
  6. B站开源自研动漫超分辨率模型,助力动漫UGC视频高清化
  7. 标准常有,VVC不常有
  8. 优酷超高清视频技术实践
  9. 数据结构与算法之Manacher算法
  10. JVM之强引用、软引用、弱引用、虚引用