我们先看发送消息代码
代码语言:javascript复制public class provider {
@Test
public void SendMessage() throws IOException, TimeoutException {
Connection connection = RabbitMqUtils.getConnection();
// 创建通道
Channel channel = connection.createChannel();
// 让通道和消息队列进行绑定
channel.queueDeclare("hello",false,false,false,null);
channel.basicPublish("","hello",null,"hello jing".getBytes());
RabbitMqUtils.closeConnectionAndChannel(channel,connection);
}
}
现在开始解读意思
1 获取rabbitmq连接
代码语言:javascript复制 Connection connection = RabbitMqUtils.getConnection();
以上这个代码就是通过工具类获取到rabbitmq的连接
2 创建通道
代码语言:javascript复制Channel channel = connection.createChannel();
获取到rabbitmq的通道
3 根据通道创建队列
代码语言:javascript复制 channel.queueDeclare("hello",false,false,false,null);
第一个参数
这个方法的第一个参数,就是我们要创建的队列的名字,如果我们没有这个队列,只要运行这个代码,那么就可以创建队列了。
第二个参数:
用来定义队列特性是否要持久化,true 就是要,false就是不要 不持久化的意思就是 不在磁盘里面进行保存。 如果我们写的是false,那么重新启动rabbitmq的时候,我们就会看见创建的队列不再了。
我们改为true,运行,我们看看界面有什么变化
看到界面里面多了一个标志D ,这个的意思就是要将队列持久化,以后重新启动rabbitmq的时候,还是可以看到这个队列的。但是之前队列里面保存的消息不见了,意思就是这个第二个参数变为true,只是将队列持久化,没有将队列里面的消息持久化,如果需要将消息也持久化,需要其他的配置。就是在向队列里面发送消息的时候进行配置
第三个参数
这个参数的意思是是否独占队列 true 就是独占 false 就是不独占
当我们写为false ,那么这个队列之后只是可以用这个通道进行使用,其他的通道或者连接就不可以操作这个队列了。
第四个参数
是否在消费完成之后就自动的删除队列,true 就是自动删除 false就是不自动删除
消费者断开连接之后,这个队列就不在了
4 向队列里面发送消息
代码语言:javascript复制 channel.basicPublish("","hello",null,"hello jing".getBytes());
这个方法的第二个参数,就是你要发送到的队列的名字,第四个参数的意思就是 你要发送的消息。 第三个参数 就是可以设置消息在队列中持久化的方式 第一个参数就是交换机 的名字
当我们将第三个参数写为MessageProperties.PERSISTENT_TEXT_PLAIN
代码语言:javascript复制 channel.basicPublish("","hello", MessageProperties.PERSISTENT_TEXT_PLAIN,"hello jing".getBytes());
这个的意思就是 告诉软件,你重新启动之后,我的消息也是要持久化的