RabbitMQ之简单队列简介
简单队列为一一对应的关系,即一个生产者对应一个消费者。简单队列是最简单的一种模式,由生产者、队列、消费者组成。
流程:
生产者发送信息到消息中间件(RabbitMQ)中,
消费者从消息中间件(RabbitMQ)中取。
producer即为生产者,用来产生消息发送给队列。
consumer是消费者,需要去读队列内的消息。
RabbitMQ是消息中间件,以队列的方式存储。
Maven中RabbitMQ依赖
<!-- 添加rabbitmq的架包 -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>4.2.0</version>
</dependency>
连接RabbitMQ的帮助类
/**
* RabbitMQ的帮助类
* @author zhang
*
*/
public class ConnectHelp {
public static Connection getConnect() throws IOException, TimeoutException {
//创建连接工厂
ConnectionFactory connect=new ConnectionFactory();
//设置服务器连接地址
connect.setHost("127.0.0.1");
//服务器的端口
connect.setPort(5672);
//连接vhost
connect.setVirtualHost("/testdb");
//设置用户名
connect.setUsername("zyf");
//设置密码
connect.setPassword("123");
//返回当前的连接
return connect.newConnection();
}
}
生产者代码参考
/**
* 发送内容 生产者
*
* 简单队列 简单队列是一对一的关系 缺点就是耦合性比较高
*
* @author zhang
*
*/
public class Send {
// 声明一个队列名字
public static final String QUEUE_NAME = "test_simple_queue";
public static void main(String[] args) throws IOException, TimeoutException {
// 获取链接
Connection connect = ConnectHelp.getConnect();
// 从连接中获取通道 channel
Channel channel = connect.createChannel();
// 声明一个序列 queuedeclare
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 声明要发送的数据 string类型
String msg = "hello test rabbitMQ!";
// push
channel.basicPublish("", QUEUE_NAME, null, msg.getBytes());
System.out.println("发送的信息:" + msg);
// 关闭通道
channel.close();
// 关闭连接
connect.close();
}
}
消费者代码参考
/**
* 消费者 接受数据
*
* @author zhang
*
*/
public class ReviceMsg {
// 声明一个队列名字
public static final String QUEUE_NAME = "test_simple_queue";
public static void main(String[] args) throws IOException, TimeoutException {
// 获取链接
Connection connection = ConnectHelp.getConnect();
// 创建通道
Channel cannel = connection.createChannel();
// 声明队列
cannel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 执行监听方法
DefaultConsumer consumer = new DefaultConsumer(cannel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException {
String msg = new String(body);
System.out.println("接收到的信息:" + msg);
}
};
// 获取数据
cannel.basicConsume(QUEUE_NAME, true, consumer);
}
}