- Direct模式下,需要交换机exchange与路由routkey完全匹配,才能将消息路由到队列,如果routkey不匹配,则默认消息丢失。
- Direct模式,可以有多个消费者共享交换机,路由key,队列信息,此时消息会被发送到队列,而多个消费者同时从这个队列获取消息
- Direct模式下,如果不同的队列queue,使用了相同的交换机名称,路由key,那么生产者发送的消息,将会同时分发到不同的队列上,而且消息体一致,类似于广播模式。
- spring boot + rabbitmq2.2.4 ,默认每个消费者获取250条消息,即没有ac k的时候。
- rabbitmq 在有多个消费者的情况下,会实行轮训机制,即:每个消费者一条消息。
- 消费者中的channel.basicReover();方法会重新将所有的unack消息放回到队列并再次执行。比如:有5条消息没有应答,那么执行该方法后,这5条消息会反复消息,直到ack;
- 发送消息,1秒大约2w多个消息;
- 接受消息在只打印简单消息日志时,大约1700左右;打印日志在执行数据库时,大约1s 400~500个;无打印日志手动应答模式下每秒0.6w~1.1w多;无打印日志自动应答模式下每秒0.9w~1.4w多
总结:在用框架的东西时,如netty,rabbitmq接受消息时,尽量不要打印太多日志;最好将逻辑异步执行