linux之RabbitMQ消息队列
1.首先安装相关安装包

通过网盘分享的文件:linux-Rabbit
链接: https://pan.baidu.com/s/11IMgjU-QlitmSJLHyG-Cbw?pwd=7yfi 提取码: 7yfi
rabbitmq_delayed_message_exchange-3.8.0.ez暂时用不到,可以不需要下载
2.下载完成后,通过Xftp将其导入虚拟机目标目录中。
然后打开XShell终端进入目录中。

接下来就是下载
因为它是用erlang语言开发的,所以我们需要先下载这个环境
3.安装erlang语言环境以及相关依赖
rpm -ivh erlang-21.3-1.el7.x86_64.rpm
yum -y install socat
4.安装rabbitmq
rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm
到这里我们就安装完成了。
5.服务指令
/sbin/service rabbitmq-server start 等价于systemctl start rabbitmq-server.service
查看状态
/sbin/service rabbitmq-server status
关闭服务
/sbin/service rabbitmq-server stop
添加开机自启动rabbitmq服务
chkconfig rabbitmq-server on
开启管理web插件
rabbitmq-plugins enable rabbitmq_management
6.测试
通过IP访问端口15672看看是否成功。
温馨提示:若是防火墙没有开放端口,在外部是无法访问的,只能本机访问。
# 开放指定端口(例如15672)
sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
# 重新加载防火墙配置
sudo firewall-cmd --reload
# 验证端口是否开放
sudo firewall-cmd --zone=public --query-port=15672/tcp

我采用的是外部windows进行访问,通过IP:端口号的形式访问,若是在虚拟机内部,则直接用localhost就可以访问。
7.创建用户供外部使用
查看所有的用户
rabbitmqctl list_users (系统只有一个默认guest账号并且只能本地登录)
创建用户
rabbitmqctl add_user admin 1234
给新用户设置角色
rabbitmqctl set_user_tags admin administrator
给新用户赋权
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
8.使用简单的java项目体验消息队列
配置成功后,我们就可以通过新创建的密码供外部访问了。
-----【提示:在虚拟机内部可以访问默认游客账号,账号密码都是guest】

java 项目体验
package com.rabbit.product;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.util.Map;public class Product1 {public static void main(String[] args) throws Exception {//1.创建连接工厂ConnectionFactory factory = new ConnectionFactory();//2.设置工厂属性factory.setHost("192.168.100.100");factory.setPort(5672);factory.setVirtualHost("/");factory.setUsername("admin");factory.setPassword("1234");//3.获取连接对象Connection connection = factory.newConnection();//4.创建信道Channel channel = connection.createChannel();//5.生成队列/*String queue 队列的名字boolean durable 队列是否持久化boolean exclusive 该队列是否可以被多个消费者消息boolean autoDelete 最后一个消费者消费断开链接后是否自动删除Map<String, Object> arguments 高级配置*/channel.queueDeclare("hello", false, false, false, null);//6.发送消息String message = "hello word";channel.basicPublish("", "hello", null, message.getBytes("UTF-8"));System.out.println("消息发送完成");}
}
package com.rabbit.consumer;import com.rabbitmq.client.*;public class Consumer1 {public static void main(String[] args) throws Exception {//1.创建连接工厂ConnectionFactory factory = new ConnectionFactory();//2.设置工厂属性factory.setHost("192.168.100.100");factory.setPort(5672);factory.setVirtualHost("/");factory.setUsername("admin");factory.setPassword("1234");//3.获取连接对象Connection connection = factory.newConnection();//4.创建信道Channel channel = connection.createChannel();//5.获取消息/*String queue 消费那个队列boolean autoAck 自动应答机制DeliverCallback deliverCallback 接收到消息后如何消费CancelCallback cancelCallback 取消消费后如何反馈*/DeliverCallback deliverCallback = (consumerTag, message)->{//获取消息byte[] body = message.getBody();String str = new String(body);System.out.println("接收到了:"+str);};CancelCallback cancelCallback=(consumerTag)->{System.out.println("消费终端");};channel.basicConsume("hello",true,deliverCallback,cancelCallback);}
}
这个能够实现生产者发送消息到消息队列当中,然后消费者去消息队列中取消息信息。
