brabbitMQ小记
基本概念:
RabbitMQ是基于AMQP协议来实现的消息中间件。AMQP,是类似于HTTP协议.Client要与Server进行通信,就必须先建立连接
消息生产者:是向交换器发送消息的客户端程序,我们可以简单理解为就是一个Java程序
交换器:用来接收生产者发送的消息,并将这些消息路由发送给服务器中的队列。消息要先经过交换器,再到队列中去。
消息队列:用来保存消息,直到发送给消费者,是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一致在队列里面,等待消费者连接到这个队列将其取走。
消费者:消息的消费者,表示一个从消息队列中取得消息的客户端应用程序,和Producer类似,我们可以简单理解为就是一个Java程序
服务者,交换机,消费者,是可以同时存在多个的。
工作模式:
1、简单模式 HelloWorld一个生产者、一个消费者,不需要设置交换机(使用默认的交换机).
2、工作队列模式 :一个生产者、多个消费者(竞争关系),不需要设置交换机(使用默认的交换机)
3、发布订阅模式 :需要设置类型为fanout的交换机,并且交换机和队列进行绑定,当发送消息到交换机后,交换机会将消息发送到绑定的队列
4、路由模式:需要设置类型为direct的交换机,交换机和队列进行绑定,并且指定routing key,当发送消息到交换机后,交换机会根据routing key将消息发送到对应的队列
5、通配符模式 :需要设置类型为topic的交换机,交换机和队列进行绑定,并且指定通配符方式的routing key,当发送消息到交换机后,交换机会根据routing key将消息发送到对应的队列
工作过程:1生产者发送消息,2消费者接收消息
面试题:RabbitMQ定义了几种交换机?
直连交换机: 根据消息携带的路由键(routing key)将消息投递给对应队列的。也就是说队列与交换机绑定时设置的路由键(routing key)必须与发送消息时指定的路由键(routing key)一样。
扇型交换机:需要指定路由键(routing key),你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。简单理解就是可绑定多个队列,同样一个队列也可以绑定多个交换机。如果发送消息的时候交换机没有绑定有队列,那么将丢弃该消息。
主题交换机:也可以理解为通配符交换机。主题交换机的routing_key需要有一定的规则,交换机和队列的binding_key需要采用*.#.*.....的格式,每个部分用.分开,其中:*表示一个单词;#表示任意数量(零个或多个)单词。因此“abc.#”能够匹配到“abc.def.ghi”,但是“abc.” 只会匹配到“abc.def”。
头交换机:不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。在绑定Queue与Exchange时指定一组键值对;当消息发送到RabbitMQ时会取到该消息的headers与Exchange绑定时指定的键值对进行匹配;如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers属性是一个键值对,可以是Hashtable,键值对的值可以是任何类型。而fanout,direct,topic 的路由键都需要要字符串形式的。匹配规则x-match有下列两种类型:x-match = all :表示所有的键值对都匹配才能接受到消息;x-match = any :表示只要有键值对匹配就能接受到消息。
RabbitMQ事务:事务的实现主要是对信道(Channel)的设置,主要的方法有三个:
channel.txSelect()声明启动事务模式;
channel.txComment()提交事务;
channel.txRollback()回滚事务;

浙公网安备 33010602011771号