public class Producer1 {
public static void main(String[] args) throws IOException, TimeoutException {
// 1.创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
// 2.设置 rabbitmq的一个IP地址
connectionFactory.setHost("localhost");
try ( // 3.创建 Connection(连接)对象
Connection connection = connectionFactory.newConnection();
// 4.创建 Chanel
Channel channel = connection.createChannel()) {
// 5.设置队列属性
// 第一个参数: 队列名称
// 第二个参数: 队列是否要持久化
// 第三个参数: 是否排他性(true false)
// 第四个参数: 是否自动删除(true false)如果没有消费者链接就自动删除
// 第五个参数:是否要设置一些额外的参数
channel.queueDeclare("01-work", true, false, false, null);
// 6.发送消息关闭资源
// 1.参数 交换机名称
// 2.参数 路由key
// 3.参数 消息属性
for (int i = 0; i < 20; i++) {
String message = "hello rabbitmq :" + i;
channel.basicPublish("", "01-work", null, message.getBytes());
}
}
}
}
public class Consumer {
public static void main(String[] args) throws IOException, TimeoutException {
// 1.创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
// 2.设置 rabbitmq的一个IP地址
connectionFactory.setHost("localhost");
// 3.创建 Connection(连接)对象
Connection connection = connectionFactory.newConnection();
// 4.创建 Channel
Channel channel = connection.createChannel();
// 5.设置队列属性
// 第一个参数: 队列名称
// 第二个参数: 队列是否要持久化
// 第三个参数: 是否排他性(true false)
// 第四个参数: 是否自动删除(true false)
// 第五个参数:是否要设置一些额外的参数
channel.queueDeclare("01-work", true, false, false, null);
channel.basicQos(1); // 预取一次取一个
//使用 channel去rabbitmq中取消息进行消费
//1. 参数 队列名字
//2. 是否自动签收
channel.basicConsume("01-work", false, new DeliverCallback() {
//当消息从 mq 中取出来会回调这个方法
//消费者消费消息就在这个 handle中取进行处理
@Override
public void handle(String s, Delivery delivery) throws IOException {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("消费者1: 消息内容为:" + new String(delivery.getBody()));
//手动签收
channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);
}
}, new CancelCallback() {
//当消息取消了回调这个方法
@Override
public void handle(String s) throws IOException {
System.out.println("11111111");
}
});
}
}
public class Consumer1 {
public static void main(String[] args) throws IOException, TimeoutException {
// 1.创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
// 2.设置 rabbitmq的一个IP地址
connectionFactory.setHost("localhost");
// 3.创建 Connection(连接)对象
Connection connection = connectionFactory.newConnection();
// 4.创建 Channel
Channel channel = connection.createChannel();
// 5.设置队列属性
// 第一个参数: 队列名称
// 第二个参数: 队列是否要持久化
// 第三个参数: 是否排他性(true false)
// 第四个参数: 是否自动删除(true false)
// 第五个参数: 是否要设置一些额外的参数
channel.queueDeclare("01-work", true, false, false, null);
channel.basicQos(1);
//使用 channel去rabbitmq中取消息进行消费
//1. 参数 队列名字
//2. 是否自动签收
channel.basicConsume("01-work", false, new DeliverCallback() {
//当消息从 mq 中取出来会回调这个方法
//消费者消费消息就在这个 handle中取进行处理
@Override
public void handle(String s, Delivery delivery) throws IOException {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("消费者2: 消息内容为:" + new String(delivery.getBody()));
//手动签收
channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);
}
}, new CancelCallback() {
//当消息取消了回调这个方法
@Override
public void handle(String s) throws IOException {
System.out.println("11111111");
}
});
}
}