一、生产者可靠性
(1)生产者重连(不建议使用)
logging:pattern:dateformat: MM-dd HH:mm:ss:SSSspring:rabbitmq:virtual-host: /hamllport: 5672host: 192.168.92.136username: hmallpassword: 123listener:simple:prefetch: 1connection-timeout: 1stemplate:retry:enabled: trueinitial-interval: 1000msmultiplier: 1max-attempts: 3
(2)生产者确认
引入日志依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency>
二、MQ持久化
(1)持久化介绍
发送100万条消息给队列,需要先在application.yml中取消生产者确认
publisher-confirm-type: nonepublisher-returns: false
没有持久化的测试用例,会出行阻塞的状态:
改为持久化后的测试用例:
(2)最好的持久化方式Lazy Queue
三、消息可靠性
(1)消费者确认
使用auto自动模式
(2)失败重试机制
(3)业务幂等性
四、延迟消息
(1)死信交换机
注意:创建的simple.queue需要Add Dead letter exchange,其他都跟之前创建的操作差不多
监听
@RabbitListener(queues = "dlx.queue")public void listenDlxQueue(String msg){log.info("dlx.queue消费者收到消息:"+msg);}
测试用例
@Testvoid testSendTTLMessage(){rabbitTemplate.convertAndSend("simple.direct", "hi", "hello", new MessagePostProcessor() {@Overridepublic Message postProcessMessage(Message message) throws AmqpException {message.getMessageProperties().setExpiration("10000");return message;}});log.info("消息发送成功!");}
(2)延迟消息插件
(3)取消订单