安装
下载资源
可以访问官网查看下载信息rabbitmq官网
选择合适的版本,注意:rabbitmq需要下载一个Erlang才能使用
我自己是在一下两个连接中下载的
rabbitmq 3.8.8
erlang 21.3.8.15
需要下载其他版本的同学注意erlang版本是否匹配,可以访问该链接查询匹配信息版本匹配信息
安装以及启动rabbitmq
-
对erlang进行安装
shellrpm -ivh erlang-21.3.8.15-1.el7.x86_64.rpm
-
下载以下插件
shellyum install socat -y
-
安装rabbitmq
shellrpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm
-
启动程序
shell/sbin/service rabbitmq-server start
-
暂停程序以及查看状态
shell/sbin/service rabbitmq-server stop /sbin/service rabbitmq-server status
访问mq
访问web界面
程序启动成功以后,可以下载一个插件,用于访问web界面
shell
rabbitmq-plugins enable rabbitmq_management
注意:下载插件是需要先关闭程序再下载
访问如下地址
运行有mq的服务器的地址:15672
访问成功界面如下:
用户管理
使用内置用户登录时(用户名:guest 密码:guest)无法登录。
原因:该用户没用权限。
解决方法:
- 修改该用户权限
- 创建一个新用户,并赋予权限
下面讲解如何创建用户,并赋权
-
获取用户信息
shellrabbitmqctl list_users
-
创建用户,并设置密码
shellrabbitmqctl add_user admin root
-
分配角色
shellrabbitmqctl set_user_tags admin administrator
-
赋予权限
shellrabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
成功登录后,界面如下:
简单使用
-
创建一个maven项目,并导入以下依赖:
xml<!-- rabbitmq依赖客户端--> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.8.0</version> </dependency> <!-- 操作文件流的一个依赖--> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
-
编写生产者代码:
javapublic class Producer { //队列名称 public static final String QUEUE_NAME = "hello"; //发消息 public static void main(String[] args) throws Exception{ //创建工厂 ConnectionFactory factory = new ConnectionFactory(); //工厂IP 连接RabbitMQ的队列 factory.setHost("192.168.221.128"); //用户名 factory.setUsername("admin"); //密码 factory.setPassword("root"); //创建连接 Connection connection = factory.newConnection(); //获取信道 Channel channel = connection.createChannel(); /** * 生成一个队列 * 1. 队列名称 * 2. 队列里面的消息是否持久化(磁盘),默认情况下消息存储在内存中 * 3. 该队列是否只供一个消费者进行消费 是否进行消费共享,true:可以多个消费者 false:只能一个消费者使用 * 4. 是否自动删除 最后一个消费者断开连接以后 给队列是否自动删除 true自动删除 false不自动删除 * 5. 其他参数 */ channel.queueDeclare(QUEUE_NAME, false, false, false, null); //发消息 String massage = "hello world"; /** * 发送一个消息 * 1. 发送到哪个交换机 * 2. 路由的Key值是哪个 本次是队列的名称 * 3. 其它参数信息 * 4. 发送消息的消息体 */ channel.basicPublish("", QUEUE_NAME, null, massage.getBytes()); System.out.println("消息发送完毕"); } }
-
编写消费者代码
javapublic class Consumer { //队列名称 public static final String QUEUE_NAME = "hello"; //接收消息 public static void main(String[] args) throws Exception{ //创建连接工厂 ConnectionFactory factory = new ConnectionFactory(); //工厂IP 连接RabbitMQ的队列 factory.setHost("192.168.221.128"); //用户名 factory.setUsername("admin"); //密码 factory.setPassword("root"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); //回调 接收消息 DeliverCallback deliverCallback = (consumerTag, message) -> { System.out.println(new String(message.getBody())); }; //回调 取消消息 CancelCallback cancelCallback = consumerTag -> { System.out.println("消息消费被中断"); }; /** * 消费者 消费信息 * 1. 消费哪个队列 * 2. 消费成功以后是否要自动应答 true代表自动应答 false代表手动应答 * 3. 消费者未成功消费的回调 * 4. 消费者取消消费的回调 */ channel.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback); } }