多语言展示
当前在线:1090今日阅读:167今日分享:16

经典Java面试题:rabbitmq 有哪些重要的组件?

Server:Broker,接受client连接,实现AMQP实体服务 Connection:应用程序和Broker的网络连接 Channel:网络信道,读写都是在Channel中进行(NIO的概念),包括对MQ进行的一些操作(例如clear queue等)都是在Channel中进行, 客户端可建立多个Channel,每个Channel代表一个会话任务 Message:由properties(有消息优先级、延迟等特性)和Body(消息内容)组成 Virtual host:用于消息隔离(类似Redis 16个db这种概念),最上层的消息路由,一个包含若干Exchange和Queue,同一个里面Exchange 和Queue的名称不能存在相同的。 Exchange:Routing and Filter Binding:把Exchange和Queue进行Binding Routing key:路由规则 Queue:物理上存储消息
工具/原料
1

Server

2

Connection

3

Message

4

Exchange

5

Binding

6

Queue

方法/步骤
1

RabbitMQ是开源代理和队列服务器,通过普通协议在不同的应用之间共享数据,使用Erlang编写(Erlang进行数据交换的性能很好,和原生socket一样好的延迟响应效果),基于AMQP协议。

2

Exchange: 如果不指定Exchange的话,RabbitMQ默认使用,(AMQP default)注意一下,需要将routing key等于queue name相同 name、type:fanout(效率最好,不需要routing key,routing key如何设置都可以)、direct、topic(#一个或多个,*一个)、headers Auto Delete:当最后一个Binding到Exchange的Queue删除之后,自动删除该Exchange Binding:Exchange和Queue之间的连接关系,Exchange之间也可以Binding Queue:实际物理上存储消息的 Durability:是否持久化,Durable:是,即使服务器重启,这个队列也不会消失,Transient:否 Exclusive:这个queue只能由一个exchange监听restricted to this connection,使用场景:顺序消费 Message:由properties(有消息优先级、延迟等特性)和Body(Payload消息内容)组成,还有content_type、content_encoding、prioritycorrelation_id、reply_to、expiration、message_id等属性

3

onnectionFactory(连接管理器):应用程序与Rabbit之间建立连接的管理器,程序代码中使用。 Channel(信道):消息推送使用的通道。 Exchange(交换器):用于接受、分配消息。 Queue(队列):用于存储生产者的消息。 RoutingKey(路由键):用于把生成者的数据分配到交换器上。 BindingKey(绑定键):用于把交换器的消息绑定到队列上。

4

Server(broker):接收客户端连接,实现AMQP消息队列的路由功能的进程.简单来说就是消息队列服务器实体。 Vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。权限控制组,用户只能关联到一个vhost上,一个vhost中可以有若干个Exchange和Queue,默认的vhost是'/' Exchange:接收生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列 Exchange Type决定了Exchange路由消息额行为,例如,在RabbitMQ中,ExchangeType有Direct、Fanout和Topic三种,不同类型的Exchange路由得到行为是不一样的 queue:用于存储还未消费的消息。消息队列载体,每个消息都会被投入到一个或多个队列。 Message:由Header和Body组成,Header是由生产者添加到各种属性的集合,包括Message是否被持久化,是由哪个Message Queue接收优先级是多少等,而Body是真正需要传输的APP数据 Binding: 绑定,它的作用就是把exchange和queue按照路由规则绑定起来。 BindingKey: 在mq中设置的绑定key

5

Routing Key:路由关键字,exchange根据这个关键字进行消息投递。 producer:消息生产者,就是投递消息的程序。 consumer:消息消费者,就是接受消息的程序。 channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务

6

消息队列的使用过程大概如下 (1)客户端(生产者)连接到消息队列服务器,打开一个channel。 (2)客户端声明一个exchange,并设置相关属性。 (3)客户端声明一个queue,并设置相关属性。 (4)客户端使用routing key,在exchange和queue之间建立好绑定关系。 (5)客户端投递消息到exchange。

7

exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。 exchange也有几个类型,完全根据key进行投递的叫做Direct交换机,例如,绑定时设置了routing key为”abc”,那么客户端提交的消息,只有设置了key为”abc”的才会投递到队列。对key进行模式匹配后进行投递的叫做Topic交换机,符号”#”匹配一个或多个词,符号”*”匹配正好一个词。例如”abc.#”匹配”abc.def.ghi”,”abc.*”只匹配”abc.def”。还有一种不需要key的,叫做Fanout交换机,它采取广播模式,一个消息进来时,投递到与该交换机绑定的所有队列。

推荐信息