记一次RabbitMQ使用
RabbitMQ基于Erlang语言开发,要先安装Erlang
一、Erlang 安装与配置
Erlang下载地址:http://www.erlang.org/downloads
1、根据自己的配置选择相应的版本
安装比较简单,一路 next 就ok了。
2、安装完成后要配置环境变量:
变量名:ERLANG_HOME
变量值:Erlang安装路径
如果计算机不能设置环境变量,cmd窗口执行:
setx ERLANG_HOME "安装路径"
setx 此命令同样适用与其他环境变量设置!
二、接下来就是RabbitMQ的安装与配置
1、RabbitMQ下载地址:https://www.rabbitmq.com/install-windows.html
同样比较简单,一路next。。。
2、安装完成后,在cmd窗口中执行以下命令激活RabbitMQ Manage Plugin
"E:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.15\sbin\rabbitmq-plugins.bat" enable rabbitmq_management
3、激活完成后以管理员身份 cmd 窗口中执行以下命令,重启
net stop RabbitMQ && net start RabbitMQ
4、浏览器输入http://localhost:15672 可以进入到后台管理系统,默认的用户和密码是 guest / guest
当然也可以创建新的用户
5、创建完成,接下来可以使用java来操作了。。不要着急可能会有坑
首先引入依赖
<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.7.0</version> </dependency>
接着写生产者
public class producer { private final static String EXCHANGE_NAME = "durable"; private final static String QUEUE_NAME = "nice"; public static void main(String[] args) { // 创建连接 ConnectionFactory factory = new ConnectionFactory(); // 绑定主机、用户名 factory.setHost("127.0.0.1"); factory.setUsername("developer"); factory.setPassword("123456"); // 获取连接 Connection connection = factory.newConnection(); // 创建通道 Channel channel = connection.createChannel(); // 设置 exchange 持久化 channel.exchangeDeclare(EXCHANGE_NAME, "direct", true); // true 开启队列持久化 channel.queueDeclare(QUEUE_NAME, true, false, false, null); // 发送消息 String message = "nice to meet you!"; // 消息持久化 AMQP.BasicProperties basicProperties = new AMQP.BasicProperties().builder().deliveryMode(2).build(); channel.basicPublish("", QUEUE_NAME, basicProperties, message.getBytes()); // 关闭管道和连接 channel.close(); connection.close(); } }
运行代码,如果出现下面这种情况,不要慌张
在后台管理系统中找到 Admin , 点击 用户(developer) ,尔后点击 set permission
或者使用命令,在安装目录的 sbin 目录下
命令1:rabbitmqctl set_user_tags guest administrator
命令2:rabbitmqctl set_permissions -p / guest .* .* .*
问题解决,运行成功后会有队列
接着写消费者
public class Consumer { private final static String QUEUE_NAME = "nice"; public static void main(String[] args) { ConnectionFactory factory = new ConnectionFactory(); // 绑定主机 factory.setHost("127.0.0.1"); factory.setUsername("developer"); factory.setPassword("123456"); // 创建一个连接 Connection connection = factory.newConnection(); // 创建一个通道 Channel channel = connection.createChannel(); // 指定一个永久队列 channel.queueDeclare(QUEUE_NAME, true, false, false, null) // 创建队列消 com.rabbitmq.client.Consumer consumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); System.out.println("Received Message '" + message + "'"); } }; channel.basicConsume(QUEUE_NAME, true, consumer); } }
注意的是如果生产者设置了永久队列,那消费端在指定队列的时候也要是一个永久的队列,也就是他们的队列要保持一致!!!
posted on 2019-06-03 18:13 LastKnight& 阅读(153) 评论(0) 收藏 举报