1.持久化需要重新设置队列
2.异步发布确认的坑, 生产者发消息太快只会确认最大的编号
1.消费者还是要确认消息
channel.basicAck(message.getEnvelope().getDeliveryTag(), false); 因为你发送的太快了,只会返回成功接收的最大的编号
3.消费者消息堆积(开启了消息手动确认,但是没有确认)
1.消费者要应答
DeliverCallback deliverCallback=(tag, delivery)->{
channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);
System.out.println("consumer1"+new String(delivery.getBody(),"UTF-8"));
};
2.消息提供者开启应答
channel.confirmSelect();
4.调用的方法不提示参数名,下载源代码即可
5.@Qualifier(“名字”)报错,导包错误
import org.mapstruct.Qualifier; //改为spring的
import org.springframework.beans.factory.annotation.Qualifier;
6.每改一个队列和交换机参数要删除队列和交换机,不然报 /host xxxx错误
7.交换机和队列声明多用 builder可以带很多参数
8.原生java连接mq的坑 ,最好设置两边提供者和消费者的参数(不论是优先队列还是惰性队列还是其他)
9.改参数一直有报错,同时删除队列和交换机
10.设置惰性队列,优先队列也可以使用(解决了)
11.创建交换机队列,绑定一定要用builder
12.坑了3天
联邦交换机 policy必须要删除其他之前同步的策略才能使用
13.联邦上游的坑
1.生产者发送消息,消费者会接收2次消息,原因是我把上游设置为他节点本身,所以
导致给上游备份的数据,又给本身节点,所以有两份数据
2.如果上游搞好了,那么下游消费数据,上游数据是也会更新状态
3.下游节点宕机,上游需要一个时间切换 需要负载均衡
4.下游恢复正常数据还是存在,还是需要设置一个id区分消息是否消费(不然重复消费)
14.学习完全部,建立了MQ集群发现出现 node3 is no accessible的异常,需要改界面的node名称为对应主机设置的名称
就是cluster那一行 如图mq集群节点异常