RabbitMQ:1、入门
消息中间件
-
使用消息中间件的做用java
-
RabbitMQ的特色异步
- 可靠性
- 灵活的路由
- 扩展性
- 高可用
- 多语言客户端
- 插件机制
- 多协议(主要仍是AMQP)
相关概念

- Producer:生产者,投递消息的一方
- Consumer:消费者,接收消息的一方
- Broker:RabbitMQ的服务节点
- Queue:队列,是RabbitMQ的内部对象,用于存储消息。RabbitMQ中消息只能存储在队列中,这一点和Kafka这种消息中间件相反。Kafka将消息存储在topic(主题)这个逻辑层面,而相应的队列逻辑只是topic实际存储文件中的位移标识。RabbitMQ 的生产者生产消息井最终技递到队列中,消费者能够从队列中获取消息并消费。
多个消费者能够订阅同一个队列,这时队列中的消息会被平均分摊 CRound-Robin ,即轮询)
给多个消费者进行处理,而不是每一个消费者都收到全部的消息井处理,如图所示

RabbitMQ 不支持队列层面的广播消费,若是须要广播消费,须要在其上进行 次开发,处理逻辑会变得异常复杂,同时也不建议这么作。
- Exchange:交换器。上图看起来像是咱们将消息丢到消息队列当中,实际上这在rabbitMQ中不会发生。实际上生产者将消息丢到交换器中,由交换器将消息路由到一个或者多个队列中。
若是路由不到,或许返回给生产者,或许直接丢弃。交换器有四种类型。
- RoutingKey:路由键。生产者将消息->交换器时,通常指定一个RoutingKey来决定路由规则。RoutingKey须要和交换器类型及绑定键联合使用。
- Binding:绑定。经过绑定将队列和交换器关联起来。绑定时通常会指定绑定键(BingdingKey),当RoutingKey与BingdingKey匹配时,消息会被路由到对应的队列中。
- 交换器类型
- fanout:把全部发送到该交换器的消息路由到全部与该交换器绑定的队列中。
- direct:把消息路由到那些BindingKey与RoutingKey彻底匹配的队列中。
- topic:与direct类型有些相似,不过队列的匹配规则有些不一样
- RoutingKey为"."号分隔的字符串(被分开的每一段独立字符称为一个单词),如"com.rabbitmq.client","java.util.concurrent";
- BindingKey的形式与RoutingKey同样;
- BindingKey能够存在两种特殊字符串"","#",用于作模糊匹配,""用于匹配1个单词,"#"用于匹配多个单词(能够是0个)。
- headers:不依赖于路由键的规则,而是根据消息内容中的headers属性进行匹配。绑定队列和交换器时指定键值对,发送消息到交换器时,RabbitMQ会拿headers属性里的键值对进行对比,彻底匹配则会路由到对应队列。headers类型交换器性能不好,不多使用。
- Connection:生产者与消费者和Broker之间创建的TCP链接。
- Channel:信道。创建在Connection之上的虚拟链接。RabbitMQ处理的每条AMQP指令都是经过信道完成的。

RabbitMQ经过采用相似NIO的作法,选择TCP链接复用,减小性能开销,便于管理。
参考资料:RabbitMQ实战指南性能
欢迎关注本站公众号,获取更多信息