zoukankan      html  css  js  c++  java
  • 初识RabbitMQ

    1:RabbitMQ是什么

    协议

    RabbitMq是基于AMPQ协议的一种 消息中间件

    消息路由过程

    简单路由

    RabbitMq 拿到消息之后,会先交给 交换机 (Exchange), 然后交换机再根据预先设定的不同绑定( Bindings )策略,来确定要发给哪个队列。

    灵活路由

    根据 RoutingKey 和 Arguments 来灵活匹配队列

    ExchangeName(交换机名称)+QueueName(队列名称)+RoutingKey+Arguments(头部属性) 四种属性组合确定最终消费队列。

    tip:当mq模式为topic时,同ExchangeName同QueueName不能使用不同的routingKey

    2:RabbitMQ的几种作用

    削峰

    适用于实时性不高,大批量请求的场景。
    比如10086群发百万级的中秋节祝福短信。

    异步

    适用于主要业务和其他业务进行分离的场景。
    比如在用户进行注册时,用户信息的插入肯定是同步的,但是用户的账户开通邮件可以是异步的。

    解耦


    3:RabbitMQ的几种模式

    fanout 模式

    类似于广播的作用。
    生产者将消息发送到某个队列,凡是绑定该队列的消费者都将消费这个消息。

    direct 模式

    具有分食的作用。
    生产者将消息发送到某个队列,绑定该队列的所有消费者将各自消费这个消息,
    该消息指派给某个消费者并确认消费后,不会再派发给其他消费者。

    topic 模式

    类似于订阅的作用。
    生产者将消息发送到某个队列,但队列中存在订阅了不同的topic(routingKey)的消费者,
    这些消费者只会消费自己订阅了的topic的消息。

    比如consumer_a 在‘bac’队列订阅了topic='rk.a'的消息,那么他只会收到topic='rk.a'的消息。
    比如consumer_b 在‘bac’队列订阅了topic='rk.b'的消息,那么他只会收到topic='rk.b'的消息。
    比如consumer_c 在‘bac’队列订阅了topic='rk.*'的消息,那么他只会收到topic=['rk.a','rk.b']的消息。

    header 模式

    在一堆条件中具有任意匹配和全匹配的作用。

    比如consumer_a 在‘bac’队列绑定了header={'id':1,"gz":2}的消息,
    匹配模式是'any',那么收到的消息可以为header={'id':1,"gz":2} 或者 header={'id':1,"gz":1}的消息。
    匹配模式是'all',那么收到的消息只能为header={'id':1,"gz":2}的消息。


    4:JAVA中如何使用RabbitMQ

    消费者构建过程

    生产者构建过程

    初始化ConnectionFactroy 代码:


    所有代码可点击github查看

  • 相关阅读:
    年终了,总结一下
    IIS7下安装.net1.1
    CSLA中的连接管理器ConnectionManager
    CSLA.NET权限规则的困惑
    修改 D
    存储过程万能分页 D
    C/S框架WebService架构用户凭证(令牌)解决方案
    C/S系统开发框架 WebService架构负载均衡技术(Load Balancing)
    C# .NET 开发框架 ClassGenerator 源码生成器 (C/S框架网)
    .Net开发框架
  • 原文地址:https://www.cnblogs.com/zgq7/p/13692616.html
Copyright © 2011-2022 走看看