美文网首页
[Spring 实战] Spring 消息

[Spring 实战] Spring 消息

作者: 檀香灰 | 来源:发表于2020-08-11 23:04 被阅读0次

    零.资料

    <<Spring实战>>

    一.基础

    1.1 异步消息

    1.异步消息有两个主要概念

    • 消息代理(message broker)
    • 目的地(destination)
      2.异步消息的好处
    • 将消息的发送者与消息的接收者进行解耦;
    • 消息客户端的位置独立

    1.2 消息的两种模型

    1.点对点消息模型

    1.png
    说明:
    • 每一条消息都有一个发送者和接收者
    • 消息代理得到消息时,将消息放入队列中;当接收者取出消息;
    • 消息投递后会删除
    • 接收者可以有多个

    类似银行业务办理,我们并不知道哪个柜员会帮我们办理业务。

    2.发布订阅消息模型

    2.png
    说明:
    • 所有主题的订阅者都可以收到消息;而点对点模型,消息只投递给一个接收者。

    类似杂志发行商和杂志订阅者。杂志(消息)出版后,发送给邮局,然后所有的订阅者都会收到杂志的副本。

    二.AMQP

    2.1 模型

    引入处理信息路由的Exchange 实现消息的生产者与消息队列之间解耦。

    • Exchange 会绑定到一个或多个队列上,它负责将消息路由到队列上。
    • Exchange 侧重在路由算法

    2.2 四种AMQP Exchange

    简单来讲,生产者将信息发送给Exchange并带有一个routing key,消费者从队列中获取消息。

    • Direct:如果消息的routing key与binding的routing key直接匹配的话,消息将会路由到该队列上;
    • Topic:如果消息的routing key与binding的routing key符合通配符匹配的话,消息将会路由到该队列上;
    • Headers:如果消息参数表中的头信息和值都与bingding参数表中相匹配,消息将会路由到该队列上;
    • Fanout:不管消息的routing key和参数表的头信息/值是什么,消息将会路由到所有队列上。


      3.png

    三.Spring AMQP

    3.1 配置

    1.connection-factory 设置

      <connection-factory id="connectionFactory" 
        host='{rabbitmq.host}' 
        port='{rabbitmq.port}' 
        username='{rabbitmq.username}' 
        password='{rabbitmq.password}' />
    

    2.声明队列queue

    <admin connection-factory="connectionFactory" />
    <queue id = "spittleAlertQueue" name="spittle.alert.queue" />
    

    为什么要声明 admin 元素?
    <admin>元素会创建一个RabbitMQ管理组件(administrative component),它会自动创建(如果它们在RabbitMQ代理中尚未存在的话)所声明的队列、Exchange以及binding。

    3.声明Exchange

    <fanout-exchange name="spittle.fanout">
     <bindings>
      <binding queue="spittle.alert.queue" />
     </bindings>
    </fanout-exchange> 
    

    4.消息Producer 使用rabbitTemplate 发送消息

      <template id="rabbitTemplate" 
              connection-factory="connectionFactory" 
              routing-key="spittle.alerts" />
    

    5.消息Consumer 使用rabbitTemplate 发送消息

    6.监听容器和监听器
    为什么需要监听器呢?
    当消息到达的时候,能够调用SpittleAlertHandler。

    <listener-container connection-factory="connectionFactory" >
        <listener ref="spittleListener" 
                  method="handleSpittleAlert"  
                  queues="spittleAlertQueue" />
    </listener-container>
    
    <beans:bean id="spittleListener" class="fc.handler.SpittleAlertHandler" />
    

    相关文章

      网友评论

          本文标题:[Spring 实战] Spring 消息

          本文链接:https://www.haomeiwen.com/subject/mpeudktx.html