zoukankan      html  css  js  c++  java
  • RabbitMQ小结

    消息队列:AMQP高级消息队列协议。MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。
    目前,Spring唯一实现了RabbitMQ,但并不是说不支持其他的。
    大数据方面,一般使用Kafka。

    Producer
          创建连接,是指连接到路由吗?连接后,创建通道,是否专属的意思?是否可以多条通道?
          通道后声明创建队列,将消息发送至队列,等待消费者。(ready,unacked,total)
          关闭资源(通道,连接)。
    Consumer
          获取连接;获取通道;声明队列;定义队列的消费者;监听队列;获取消息。
        
    简单队列    :1P 1C。
    WORK队列:1P NC。又有平均分配和能者多劳两种模式,平均分配的时候是自动反馈完成状态,能者多劳时则需要手动返回完成状态。
             能者多劳模式还需要设置发送消息数量为1,  channel.basicQos(1);  channel.basicConsume(QUEUE_NAME,false,consumer);
    订阅队列 :1P X(EXCHANGE) NC。【】需要声明交换机(注意交换机类型)。

          项目中,修改商品时,发送消息至rabbitmq,前台系统删除缓存,更新索引。
            【】注意启动顺序,由于生产者声明交换机,所以必须先启动生产者,再启动消费者。


    三种交换机
        FANOUT EXCHANGE(无绑定路由键处理,分发消息至所有队列,类似广播);
        DIRECT EXCHANGE(消费者需要将一个队列绑定到交换机上,然后交换机会将路由键完全匹配的消息发送至该队列【发送消息时声明路由键,接收时也要声明路由键,一致才行】);完整匹配。
        TOPIC EXCHANGE(匹配交换机:将路由键和某模式进行匹配,#匹配一个或多个词,*匹配一个词。所以item.#可以匹配item.update.web,item.*只能匹配item.update)

    注意:有内存队列和持久化队列,内存交换机和持久化交换机。可以通过spring配置文件中的durable参数设置。区别就是速度效率和安全方面。    
        
    Spring整合RabbitMQ需要使用spring-amqp(包含spring-amqp和spring-rabbitmq)。

    队列和交换机的绑定方式:代码、配置文件、管理界面。

    20160901补充

    AMQP是协议,格式如下图(取自  Understanding AMQP, the protocol used by RabbitMQ):

    这里的Headers 和Properties 都是简单的键值对,区别在于前者的键是协议内定的,后者则是任意的。

    例如,一个标准的Header:routing-key  。而每个queue都有一个 binding-key,如果能和 routing-key 匹配,那就会收到消息。(是否匹配还要注意路由模式)

  • 相关阅读:
    OSI参考模型(转)
    H3C交换机配置常用命令(转)
    H3C交换机配置学习随笔
    [Swust OJ 247]--皇帝的新衣(组合数+Lucas定理)
    [Swust OJ 1084]--Mzx0821月赛系列之情书(双线程dp)
    [Swust OJ 404]--最小代价树(动态规划)
    [Swust OJ 610]--吉祥数
    [Swust OJ 137]--波浪数(hash+波浪数构造)
    [Swust OJ 566]--开N方数(牛顿切线法解高次方程)
    [Swust OJ 1125]--又见GCD(数论,素数表存贮因子)
  • 原文地址:https://www.cnblogs.com/larryzeal/p/5336381.html
Copyright © 2011-2022 走看看