本例。发送单个消息的生产者和接收消息并打印的消费者。
生产者发送消息,消费者接收消息,发送的消息进入消息缓存队列中。
2.1依赖
<dependencies>
<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>
</dependencies>
2.2消息产生者
代码
package com.example.demo01;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
/**
* @author 我见青山多妩媚
* @date Create on 2022/8/14 0:25
* 生产者:发消息
*/
public class Producer {
//队列名称
public static final String QUEUE_NAME = "hello";
//发消息
public static void main(String[] args) throws IOException {
//创建工厂
ConnectionFactory factory = new ConnectionFactory();
//设置工厂ip--> 便于连接rabbitmq的队列
factory.setHost("ip地址");
//设置用户名
factory.setUsername("username");
//设置密码
factory.setPassword("password");
//创建连接
Connection connection = factory.newConnection();
//获取信道
Channel channel = connection.createChannel();
/*
产生队列(可以不适用交换机)
参数:
1、队列名称
2、队列内消息是否持久化(保存消息)(磁盘),默认存储在内存中(false)
3、该队列是否只供一个消费者进行消费 是否进行消息的共享 true:可以多个消费者消费,false:只能一个
4、是否自动删除,最后一个消费者断开连接之后,该队列是否自动删除,true:自动删除,false:不自动删除
5、其他参数(先不了解)
*/
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
//消息内容
String message = "hello world";
/*
发布消息
参数:
1、发送到哪个交换机(此处不用)
2、路由key值 本次是队列名称
3、其他参数
4、发送的消息,需要转成字节
*/
channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
System.out.println("消费发送完毕");
}
}
运行结果:
消费发送完毕
之后,去对应的ip:15672下登录查看,

可以看到消费已经发出
2.3消息消费者
package com.example.demo01;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.Arrays;
/**
* @author 我见青山多妩媚
* @date Create on 2022/8/14 14:40
* 消费者 接收消息
*/
public class Consumer {
//队列名称
public static final String QUEUE_NAME = "hello";
//接收消息
public static void main(String[] args) throws Exception {
//创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("101.43.254.109");
factory.setUsername("root");
factory.setPassword("5262413645.mm");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
/*
接收消息
参数:
1、队列名称
2、应答方式(自动应答true、手动应答false),为了方便此处用自动应答
3、消费者成功消费的回调, 是一个函数式接口,lambda表达式
4、消费者消费失败的回调
*/
//声明:成功消费时的回调函数
DeliverCallback deliverCallback = (consumerTag, message) -> {
//打印消息内容
System.out.println(new String(message.getBody()));
};
//声明:消费失败时的回调函数
CancelCallback cancelCallback = consumerTag ->{
System.out.println("消费消息中断");
};
//消费消息
channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);
}
}
运行结果:
hello world
注意:
该方法只有在rabbitmq 5.7.3以上的版本才有
/*
参数:
1、队列名称
2、应答方式(自动应答true、手动应答false),为了方便此处用自动应答
3、消费者成功消费的回调, 是一个函数式接口,lambda表达式
4、消费者消费失败的回调
*/
String basicConsume(String queue, boolean autoAck, DeliverCallback deliverCallback, CancelCallback cancelCallback) throws IOException;
本文介绍了如何使用RabbitMQ实现消息队列的简单应用,包括生产者发送消息和消费者接收并打印消息的流程。通过Java客户端库amqp-client操作,展示了创建连接、发送和接收消息的代码示例。
Hello World&spm=1001.2101.3001.5002&articleId=126776379&d=1&t=3&u=4370cd0bd3f04dec9eb29f9b57979662)
7376

被折叠的 条评论
为什么被折叠?



