HelloWorld
简单队列
在下图中,“ P”是我们的生产者,“ C”是我们的消费者。中间的框是一个队列-RabbitMQ 代表使用者保留的消息缓冲区
1 依赖
-
新建一个空工程
-
新建一个Maven模块
-
引入依赖
<!--指定 jdk 编译版本--> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>8</source> <target>8</target> </configuration> </plugin> </plugins> </build> <dependencies> <!--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> </dependencies>
2 消息生产者
public class Producer {
public static String QUEUE_NAME = "hello";
public static void main(String[] args) throws IOException, TimeoutException {
// 创建一个连接工厂
ConnectionFactory factory = new ConnectionFactory();
// 为工厂绑定RabbitMQ的ip地址
factory.setHost("192.168.121.138");
// 为工厂绑定RabbitMQ的用户名称
factory.setUsername("admin");
// 为工厂绑定RabbitMQ的密码
factory.setPassword("admin");
// 创建连接
Connection connection = factory.newConnection();
// 创建一个信道
Channel channel1 = connection.createChannel();
/*
* 生成一个队列
* String queue:队列名称
* boolean durable:队列是否持久化(硬盘),默认情况下储存在内存中。false:不持久化
* boolean exclusive:是否独占队列,
* boolean autoDelete:是否自动删除,true:当所有消费者都与这个队列断开连接时,这个队列会自动删除
* Map<String, Object> arguments:设置队列的其他一些参数
*/
channel1.queueDeclare(QUEUE_NAME, false, false, false, null);
// 要发送的消息
String message = "hello world";
/*
* 发送一个消息
* String exchange:发送到哪个交换机(空串为默认)
* String routingKey:路由的key是哪个
* BasicProperties props:其他的参数信息
* byte[] body:发送的消息的消息体
*/
channel1.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println("消息发送完毕!");
}
}
3 消息消费者
public class Consumer {
// 队列名称
public static String QUEUE_NAME = "hello";
public static void main(String[] args) throws IOException, TimeoutException {
// 创建一个连接工厂
ConnectionFactory factory = new ConnectionFactory();
// 为工厂绑定RabbitMQ的ip地址
factory.setHost("192.168.121.138");
// 为工厂绑定RabbitMQ的用户名称
factory.setUsername("admin");
// 为工厂绑定RabbitMQ的密码
factory.setPassword("admin");
// 创建连接
Connection connection = factory.newConnection();
// 创建一个信道
Channel channel1 = connection.createChannel();
System.out.println("等待接收消息...");
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody());
System.out.println(message);
};
CancelCallback cancelCallback = (consumerTag) -> {
System.out.println("消息接收中断...");
};
/*
* 接收消息
* String queue:队列名称
* boolean autoAck:消费成功后是否自动应答,true:自动应答
* DeliverCallback deliverCallback:接收到消息后的回调
* CancelCallback cancelCallback:消费者取消消费的回调
*/
channel1.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);
}
}