mq基本概念相关用法
mq:不处理快件,只负责接收存储转发消息 由交换机跟队列组成,可以一对多,一个交换机可以跟多个队列进行绑定关系
生产者:代表发包裹的人----》
消费者:每一个队列指定一个消费者,两个消费者可以接收同一个队列,但是只有一个消费者能收到消息
六大核心:
简单模式:
1:生产者代码,创建生产者发送新消息
2:消费者 接收消息
生产者-》发送消息到队列-》(接收消息)消费者
步骤:1:创建消息队列,生产者消费者,队列名需要一致
:2:创建连接工厂 ConnectionFactory 指定IP地址 用户名 密码
:3:创建连接信道,交换机 Connection connection = connectionFactory.newConnection();
//创建信道,连接交换机,连接队列
Channel channel = connection.createChannel();
:4:创建队列
:5:交换机执行 basicPublish方法
消费者接收消息:
步骤一二三四同上 ,交换价执行basicConsume方法接收消息 需要声明消息内容,取消消息时的回调
工作模式:
启动多个消费者:生产者发送数据消息量巨大的时候,消费者轮换接收队列数据
消息应答:消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并仅只完成,了部分突然它挂掉了,会发生什么情况。RabbitMQ 一旦向消费者传递了一条消息,便立即将该消
息标记为删除。在这种情况下,突然有个消费者挂掉了,我们将丢失正在处理的消息。以及后续发送给该消费这的消息,因为它无法接收到。为了保证消息在发送过程中不丢失,rabbitmq 引入消息应答机制,消息应答就是:消费者在接收
到消息并且处理该消息之后,告诉 rabbitmq 它已经处理了,rabbitmq 可以把该消息删除了。
自动应答:消息发送后立即被认为已经传送成功,仅适用于消费者可以高效并以某种速率能够处理这些消息的情况下使用。
手动应答:手动应答的好处是可以批量应答并且减少网络拥堵,可以批量处理,也可以不批量处理。
处理方法:A.Channel.basicAck(用于肯定确认) RabbitMQ 已知道该消息并且成功的处理消息,可以将其丢弃了
B.Channel.basicNack(用于否定确认)
C.Channel.basicReject(用于否定确认)与 Channel.basicNack 相比少一个参数不处理该消息了直接拒绝,可以将其丢弃了
消息重新入队:当某台服务器宕机之后,公平分发情况下,分配给宕机服务器的消息回重新回到消息队列
不公平分发:Chanel执行basicQos(1)方法,性能优越的服务器会处理更多的消息队列
预取值分发:chanel执行baseicQos(大于1),表示队列当中可以存在的最大值,入队列之后会等队列中消息执行完一条才会又新的队列进入
队列持久化:生产者创队列的时候是否持久化参数确定为true
消息持久化:生产者发布信息执行方法参数 MessageProperties.PERSISTENT_TEXT_PLAIN 添加这个属性