3.4 创建消息发送工具类
请同学们创建
SimpleProducer
工具类,代码如下。
package cn.zwz.send; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class SimpleProducer { public static void main(String[] args) { //1. 创建连接工程 ConnectionFactory connectionFactory = new ConnectionFactory(); //1.1 设置连接IP connectionFactory.setHost("118.126.82.167"); //1.2 设置连接端口 connectionFactory.setPort(5672); //1.3 设置用户名 connectionFactory.setUsername("zwz"); //1.4 设置密码 connectionFactory.setPassword("123456"); //1.5 设置虚拟访问节点,就是消息发送的目标路径 connectionFactory.setVirtualHost("/"); Connection connection = null; Channel channel = null; try { //2. 创建连接Connection connection = connectionFactory.newConnection("ZWZ-Connection"); //3. 通过连接获取通道Channel channel = connection.createChannel(); //4. 通过通道创建交换机,声明队列,绑定关系,路由key,发送消息,接收消息 String queueName = "ZWZ-TOPIC"; /** * channel.queueDeclare有5个参数 * params1: 队列的名称 * params2: 是否要持久化, false:非持久化 true:持久化 * params3: 排他性,是否独占队列 * params4: 是否自动删除,如果为true,队列会随着最后一个消费消费完后将队列自动删除,false:消息全部消费完后,队列保留 * params5: 携带的附加参数 */ channel.queueDeclare(queueName, true, false, false, null); //5. 消息内容 String message = "HELLO World!"; //6. 将消息发送到队列 channel.basicPublish("", queueName, null, message.getBytes()); System.out.println("消息发送成功"); } catch (Exception e) { e.printStackTrace(); } finally { //7. 关闭通道 if (channel != null && channel.isOpen()) { try { channel.close(); } catch (Exception e) { e.printStackTrace(); } } //8. 关闭连接 if (connection != null && connection.isOpen()) { try { connection.close(); } catch (Exception e) { e.printStackTrace(); } } } } }
3.5 发消息功能测试
发消息很简单,运行 main
函数即可。
发送成功后,后台可以接收到数据,如下图所示。
3.6 创建消息接收工具类
请同学们创建
SimpleConsumer
工具类,代码如下。
package cn.zwz.send; import com.rabbitmq.client.*; import java.io.IOException; public class SimpleConsumer { public static void work() { //1. 创建连接工程 ConnectionFactory connectionFactory = new ConnectionFactory(); //1.1 设置连接IP connectionFactory.setHost("118.126.82.167"); //1.2 设置连接端口 connectionFactory.setPort(5672); //1.3 设置用户名 connectionFactory.setUsername("zwz"); //1.4 设置密码 connectionFactory.setPassword("123456"); //1.5 设置虚拟访问节点,就是消息发送的目标路径 connectionFactory.setVirtualHost("/"); Connection connection = null; Channel channel = null; try { //2. 创建连接Connection connection = connectionFactory.newConnection("ZWZ-Connection"); //3. 通过连接获取通道Channel channel = connection.createChannel(); //4. 通过通道创建交换机,声明队列,绑定关系,路由key,发送消息,接收消息 String queueName = "ZWZ-TOPIC"; //5. 接收消息并消费消息 channel.basicConsume(queueName, true, new DeliverCallback() { @Override public void handle(String consumerTag, Delivery message) throws IOException { System.out.println("接收到的消息内容是:" + new String(message.getBody(), "UTF-8")); } }, new CancelCallback() { @Override public void handle(String consumerTag) throws IOException { System.out.println("消息接收失败。。。"); } }); System.out.println("开始接受消息。。。。"); //阻断程序 System.in.read(); } catch (Exception e) { e.printStackTrace(); } finally { //7. 关闭通道 if (channel != null && channel.isOpen()) { try { channel.close(); } catch (Exception e) { e.printStackTrace(); } } //8. 关闭连接 if (connection != null && connection.isOpen()) { try { connection.close(); } catch (Exception e) { e.printStackTrace(); } } } } }
接着在启动类上配置运行,代码如下。
package cn.zwz.send; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SendApplication { public static void main(String[] args) { new SimpleConsumer().work(); SpringApplication.run(SendApplication.class, args); } }
3.7 收消息功能测试
请同学们运行 SpringBoot 启动类,然后再次发送消息,就可以看到消息内容了,如下图所示。
四、总结
本文首先简单介绍了 RabbitMQ,然后和 Kafka 等热门消息队列进行对比,最后演示了 RabbitMQ 的完整安装配置整合流程,帮助零基础的小白入门 RabbitMQ 开发。