• AMQP规范。

    作用

  • 解耦、异步、削峰/限流

    消息中间件—RabbitMQ

    概念
  • 生产者

  • 消费者
  • 队列
  • 交换机
  • 路由
  • channel
  • 持久化
  • 自动删除
  • ttl

    交换机
  • 具有路由表的路由程序,每个消息都有一个路由键(routing key)的属性,是一个简单的字符串。

  • direct直连处理路由键一对一匹配,key完全一致。
  • fanout广播不处理路由键,发送到交换机的消息转发到所以绑定的队列。
  • topic主题路由键和某模式进行匹配,此时队列需要绑定一个模式上,符号“#”匹配一个或多个词,通配符“ ”匹配不多不少一个词。
    “audit.#”能够匹配到“audit.irs.corporate”,但是“audit.
    ” 只会匹配到“audit.irs”。(匹配才会转发)
  • headers首部忽略路由键的方式,规则是通过Headers信息来交换,有点像http请求头,当一个交换机声明首部交换机,绑定一个队列的时候,定义一个Hash的数据结构,消息发送的时候,会携带一组hash数据结构的信息,当hash内容匹配上的时候,消息就会被写入队列。

    模式

    配置
    1. spring:
    2. #rabbitmq配置
    3. rabbitmq:
    4. host: 127.0.0.1
    5. port: 5672
    6. username: guest
    7. password: guest
    8. publisher-confirms: true # 开启消息确认,这可不用管
    9. virtual-host: /
  • 简单simple,点对点

中间件--MQ消息队列 - 图1

  • 工作模式work,多个消费者
  • 轮询分发:
  • 公平分发:能者多劳、必须手动ack

中间件--MQ消息队列 - 图2

  • 发布订阅
  • 生产者是把消息发到交换机,然后交换机把数据发送到绑定的队列上。如果没有队列与之绑定,信息将会丢失,交换机不能存储信息。消费者监听队列,有就消费。

中间件--MQ消息队列 - 图3

  • 路由模式
  • 交换机路由键匹配到才发送
  • 主题topic

中间件--MQ消息队列 - 图4

  • 高可用
    • confirm模式
      • 消息持久化才算消费成功
    • ack机制

创建过程

  • 发送者代码 ```java @Autowired private RabbitTemplate rabbitTemplate ;

public void send(){ String str = “mq msg send … “ + new Date() rabbitTemplate.covertAndSend(“mymq” + str); }

  1. - 接收者代码
  2. ```java
  3. //消息发送到交换机,交换机根据不同的key发送到不同的队列
  4. @RabbitListener(bindings = @QueueBinding(exchange = @Exchange("mymq),
  5. key = "haha",
  6. value = @Queue("hehe)))
  7. public void receive(String str){
  8. log.info("mq = {}",str);
  9. }
  10. //接收消息
  11. @RabbitListener(bindings = @QueueBinding(
  12. value = @Queue("fruitOrder"),
  13. key = "ff",
  14. exchange = @Exchange("mymq")
  15. ))
  16. public void receiveff(String str){
  17. log.info("mq = {}",str);
  18. }