RabbitMq整体简介(包括工作模式、消息应答、事务机制)

一、优势与特性

RabbitMq的应用场景比较广泛,包括日志管理、应用解耦、流量削峰、异步处理。

其中都是利用了RabbitMq的异步性,响应机制等特性。

rabbitmq采用的amqp协议,该协议有spring的集成。

二、元素介绍

1、virtual host:为虚拟主机,可以理解为数据库,在定义的库中进行表的创建,进行后续操作,是基础性元素

2、channel:管道,是声明交换机、声明队列、发布消息、消息响应、交换机与队列绑定的载体

3、exchange:交换机,用于传递消息,队列可以绑定到交换机上从而获取转发的消息

4、queue:队列,消息的载体,可以持久化,可以通过不同的响应机制进行状态的标识及补偿消费

5、provider:生产者,消息的提供者,产生消息

6、consumer:消费者,消息的终端,进行消费的最后处理

三、工作模式

1、simple

简单模式,顾名思义,很简单,一个provider,一个queue,一个消费者

simple
simple-provider
simple-consumer

2、work模式

2.1 轮询模式(round)

1个provider,1个队列,多个消费者,消息是一个消费者处理一条,权重相同,你一个我一个

work-round
round-provider
round-consumer

2.2 公平模式(fair)

根据消费者的消费能力,消费完成后,就发下一条消息,多劳多得,但是需要告知mq服务器消费完成,所以要开启消息应答,这里开启自动应答模式

fair
fair-provider
fair-consumer

3、订阅模式

订阅模式中,出现了exchange交换机,在消息由生产者发送到消费者的过程中,增加了交换机,可以理解为路由器,作用是判断哪个队列满足条件然后发到哪个队列上

3.1 fanout

只要绑定到交换机上的队列都进行发放消息,强调雨露均沾

fanout
fanout-provider
fanout-consumer

3.2 direct

需要有rountingKey进行匹配,exchange会定义一个rountingKey,同样消费者也需要定义一个,只有二者相同,才会消费

direct
direct-provider
direct-consumer

3.3 topic

加入了通配符的rounting绑定,其中*为代替.之间的内容,#代表所有内容

topic
topic-provider
topic-consumer

四、事务机制

生产者发出消息后,需要确认mq服务器是否有收到该消息,两种方式实现

4.1 AMQP实现事务机制

txSelect:用户将当前channel设置成transation模式

txCommit:用于事务提交

txRollback:用于事务回滚

4.2 confirm模式

通过指派唯一的ID进行发送及监听回传

channel.confirmSelect()进行开启

五、消息应答

消费者应答默认为自动应答,channel.basicConsume(queue,autoBack,consumer);其中第二个参数即为是否自动应答,true为自动应答,即只要有消息调用了handleDelivery方法,即告知mq服务器正确消费,服务器将删除该条消息。

所以自动应答的问题就在于不清楚是否有正确消费该消息,容易造成消息的丢失。

所以引入手动应带模式,将上述参数设为false,然后通过channel进行应答

channel.basicAck(envelope.getDeliveryTag(),false,false); 即反馈成功,消息成功消费

channel.basicNack(envelope.getDeliveryTag(),false,false); 即反馈失败,消息失败,将重新发到其他队列

你可能感兴趣的:(RabbitMq整体简介(包括工作模式、消息应答、事务机制))