一些注意点
1.队列时共享资源
2.队列声明时有2中方法,代码和web界面
3.不管是代码还是web界面创建队列,channel.queueDeclare("cc",false,true,false,null);
name,durable,autodelete,arguments这四个属性是队列在第一次声明的时候必须具备的
而exclusive属性,必须通过代码,在channel绑定队列的时候赋值,如果为true,那么这个队列只对这个connection有效,connection断开,队列被删除
4.同一个队列代表,虚拟host相同,队列的5大属性也得相同,所以生产者,消费者操作同一个queue,这些属性必须一样
5.消费者的消费就是 channel.basicConsume()执行完就消费一次,回调函数可以重写,消费成功和失败都有对应的回调函数
而且回调函数是消费完,才能执行的,而且回调函数和消费函数是在不同的线程执行的
6.消费者一直处于监听状态,前提channel,connection不关闭
7.不同的用户对 虚拟主机的 访问权限不一样,一般一个应用对应一个虚拟主机,我们 要创建用户,为这个用户分配 虚拟主机的权限
8.durable为true代表队列的持久化,不代表队列中的消息也持久化,要想队列中的消息也持久化,那么在
发布消息的时候,将传递消息 (props)= MessageProperties.PERSISTENT_TEXT_PLAIN 即可
9.autoDelete 是否自动删除队列:(通道必须关闭)
当消费者消费完队列中的消息,队列中此时已经没有消息了,而且消费者通道也关闭了,那么队列自动删除
10.点对点,和work模式不用设置,有一个消费者监听队列就是点对点,有多个消费者监听队列就是work,队列支持多个channel访问
rabitmq 的 分层
1.server(对应 一个 rabit服务器)里面有 多个 virtual(虚拟主机)(这个可以当做mysql里面的库的概念)
2.一个虚拟主机里面的组成 交换机(多个)+消息队列(可以有多个,可以把消息队列当做表
|