作为一个java小白,被问到rabbitmq真是一脸懵逼啊,赶紧总结一下准备下一次的面试
一、什么是rabbitMQ?
采用AMQP高级消息队列协议的一种消息队列技术,最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦。
二、为什么要使用rabbitMQ?
1、在分布式系统下,具备异步,削峰,负载均衡等一系 列高级功能;
2、拥有持久化的机制,进程消息,队列中的信息也可以保存下来。
3、实现消费者和生产者之间的解耦
4、对于高并发场景下,利用消息队列可以使得同步访问变为串行访问达到一定量的限流,利于数据库的操作
5、可以使用消息队列达到异步下单的效果,排队中,后台进行逻辑下单
三、使用rabbitMQ的场景
1、服务间异步通信
2、顺序消费
3、定时任务
4、请求削峰
四、如何确保消息正确的发送到rabbitMQ?如何确保消息接收方消费了消息
1、发送方确认模式
将信道设置成confirm(发送方确认模式),则所有在信道上发布的消息都会被指派一个唯一的ID。一旦消息被投递到目的队列后,或者消息被写入磁盘后(可持久化的消息),信道会发送一个确认给生产者(包含消息唯一ID)。如果RabbitMQ发生内部错误从而导致消息丢失,会发送一条nack消息(not acknowledged,未确认)。
发送方确认模式是异步的,生产者应用程序在等待确认的同时,可以继续发送消息。当确认消息到达生产者应用程序ÿ