RabbitMQ学习资源来源于(蚂蚁课堂)
一.MQ连接工具类
package com.google.util;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* @author wk
* @Description:
* @date 2019/12/5 14:30
**/
public class MQConnectionUtils {
public static Connection newConnection() throws IOException, TimeoutException {
//1.定义连接工厂
ConnectionFactory factory = new ConnectionFactory();
//2.设置服务器地址
factory.setHost("127.0.0.1");
// 3.设置协议端口号
factory.setPort(5672);
// 4.设置vhost
factory.setVirtualHost("/wk_virtual_hosts");
// 5.设置用户名称
factory.setUsername("root");
// 6.设置用户密码
factory.setPassword("1234");
// 7.创建新的连接
Connection newConnection = factory.newConnection();
return newConnection;
}
/**
* 创建渠道
* @return
* @throws IOException
* @throws TimeoutException
*/
public static Channel getChannel() throws IOException, TimeoutException {
//获取连接
Connection connection = MQConnectionUtils.newConnection();
//创建通道
return connection.createChannel();
}
}
二.创建简单队列生产者
package com.google.util.simpleQueue;
import com.google.util.MQConnectionUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* @author wk
* @Description:生产者
* @date 2019/12/5 15:28
**/
public class Producer {
static String queue = Config.SIMPLE_QUEUE_01;
public static void main(String[] args) throws IOException, TimeoutException {
//获取连接
Connection connection = MQConnectionUtils.newConnection();
//创建通道
Channel channel = MQConnectionUtils.getChannel();
//创建队列声明
channel.queueDeclare(queue, false, false, false, null);
String message = "第一次使用RabbitMQ";
System.out.println("生产者发送消息: " + message);
channel.basicPublish("", queue, null, message.getBytes());
channel.close();
connection.close();
}
}
三.创建简单队列消费者
package com.google.util.simpleQueue;
import com.google.util.MQConnectionUtils;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* @author wk
* @Description:消费者
* @date 2019/12/5 17:39
**/
public class Customer {
static String queue = Config.SIMPLE_QUEUE_01;
public static void main(String[] args) throws IOException, TimeoutException {
//创建通道
Channel channel = MQConnectionUtils.getChannel();
//消费者关联队列
channel.queueDeclare(queue, false, false, false, null);
DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
//监听获取消息
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
throws IOException {
String msg = new String(body, "UTF-8");
System.out.println("消费者获取信息:" + msg);
//手动应答模式,
channel.basicAck(envelope.getDeliveryTag(), false);
}
};
//设置应答模式 如果为true情况下,表示为自动应答模式 false表示为手动应答 监听队列
//channel.basicConsume(queue, true, defaultConsumer);
// [ˈbeɪsɪk] 悲sei克
//默认false
channel.basicConsume(queue, defaultConsumer);
}
}
四.测试运行:
启动生产者;
启动消费者(手动应答):
再次查看队列Get message,可以看到队列为空