前言
因为系统采用的是 centos7 版本,因此需要下载对应的 erlang 和 rabbitmq 包。
下载的官网地址为:
www.erlang-solutions.com/downloads/
但是下载很慢,因此,也可以从大鱼、 的百度网盘中获取。
验证码:5sgj
一、安装教程
1.1 安装依赖
yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-devel
1.2 安装 erlang
[root@localhost package]# rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm
-
查看 erlang 是否安装成
[root@localhost rabbitmq]# erl -v Erlang/OTP 22 [erts-10.4.4] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe] Eshell V10.4.4 (abort with ^G)
1.3 安装 Rabbitmq
yum install -y rabbitmq-server-3.7.18-1.el7.noarch.rpm
- 在目标目录下 /opt/software 下创建 rabbitmq 目录,将默认路径下的配置文件复制到我们创建的目录下。
[root@localhost software]# cd rabbitmq/
[root@localhost rabbitmq]# ls
[root@localhost rabbitmq]# cp /usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example /opt/software/rabbitmq/
[root@localhost rabbitmq]# ls
rabbitmq.config.example
[root@localhost rabbitmq]# mv rabbitmq.config.example rabbitmq.config
[root@localhost rabbitmq]#
-
修改配置文件,删除 guest 用户。
1.4 启动插件管理
默认情况下,rabbitmq 是没有web 的客户端插件的,通过下面命令可以安装。
rabbitmq-plugins enable rabbitmq_management
-
启动、重启、终止、状态服务。
systemctl start rabbitmq-server # 启动rabbitmq服务 systemctl restart rabbitmq-server # 重启服务 systemctl stop rabbitmq-server # 停止服务 systemctl status rabbitmq-server # 查看服务状态
出现 active 即表示启动成功。
1.5 授权和账号
-
添加用户和权限
[root@localhost rabbitmq]# rabbitmqctl add_user admin 111111 # 添加用户 Adding user "admin" ... [root@localhost rabbitmq]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" # 为用户添加资源权限 Setting permissions for user "admin" in vhost "/" ... [root@localhost rabbitmq]# rabbitmqctl set_user_tags admin administrator # 设置用户分配操作权限 Setting tags for user "admin" to [administrator] ...
用户级别:
- 1、administrator 可以登录控制台、查看所有信息、可以对rabbitmq进行管理
- 2、monitoring 监控者 登录控制台,查看所有信息
- 3、policymaker 策略制定者 登录控制台,指定策略
- 4、managment 普通管理员 登录控制台
完成这步骤后,访问 ip+ 15672 我们可以用刚才创建的用户登录。
1.6 小结
1.6.1 相关端口
5672:RabbitMQ的通讯端口
25672:RabbitMQ的节点间的CLI通讯端口是
15672:RabbitMQ HTTP_API的端口,管理员用户才能访问,用于管理RabbitMQ,需要启动Management插件。
1883,8883:MQTT插件启动时的端口。
61613、61614:STOMP客户端插件启用的时候的端口。
15674、15675:基于webscoket的STOMP端口和MOTT端口
1.6.2 rabbitmq 用户操作命令
rabbitmqctl add_user 账号 密码
rabbitmqctl set_user_tags 账号 administrator
rabbitmqctl change_password Username Newpassword 修改密码
rabbitmqctl delete_user Username 删除用户
rabbitmqctl list_users 查看用户清单
rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*" 为用户设置administrator角色
rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
二、入门案例-简单模式
在这小节中,我将通过一个例子来入门 RabbitMQ,理解 点对点模式下的 RabbitMQ 是如何工作的。
2.1 构建 Maven 工程
2.2 导入 rabbitMQ 的 maven 依赖
1、Java 原生依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.10.0</version>
</dependency>
2、spring 依赖
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-amqp</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
3、springboot 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
以上三种根据项目自己选择就行,我们这边导入 原生依赖。
2.3 编写生产者
public class ProducerTest {
public static void main(String[] args) throws IOException, TimeoutException {
// 1、创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
// 2、设置连接属性
connectionFactory.setHost("192.168.81.102");
connectionFactory.setPort(5672);
connectionFactory.setUsername("admin");
connectionFactory.setPassword("111111");
//3、从连接工厂中获取连接
Connection connection = connectionFactory.newConnection("producer");
//4、从连接中获取通道 channel
Channel channel = connection.createChannel();
//5、申明 queue 存储消息
/**
* 如果队列不存在,则会创建,不允许相同topic 存在
* @params1: queue 队列的名称
* @params2: durable 队列是否持久化
* @params3: exclusive 是否排他,即是否私有的,如果为true,会对当前队列加锁,
* @params4: autoDelete 是否自动删除
*/
channel.queueDeclare("queue1", false, false, false, null);
// 6、发送消息
for (int i = 1; i <=10; i++) {
// @params1: 交换机exchange
// @params2: 队列名称/routing
// @params3: 属性配置
// @params4: 发送消息的内容
channel.basicPublish("","queue1",null,("潇雷挺帅,说第"+i+"遍。").getBytes());
}
// 7、关闭连接
channel.close();
}
}
点击执行后,可以去 web 控制台查看这个队列的信息。
2.4 编写消费者
public class ConsumerTest {
public static void main(String[] args) throws IOException, TimeoutException {
// 1、创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
// 2、设置连接属性
connectionFactory.setHost("192.168.81.102");
connectionFactory.setPort(5672);
connectionFactory.setUsername("admin");
connectionFactory.setPassword("111111");
//3、从连接工厂中获取连接
Connection connection = connectionFactory.newConnection("consumer");
//4、从连接中获取通道 channel
Channel channel = connection.createChannel();
DeliverCallback deliverCallback =(String a, Delivery b)->{
String message = new String(b.getBody());
System.out.println(message);
};
CancelCallback cancelCallback =(String a)->{
System.out.println("消息消费被中断");
};
/**
* 消费者消费消息
* @params1: 消费哪个队列
* @params2:消费成功之后是否要自动应答 true代表自动应答 ,flase代表手动应答。
* @params3: 消费者消费成功的回调
* @params4: 消费者消费失败的回调
*/
channel.basicConsume("queue1",true,deliverCallback,cancelCallback);
}
}
消费记录:
潇雷挺帅,说第1遍。
潇雷挺帅,说第2遍。
潇雷挺帅,说第3遍。
潇雷挺帅,说第4遍。
潇雷挺帅,说第5遍。
潇雷挺帅,说第6遍。
潇雷挺帅,说第7遍。
潇雷挺帅,说第8遍。
潇雷挺帅,说第9遍。
潇雷挺帅,说第10遍。
2.5 小结
入门案例实现了。
-
生产者大致步骤:
- 获取连接
- 创建通道
- 创建队列声明
- 发送消息
- 关闭队列
-
消费者大致步骤
- 获取连接
- 获取通道
- 监听队列
- 消费消息