RabbitMQ自我理解

1、RabbitMQ:

1.1、什么是 RabbitMQ?

RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦, 消息的发送者无需知道消息使用者的存在,反之亦然.

RabbitMQ 本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。

1.2.RabbitMQ 的优点(适用范围)

1.2.1基于 erlang 语言开发具有高可用高并发的优点,适合集群服务器。

1.2.2健壮、稳定、易用、跨平台、支持多种语言、文档齐全。

1.2.3有消息确认机制和持久化机制,可靠性高。

1.2.4开源

其他 MQ 的优势:

1.2.1 Apache ActiveMQ 曝光率最高,但是可能会丢消息。

1.2.2. ZeroMQ 延迟很低、支持灵活拓扑,但是不支持消息持久化和崩溃恢复。

2、AcitveMQ

2.1AcitveMQ 的作用、原理?(生产者。消费者。 p2p、订阅实现流程)

Activemq 的作用就是系统之间进行通信。当然可以使用其他方式进行系统间通信,如果使用 Activemq 的话可以对系统之间的调用进行解耦,实现系统间的异步通信。原理就是生产者生产消息,把消息发送给activemq。Activemq 接收到消息,然后查看有多少个消费者,然后把消息转发给消费者,此过程中生产者无需参与。消费者接收到消息后做相应的处理和生产者没有任何关系。

2.2ActiveMQ 在项目中应用场景?

Activemq 在项目中主要是完成系统之间通信,并且将系统之间的调用进行解耦。例如在添加、修改商品信息后,需要将商品信息同步到索引库、同步缓存中的数据以及生成静态页面一系列操作。在此场景下就可以使用 activemq。一旦后台对商品信息进行修改后,就向activemq 发送一条消息,然后通过activemq 将消息发送给消息的消费端,消费端接收到消息可以进行相应的业务处理。

2.3ActiveMQ 如果数据提交不成功怎么办?

Activemq 有两种通信方式,点到点形式和发布订阅模式。如果是点到点模式的话,如果消息发送不成功此消息默认会保存到 activemq 服务端知道有消费者将其消费,所以此时消息是不会丢失的。
如果是发布订阅模式的通信方式,默认情况下只通知一次,如果接收不到此消息就没有了。这种场景只适用于对消息送达率要求不高的情况。如果要求消息必须送达不可以丢失的话,需要配置持久订阅。每个订

阅端定义一个 id,在订阅是向 activemq 注册。发布消息和接收消息时需要配置发送模式为持久化。此时如果客户端接收不到消息,消息会持久化到服务端,直到客户端正常接收后为止。

3、MQ 的三种 Exchange 一.Direct Exchange

在这里插入图片描述直连模式

任何发送到 Fanout Exchange 的消息都会被转发到与该 Exchange 绑定(Binding)的所有 Queue 上。1.可以理解为路由表的模式
2.这种模式不需要 RouteKey

3.这种模式需要提前将 Exchange 与 Queue 进行绑定,一个 Exchange 可以绑定多个 Queue,一个 Queue 可以同多个 Exchange 进行绑定。

4.如果接受到消息的 Exchange 没有与任何 Queue 绑定,则消息会被抛弃。

二.Fanout Exchange
路由模式

任何发送到 Fanout Exchange 的消息都会被转发到与该 Exchange 绑定(Binding)的所有 Queue 上。
1.可以理解为路由表的模式
2.这种模式不需要 RouteKey
3.这种模式需要提前将 Exchange 与 Queue 进行绑定,一个 Exchange 可以绑定多个 Queue,一个 Queue 可
以同多个 Exchange 进行绑定。
4.如果接受到消息的 Exchange 没有与任何 Queue 绑定,则消息会被抛弃
三.Topic Exchange

在这里插入图片描述

任何发送到 Topic Exchange 的消息都会被转发到所有关心 RouteKey 中指定话题的 Queue 上
1.这种模式较为复杂,简单来说,就是每个队列都有其关心的主题,所有的消息都带有一个“标
题”(RouteKey),Exchange 会将消息转发到所有关注主题能与 RouteKey 模糊匹配的队列。
2.这种模式需要 RouteKey,也许要提前绑定 Exchange 与 Queue。
3.在进行绑定时,要提供一个该队列关心的主题,如“#.log.#”表示该队列关心所有涉及 log 的消息(一个
RouteKey 为”MQ.log.error”的消息会被转发到该队列)。
4.“#”表示 0 个或若干个关键字,“”表示一个关键字。如“log.”能与“log.warn”匹配,无法与“log.warn.timeout” 匹配;但是“log.#”能与上述两者匹配
5,同样,如果Exchange没有发现能够与RouteKey匹配的Queue,则会抛弃此消息。

上面是三个比较常见的rabbitMQ的传送模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值