rabbitmq四种模式(RabbitMQ基础简单模式)
rabbitmq四种模式(RabbitMQ基础简单模式)
1.1 简单模式简介简单模式就是一个生产者一个消费者。生产者生产消息发送到消息队列,消费者从消息队列中取消消费消息,如下图所示。
1.2 简单模式实现生产者简单的实现
// 生产者
public class BasicProducer {
@SneakyThrows
public static void main(String[] args) {
// 1、建立连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
// 2、设置连接参数
connectionFactory.setHost("192.168.133.128");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/"); // 默认就是/
connectionFactory.setUsername("admin");
connectionFactory.setPassword("admin");
// 3、创建连接
Connection connection = connectionFactory.newConnection();
// 4、创建channel
Channel channel = connection.createChannel();
// 5、创建队列
/**
* 参数介绍
* queue 队列名称
* durable 是否持久化 当MQ重启后还在
* exclusive 是否独占(只能有一个消费者监听这个队列) 当Connection关闭时是否删除队列
* autoDelete 是否自动删除 当没有消费者的时候会自动删除掉
* arguments 参数信息
*/
// 如果没有一个叫dream_house的队列就会自动创建一个队列
channel.queueDeclare("dream_house" true false false null);
// 6、发送消息
/**
* 参数介绍
* exchange 交换机名称 简单模式下是没有交换机的 会使用默认的交换机
* routingKey 路由名称(默认交换机的队列名字和队列名称一样)
* props 配置信息
* body 需要发送的消息数据
*/
String body = "hello com.dream house";
channel.basicPublish("" "dream_house" null body.getBytes());
// 7、释放资源
channel.close();
connection.close();
}
}
消费者简单的实现
// 简单模式的消费者
public class BasicConsumer {
@SneakyThrows
public static void main(String[] args) {
// 1、建立连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
// 2、设置连接参数
connectionFactory.setHost("192.168.133.128");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/"); // 默认就是/
connectionFactory.setUsername("admin");
connectionFactory.setPassword("admin");
// 3、创建连接
Connection connection = connectionFactory.newConnection();
// 4、创建channel
Channel channel = connection.createChannel();
// 5、创建队列
/**
* 参数介绍
* queue 队列名称
* durable 是否持久化 当MQ重启后还在
* exclusive 是否独占(只能有一个消费者监听这个队列) 当Connection关闭时是否删除队列
* autoDelete 是否自动删除 当没有消费者的时候会自动删除掉
* arguments 参数信息
*/
// 如果没有一个叫dream_house的队列就会自动创建一个队列
channel.queueDeclare("dream_house" true false false null);
// 6、接收消息
/**
* 参数介绍
* String queue 队列名称
* boolean autoAck 是否自动确认
* Consumer callback 回调函数
*/
Consumer consumer = new DefaultConsumer(channel) {
// 回调方法当收到消息后自动执行方法 匿名内部类
/**
* 参数介绍
* @param consumerTag 消息标识
* @param envelope 获取一些信息,比如交换机 路由
* @param properties 配置信息
* @param body 真实的报文信息
* @throws IOException
*/
@Override
public void handleDelivery(String consumerTag Envelope envelope AMQP.BasicProperties properties byte[] body) throws IOException {
// super.handleDelivery(consumerTag envelope properties body);
System.out.println("consumerTag:" consumerTag " envelope:" envelope.toString() " properties:" properties " body:" new String(body));
}
};
channel.basicConsume("dream_house" true consumer);
}
}
1.3 简单模式总结
可以看到简单模式实现起来较为简单,主要就是声明了生产者和消费者,生产者和消费者之间只是通过队列Queue进行了连接通信。代码实现主要做了以下几个步骤:
- 实例化一个连接工厂
- 设置连接参数来创建连接
- 创建channel
- 通过channel来创建一个队列
- 生产者生产消息通过队列dream_house发送消息,调用channel.basicPublish()发送消息
- 消费者通过dream_house来接收消费消息,调用 channel.basicConsume()来接收消息