RabbitMQ-基本概念(一)

整体架构模型

Producer

消息生产者,生产者创建消息然后发布到RabbitM中,消息一般包含2个部分 消息体(payload)和标签 消息体就是带有业务逻辑结构的数据,消息标签用来表述这条消息,比如交换器名称和路由键

生产者将消息交给RabbitMQ rabbItMQ会根据标签将消息投递到对应的消费组

队列

RabbitMQ的内部对象,用于存储消息 rabbitMQ不支持广播消息,当多个消费者订阅同一个队列,则会平均分摊到对应的消费者

Consumer

消费者,消费组连接到RabbitMQ并订阅到队列上,当消费一条消息只会消费消息体 标签会被丢弃

Exchange

交换器,生产者将消息投递到exchange exchange将消息路由到一个或者多个队列 如果路由不到可以返回给生产者或者直接丢弃exchange含有4种类型

fanout:将所有发送到该交换器的消息路由到所有与该交换器绑定的队列中

direct:将消息路由到routing key和binding key完全匹配的队列中

topic:direct是完全匹配 topic则是模糊匹配 如有路由键 

  路由键:*.rabbitmq.*可以路由:com.rabbitmq.client java.rabbitmq.demo

  路由键:*.*.client 可以路由com.rabbitmq.client com.hiddent.client

  路由键:com.#可以com.rabbitmq.client com.hiddent.client com.hiddent.demo

  .分割的算一个但是 *表示模糊一个单词 #表示多个单词

  比如*.rabbitmq.* 表示[任意一个单词].rabbitmq.[任意一个单词]  com.test.rabbitmq.com 是不能路由的 因为rabbtimq左边有2个单词 com和test

headers,

不依赖于路由键盘的匹配规则来路由消息 而是根据发送消息内容中的headers属性进行匹配,在绑定队列和交换器时指定一组键值对,发送消息会获取headers的来进行路由匹配 效率很低 基本不会使用

RoutingKey

路由键,生产者将消息发给交换器的时候一般会指定一个routingKey用来指定这个消息的路由规则 routingKey需要和BidingKey联合使用才能生效

BindingKey

通过BidingKey将交换器与队列关联起来 交换器通过BindingKey知道路由到哪个队列上

理解

producer理解为包裹寄送人

exchange 理解为配送驿站

routing key 理解为配置驿站地址

binding key理解目的地址 

复用Channel

发送消息和消费消息都需要1.创建连接再根据连接创建channel  跟java nio模型一样,复用连接多个生成者和多个消费者复用一个连接,避免为每个生产者和消费者都创建一个连接

但是要注意channel并不是线程共享的 需要为每个线程创建一个channel 不能a线程创建了channel进行发送消息 然后又给b线程发消息 b线程应该另外创建channel

什么是AMQP协议

上面的架构模型 生产者通过routing key投递消息到exchage exchage根据binding key 路由到队列 具体书26页

猜你喜欢

转载自www.cnblogs.com/LQBlog/p/10926831.html