rabbitmq

使用消息队列主要有两点好处:1.通过异步处理提高系统性能(削峰、减少响应所需时间);2.降低系统耦合性。如果在面试的时候你被面试官问到这个问题的话
activemq性能不好,api完善。kafka追求吞吐量与性能,不支持事务,基于zookeeper集群。roocketmq高性能可扩展商业版收费。
rabbitmq是一个基于AMQP协议的跨平台的。
AMQP(Advaced Message Queuing Protocol)高级消息队列协议。
sercer:又称Broker,接受客户端的连接,实现AMQP实体服务。
connection:应用程序与Broker的网络连接。
channel:网络信道,几乎所有的操作都是在channel中进行,是进行消息读写的通道。客户端可建立多个channel。每个channel代表一个会话任务。
message:消息,服务器和应用程序之间传送的数据。
exchange:交换机,根据路由键转发消息绑定的队列。
channel.queueDeclare(queueName, true, false, false, null);//可以设定是否独占,持久化,自动删除
直连方式消息队列和交换机可以通过指定routingKey来同步,routingKey可以使用通配符。
Fanout交换机转发消息是最快的,不需要匹配与路由规则,简单的绑定队列与路由器。
在Message可以设置生命周期等。
生产端的可靠性投递:消息的成功发出,MQ节点的成功接收,确认应答,完善消息进行补偿机制
解决方案:消息持久化到数据库,对消息进行打标。
消息延迟投递,做二次确认,回调检查。
幂等性:对一个操作执行多少次每一次结果都是一致的(不会因为事务产生问题)。
保证幂等性: 唯一ID+指纹码,利用数据库主键去重。 redis的原子性。
实现confirm确认消息实现
1.在channel上开启confirm模式 2.在channel上添加监听器,要重写返回成功与失败的处理方法
return listrner用于处理一些不可路由的消息
NACK:拒绝签收
消费端限流:autoACK(false),设置单个消息大小,设置最多有多少个未ack的,再多就block。设置限制在client还是channel段。
重回队列:处理没有处理成功的队列(重写处理方法,比如重新添加到队列尾部)。
TTL队列,可以指定队列消息的有效时间或者队列的生存时间。
死信队列(Dead Letter Exchange):当一条消息没有消费者消费时重新publish到另一个exchange。通过交换机路由到指定的队列上。死信情况:消息被拒绝。TTL过期。队列达到最大长度。DLX也是一个正常的exchange。
springboot提供了rabbitmqtemplate可以设置生存时长,最大长度,使用它的excute方法执行修改删除等操作。核心是配置一个rabbitAdmin,通过rabbitAdmin去declare交换机等,绑定交换机与队列等。routingkey是做路由用的。
SimpleMessagelistenerContainer:简单消息监听容器,设置事务相关,可以动态的设置消费者数量,批量消费。
主备模式:主节点读写,备什么也不做,只是等待主节点故障备用。
集群模式:
多活模式:在两套或多套数据中心各部署一套集群。
HAProxy:提供高可用,负载均衡以及基于TCP和HTTP的应用代理软件。是一个单进程事件驱动的组件。
集群恢复与故障转移:1A先停B后停:按照顺序重新启动。
2:A先停且无法恢复B是master:解除与A的cluster的关系,再将新的slave加入B
3:A先停B后停且无法恢复B是master:选择新的节点作为master。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值