队列的两端都"开口",要求数据只能从一端进,从另一端出。
队列中数据的进出要遵循 "先进先出" 的原则,即最先进队列的数据元素,同样要最先出队列。
为什么需要消息队列
通过三个简单的业务模型了解消息队列的作用。
NameServer 主要负责数据源管理,包括对topic和路由信息管理
Broker 负责存储消息,单机可支持上W队列,支持消息推拉模式
Producer 消息生产者,负责生产消息,一般是业务系统
Consumer 消息消费者,负责消费消息,一般是业务系统
Broker: 主要负责消息的存储、投递和查询以及服务高可用保证。说白了就是消息队列服务器嘛,生产者生产消息到Broker,消费者从Broker拉取消息并消费。
一个Topic分布在多个Broker上,一个Broker可以配置多个Topic,它们是多对多的关系。
如果某个Topic消息量很大,应该给它多配置几个队列(上文中提到了提高并发能力),并且尽量多分布在不同Broker上,以减轻某个Broker的压力。
Topic消息量都比较均匀的情况下,如果某个broker上的队列越多,则该broker压力越大
NameServer: 不知道你们有没有接触过ZooKeeper和Spring Cloud中的Eureka,它其实也是一个注册中心,主要提供两个功能:Broker管理和路由信息管理。说白了就是Broker会将自己的信息注册到NameServer中,此时NameServer就存放了很多Broker的信息(Broker的路由表),消费者和生产者就从NameServer中获取路由表然后照着路由表的信息和对应的Broker进行通信(生产者和消费者定期会向NameServer去查询相关的Broker的信息)
参考文档 >AMQP(高级消息队列协议)是一个异步消息传递所使用的应用层协议规范,作为线路层协议,而不是API(例如JMS),AMQP客户端能够无视消息的来源任意发送和接受信息。AMQP的原始用途只是为金融界提供一个可以彼此协作的消息协议,而现在的目标则是为通用消息队列架构提供通用构建工具。因此,面向消息的中间件(MOM)系统,例如发布/订阅队列,没有作为基本元素实现。反而通过发送简化的AMQ实体,用户被赋予了构建例如这些实体的能力。这些实体也是规范的一部分,形成了在线路层协议顶端的一个层级:AMQP模型。这个模型统一了消息模式,诸如之前提到的发布/订阅,队列,事务以及流数据,并且添加了额外的特性,例如更易于扩展,基于内容的路由。AMQP当中有四个概念非常重要virtualhost,虚拟主机exchange,交换机queue,队列binding,绑定一个虚拟主机持有一组交换机、队列和绑定。为什么需要多个虚拟主机呢?因为RabbitMQ当中,用户只能在虚拟主机的粒度进行权限控制。因此,如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机。每一个RabbitMQ服务器都有一个默认的虚拟主机/。何谓虚拟主机(virtualhost),交换机(exchange)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)