RabbitMQ

1.是什么?

        它是开源的消息队列系统,实现了高级的消息队列协议(AMQP),它是用Erlang编写的,设计主要目标是处理分布式系统庞大数据流,可以实现不同系统直接调用,跨不同系统不同语言。是一款非常好异步处理组件。

2.基本原理介绍

        它的核心思想就是生产者将消息发送到MQ服务器(Broker),消费者从Broker中订阅发布消息。下面就是它的原理图:

        上图中,Producer将消息推送到Exchange中,Exchange根据RoutingKey将消息路由到一个或者多个Queue中, Customer从Queue消费消息,其中Exchange和Queue可以使用Binding Key绑定,在实际使用中,Exchange可以有多个策略模式,包括FanOut(广播模式)、Direct(路由模式\直连模式)、Topic(通配符模式)等模式。

        1)消息确认机制

        生产者消息确认:生产者将消息发送到Broker后,Broker会返回给生产者一个确认(ACK)信号,如果没有收到确认信号,说明消息发送失败,此时可以根据需要重发等操作。

        消费者消息确认:消费者消费一条消息后,向Broker发送一个消费确认(ACK)信号,告诉Broker消费成功,可以从Queue中移除消息,如果没有收到消息确认(ACK)信号,Broker认为消息没有被消费,Broker会将其消息发送给其他消费者消费。通常用basic.ack或者basic.nack方法来实现消费者消费消息,消费成功丢弃消息,反之将消息重新放回队列当中。

        消息确认机制虽然可以提供消息的可靠性,同时就会增加系统复杂度和开销。

        2)消息持久化机制

        消息持久化之后,即使Broker宕机,消息也不会丢失。持久化一般分为两种:一是Producer发送的消息的持久化,channel.basicPublic,设MessageProperties.PERSISTENT_TEXT_PLAIN

为2;二是持久化Queue,channel.queueDeclare设置durable=true。

        消息持久机制虽然可以提供消息的可靠性,同时就会增加系统复杂度和开销,具体可以根据使用场景来确认是否持久化。

        3)事务

        为了确保数据一致性,保证所有操作原子性。如果事务提交成功,消息会发送到Broker,如果事务提交失败,消息不会发送到Broker。避免消息发送不确定性。提供方法有三个,打开事务channel.txSelect、channel.txCommit,channel.txRollback。

3.如何保证了高可用和性能

         1)集群部署:将多个节点组成一个逻辑集群,各个节点之间进行数据同步和负载均衡,实现高可用和可扩展性。

        2)消息持久化

        3)消息确认机制

        4)消息预取:RabbitMQ提供了消息预取机制,可以让消费者一次性获取多个消息进行消费,避免频繁地从队列中获取消息,提高性能

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值