昨天是摸鱼的一天,今天争取把视频看完回到springboot的学习中去。
连接-- 信道 --路由键–交换器
记录一下对几个概念的理解:由于初学,实际上我把rabbitMQ当成数据库去看也没事,
至少他能存放数据吧。
连接:类似数据库连接池
信道:类似数据库连接,不过有4种类型的的信道
路由键:类似表名
交换器:信道的类型,关于路由键的匹配规则
用String为例
生产者:负责新建信息 String str=new String()
消费者:负责打印信息 sout(str)
业务需要不是所有东西都打印的,有时候需要equals()有时候like ‘%XXX%’
根据不同的需要有4种默认的匹配叫做交换器
Direct ===equals
fanout ===like’%’
路由键规则 string.string.string
topic === { 把路由键以 . 分隔
“*” 匹配一段字符
“#“ 匹配多个字符
}与数据库like ‘%‘ ’_’类似 一个是单个字符,一个是一段字符。
headers 和direct类似但是不推荐使用
一个连接可以有多个信道
一个信道可以有多个路由键
一个信道只有一种交换器类型
生产者生产路由键 投递到交换器,交换器根据类型和队列绑定的路由键,把消息传递给队列,这里有可能有消息重复,队列最后把消息传递给队列的消费者,这里不会重复。
失败通知:
1。channel.basicPublish(EXCHANGE_NAME,routekey,true,null,message.getBytes());
参数mandatory=true
2.新增回调函数
发送方确认
// 启用发送者确认模式
channel.confirmSelect();
1。单个确认
2。批量确认
批量如果有错误
3。异步监听
deliveryTag 序号
multple 是否批量
备用交换器
alternate-exchange 固定格式
BAK_EXCHANGE_NAME 自定义命名
期间报了个错
ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange ‘main-exchange’ in vhost ‘zzhedu’, class-id=50, method-id=20)
但是还没找到原因自己好了,也无法重现
消费者
消费者拉取
推送
1。QOS
消息的拒绝
reject 单条
nack 多条
参数requeue 是否重新投递,是:还原到刚生产,否:丢弃
参数multiple 是否批量拒绝
死信交换器DLX
消息被拒绝 ,消息过期,队列超出
2019年12月2日21:00:28 今天结束,明天视频要讲与spring集成,那我可以回到springboot中去了。