JAVA突击面试 消息队列

消息队列使用的场景?

应用解耦: 用户下单,订单系统通知库存系统
削封填谷: 秒杀活动
日志系统 :客户端负责将日志采集,然后写入消息队列,消息队列再统一做数据的转发和存储

RabbitMq 优点

  • 可靠性,RabbitMq持久化支持,保证了消息的稳定性;
  • 高并发
  • 集群部署简单
  • 社区活跃
  • 插件多

RabbitMq 角色

  • 生产者: 消息的创建者,负责创建和推送数据
  • 消费者:消息的接收方
  • 代理者:就是RabbitMq 本身

RabbitMq 组件

RabbitMq重要的组件 :
ConnectionFactory(连接管理器) 应用程序与 RabbitMQ 之间建立连接的管理器,程序代码中使用;
Channel (信道)消息推送使用的通道;
Exchange(交换器)用于接受、分配消息;
Queue(队列) 用于存储生产者的消息;
RoutingKey(路由键) 用于把生成者的数据分配到交换器上;
BindingKey(绑定键) 用于把交换器的消息绑定到队列上

RabbitMQ 要实现消息持久化,需要满足哪些条件?

答:RabbitMQ 要实现消息持久化,必须满足以下 4 个条件:

投递消息的时候 durable 设置为 true,消息持久化,代码:channel.queueDeclare(x, true, false, false, null),参数 2 设置为 true 持久化;
设置投递模式 deliveryMode 设置为 2(持久),代码:channel.basicPublish(x, x, MessageProperties.PERSISTENTTEXTPLAIN,x),参数 3 设置为存储纯文本到磁盘;
消息已经到达持久化交换器上;
消息已经到达持久化的队列

RabbitMQ 交换器类型有哪些?

RabbitMQ 消费类型也就是交换器(Exchange)类型有以下四种:

direct:轮询方式
headers:轮询方式,允许使用 header 而非路由键匹配消息,性能差,几乎不用
fanout:广播方式,发送给所有订阅者
topic:匹配模式,允许使用正则表达式匹配消息
RabbitMQ 默认的是 direct 方式。

RabbitMQ 包含事务功能吗?如何使用?

答:RabbitMQ 包含事务功能,主要是对信道(Channel)的设置,主要方法有以下三个:

channel.txSelect() 声明启动事务模式;
channel.txComment() 提交事务;
channel.txRollback() 回滚事务。

.RabbitMQ 的事务在什么情况下是无效的?

答:RabbitMQ 的事务在 autoAck=true 也就是自动消费确认的时候,事务是无效的。因为如果是自动消费确认,RabbitMQ 会直接把消息从队列中移除,即使后面事务回滚也不能起到任何作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值