RabbitMQ概念简介

注:资料收集自网络与官方网站

1、RabbitMQ的整体架构与名词介绍:

154622_gaF4_2478308.png

2、RabbitMQ的四种Exchange(摘自官网)

        Direct exchange(单一传播交换机)

        direct exchange根据消息的routing key来传送消息。direct exchange是单一传播路由消息的最佳选择(尽管它们也可以用于多路传播路由),以下是它们的工作原理:  

  •     一个routing key为K的queue与exchange进行绑定
  •    当一条新的routing key为R的消息到达direct exchange时,如果K=R,exchange 将它路由至该queue    

    direct exchange经常用于在多个工作者(同一应用程序的多个实例)之间分配任务。direct exchange可以用图形方式表示如下:

         155102_C0AM_2478308.png

                      图源:官网

        155112_p5bm_2478308.png

                     图源:网络

        Fanout exchange(广播交换机)

        fanout exchange路由消息到所有的与其绑定的queue中,忽略routing key。如果N个queue被绑定到一个fanout exchange,当一条新消息被发布到exchange时,消息会被复制并且传送到这N个queue。fanout exchange是广播路由的最佳选择。因为一个fanout exchange传送消息的副本到每一个与其绑定的queue,它的使用情况很相似:

  •    大量的多用户在线(multi-player online MMO)游戏使用它更新排行榜或者其他的全体事件
  •    体育新闻网站使用fanout exchange向手机客户端实时发送比分更新
  •    分布式系统可以广播各种状态与配置更新
  •    群聊可以使用fanout exchange让消息在参与者之间传输

        一个fanout exchange图形化的表述如下:

         155533_wlaK_2478308.png

                            图源:官网

        155608_gNTi_2478308.png

                           图源:网络

        Topic exchange(多路广播交换机)

         Topic exchange路由消息到一个或者多个queue,基于消息的routing key和queue与exchange之间的绑定模式的匹配。Topic exchange经常被用于实现各种发布/订阅模式的变化。Topic exchanges通常被用于多路广播路由消息。    

         Topic exchange有非常多的应用场景。当一个问题牵涉到多个consumer/应用程序,他们有选择的选择他们接收何种何种类型的消息。可以考虑使用topic exchange。

         使用示例:

  •    销售与特定地理位置相关的数据,比如销售点
  •    由多个工作者完成的后台任务处理,每个都能够负责处理指定的任务
  •    库存价格更新(更新其他的财务数据)
  •    包含分类与标签的新闻更新(例如只针对某一个特定的运动或团队)
  •    不同种类的云服务编制 u 分布式结构/特定操作系统软件的构建与包装,每个处理者只能处理一个结构或者系统

        一个topic exchange图形化的表述如下:

       155903_xwuk_2478308.png

                                图源:网络

        Headers exchange(首部交换机)

         header exchange为在多个属性进行路由而设计的,这些属性更适合描述为消息头,而不是routing key。headers exchanges忽略routing key属性,相反用于路由的属性是从headers属性中获取的。如果消息头的值等于指定的绑定值,则认为消息是匹配的。      

         可以使用多个header匹配将一个queue绑定到header exchange。在这种情况下,broker需要从应用程序开发者那边获取多条信息,也就是说,是否应该考虑任何headers匹配的消息,还是所有headers都匹配的消息?这就是所谓的“x-match”绑定参数。当“x-match”参数的值被设为“any”,只要一个匹配的header值就足够了。相反的,设置“x-match”的值为“all”需要所有的headers值匹配。    

         Headers exchanges被视为“direct exchanges on steroids”。因为其依据headers值路由消息,可以被当做direct exchanges使用,routing key不必是一个字符串;举例来说它可以是一个整数或者一个hash(dictionary)

        Default exchange(默认交换机)

        default exchange是一个没有名称的(空字符串)被broker预先申明的direct exchange。它所拥有的一个特殊属性使它对于简单的应用程序很有作用:每个创建的queue会与它自动绑定,使用queue名称作为routing key。    

      举例说,当你申明一个名称为“search-indexing-online”的queue时,AMQP broker使用“search-indexing-online”作为routing key将它绑定到default exchange。因此,一条被发布到   default exchange并且routing key为"search-indexing-online"将被路由到名称为"search-indexing-online"的queue。换句话说,default exchange使直接传送消息到queue成为可能,即使从技术角度上而言,事实并不是这样。

转载于:https://my.oschina.net/u/2478308/blog/1519358

### RabbitMQ 的基本概念介绍 RabbitMQ 是一款流行的开源消息队列中间件,实现了高级消息队列协议(AMQP)[^1]。它使用 Erlang 语言编写,具备高可用性、可扩展性和易用性等特点,广泛应用于各种分布式系统中。 #### 1. 消息中间件的定义 消息中间件是一种应用程序之间的通信方法,用于在分布式系统中存储和转发消息。RabbitMQ 作为一种消息中间件,支持多种客户端语言,如 Python、Ruby、Java、.NET 等,并且支持 AJAX 和其他协议,例如 XMPP 和 STOMP[^3]。 #### 2. RabbitMQ 的基本结构 RabbitMQ 的基本结构包括以下几个关键组件: - **生产者(Producer)**:负责创建和发送消息到 RabbitMQ 服务器。 - **消费者(Consumer)**:从队列中接收和处理消息。 - **消息(Message)**:生产者发送的数据内容。 - **队列(Queue)**:用于存储消息的缓冲区,是消息的容器。 - **交换机(Exchange)**:根据路由规则将消息分发到一个或多个队列中。 - **绑定(Binding)**:定义交换机和队列之间的关系,包含路由键等信息[^5]。 #### 3. 工作原理 RabbitMQ 的工作流程可以概括为以下过程: - 生产者将消息发送到交换机。 - 交换机根据绑定规则和路由键,将消息分发到一个或多个队列。 - 消费者从队列中获取消息并进行处理[^3]。 #### 4. 特性与优势 RabbitMQ 凭借其高可靠、易扩展、高可用及丰富的功能特性,在互联网行业和传统行业中得到了广泛应用。以下是 RabbitMQ 的一些主要特性: - **高可靠性**:通过消息确认机制确保消息不会丢失。 - **高可用性**:支持集群部署,提供故障转移能力。 - **灵活的路由**:支持多种类型的交换机,如 Direct、Fanout、Topic 和 Headers。 - **多协议支持**:除了 AMQP,还支持 STOMP、MQTT 等协议[^3]。 #### 5. 配置示例 以下是一个简单的 RabbitMQ 配置代码示例,展示如何创建一个 RabbitTemplate 实例: ```java @Bean @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { RabbitTemplate template = new RabbitTemplate(connectionFactory); return template; } ``` 此代码片段展示了如何通过 Spring 框架配置 RabbitMQ 的连接工厂和模板对象[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值