当前位置:   article > 正文

微服务: 04-springboot中rabbitmq的yml或properties配置,消息回收,序列化方式_rabbitmq yml配置

rabbitmq yml配置

目录

1. 本文简介: 

1.1 java序列化的缺点

---> 1.1.1 无法跨语言

--->1.1.2  易被攻击

---> 1.1.3 序列化后的流太大

---> 1.1.4 序列化性能太差

2. 配置总览

2.1  基础配置

 2.2 连接重试配置

 2.3  异常重试机制

2.4 确认模式(本篇是自动)

 ---> 2.4.1 如图所示

2.5 发送确认设置

 ---> 2.5.1 参数解释: (老版的功能 直接是一个布尔值 false不开启  true开启)

---> 2.5.2  写一个callbackConfig, 重写方法

 2.6 重新配置序列化

---> 方法一: 都以application/json传递接收

---> 方法二:  都以application/json传递接收

 ---> 展示效果: 

3. 配置总结

3.1 完整的application.properties的配置

3.2 完整的application.yml配置

4. 文章传送门  

5. 下文预告


1. 本文简介: 

rabbitmq的连接配置, 以及回收机制配置, 修改默认java序列化方式

1.1 java序列化的缺点

---> 1.1.1 无法跨语言

 serialVersionUID版本号必须相同,相同类名 版本号不一样 反序列化失败

--->1.1.2  易被攻击

Apache Commons Collections 允许链式的任意的类函数反射调用,攻击者通过“实现了 Java 序列化协议”的端口,把攻击代码上传到服务器上,再由 Apache Commons Collections 里的 TransformedMap 来执行。

---> 1.1.3 序列化后的流太大

Java 序列化实现的二进制编码完成的二进制数组大小,比 ByteBuffer 实现的二进制编码完成的二进制数组大小要大上几倍。

---> 1.1.4 序列化性能太差

ObjectOutputStream序列化效率很低

2. 配置总览

2.1  基础配置

  1. #基础配置
  2. spring.rabbitmq.host=*
  3. spring.rabbitmq.port=5672
  4. spring.rabbitmq.username=pzy
  5. spring.rabbitmq.password=*
  6. spring.rabbitmq.virtual-host=develop

 2.2 连接重试配置

  1. # 开启rabbit初始化重试机制
  2. spring.rabbitmq.template.retry.enabled=true
  3. ## 最大重试间隔时间
  4. spring.rabbitmq.template.retry.max-interval=1000ms
  5. ## 最大重试次数
  6. spring.rabbitmq.template.retry.max-attempts=3
  7. # 间隔乘数
  8. spring.rabbitmq.template.retry.multiplier=1
  9. # 初始化的时间间隔
  10. spring.rabbitmq.template.retry.initial-interval=1000ms

 2.3  异常重试机制

  1. #异常重试机制设置[未加死信队列 五次异常后 直接抛弃了]
  2. #设置是否重回队列 true即出现异常会将消息重新发送到队列中
  3. spring.rabbitmq.listener.simple.default-requeue-rejected=true
  4. #设置是否启用消息重试机制,默认为false。
  5. spring.rabbitmq.listener.simple.retry.enabled=true
  6. #设置消息重试的最大次数,默认为3。
  7. spring.rabbitmq.listener.simple.retry.max-attempts=5
  8. #设置消息重试的初始间隔时间,默认为1000ms。
  9. spring.rabbitmq.listener.simple.retry.initial-interval=2000ms
  10. #设置消息重试的时间间隔倍数,默认为1(重试时间越来越长)
  11. spring.rabbitmq.listener.simple.retry.multiplier=1.2
  12. ##设置消息重试的最大时间间隔,默认为10000ms。
  13. spring.rabbitmq.listener.simple.retry.max-interval=3000ms

2.4 确认模式(本篇是自动)

  1. #spring.rabbitmq.listener.simple.acknowledge-mode=none
  2. spring.rabbitmq.listener.simple.acknowledge-mode=auto
  3. #spring.rabbitmq.listener.simple.acknowledge-mode=manual
  4. #spring.rabbitmq.listener.direct.acknowledge-mode=manual

 ---> 2.4.1 如图所示

 

2.5 发送确认设置

  1. #发布消息成功到交换器后会触发回调方法(默认禁用none)
  2. spring.rabbitmq.publisher-confirm-type=correlated
  3. #消息发布不可达目的地的时候 才进行回退
  4. spring.rabbitmq.publisher-returns=true

 ---> 2.5.1 参数解释: (老版的功能 直接是一个布尔值 false不开启  true开启)

None 禁用发布确认模式,是默认值
CORRELATED 发布消息成功到交换机后会触发回调方法
SIMPLE  有两种效果: 

其一: 效果和 CORRELATED 值一样会触发回调方法

其二: 在发布消息成功 使用 rabbitTemplate 调用 waitForConfirms 或 waitForConfirmsOrDie 方法 等待 broker 节点返回发送结果,根据返回结果来判定下一步的逻辑,要注意的点是 waitForConfirmsOrDie 方法如果返回 false 则会关闭 channel,无法发送消息到 broker

---> 2.5.2  写一个callbackConfig, 重写方法

  1. package com.aisce.axmall.order.config.rabbitmq;
  2. import lombok.NonNull;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.amqp.core.Message;
  5. import org.springframework.amqp.rabbit.connection.CorrelationData;
  6. import org.springframework.amqp.rabbit.core.RabbitTemplate;
  7. import org.springframework.context.annotation.Configuration;
  8. /**
  9. * rabbitmq的成功与失败
  10. * 消息回调
  11. * @author pzy
  12. * @description: TODO
  13. * @version 1.0.1 beta版
  14. */
  15. @Slf4j
  16. @Configuration
  17. public class RabbitCallbackConfig implements RabbitTemplate.ConfirmCallback, RabbitTemplate.ReturnCallback {
  18. /**
  19. * 消息正常发送 或者发送到broker后出现问题
  20. * @param correlationData
  21. * @param ack
  22. * @param cause
  23. */
  24. @Override
  25. public void confirm(CorrelationData correlationData, boolean ack, String cause) {
  26. if (!ack) {
  27. log.error("confirm==>发送到broker失败\r\n" + "correlationData={}\r\n" + "ack={}\r\n" + "cause={}",
  28. correlationData, ack, cause);
  29. } else {
  30. log.info("confirm==>发送到broker成功\r\n" + "correlationData={}\r\n" + "ack={}\r\n" + "cause={}",
  31. correlationData, ack, cause);
  32. }
  33. }
  34. /**
  35. * 压根没到目的地 执行
  36. * @param message
  37. * @param replyCode
  38. * @param replyText
  39. * @param exchange
  40. * @param routingKey
  41. */
  42. @Override
  43. public void returnedMessage(@NonNull Message message, int replyCode,
  44. @NonNull String replyText, @NonNull String exchange, @NonNull String routingKey) {
  45. log.error("error returnedMessage==> \r\n" + "message={}\r\n" + "replyCode={}\r\n" +
  46. "replyText={}\r\n" + "exchange={}\r\n" + "routingKey={}",
  47. message, replyCode, replyText, exchange, routingKey);
  48. }
  49. //可进行后续操作
  50. }

 2.6 重新配置序列化

有两种方式(原理差不多)

---> 方法一: 都以application/json传递接收

  1. @Configuration
  2. public class RabbitConfig {
  3. @Bean
  4. public MessageConverter messageConverter(){
  5. return new Jackson2JsonMessageConverter();
  6. }

---> 方法二:  都以application/json传递接收

  1. /**
  2. * rabbitmq配置类
  3. *
  4. * @author pzy
  5. * @version 0.1.0
  6. * @description: TODO
  7. */
  8. @Configuration
  9. public class RabbitConfig {
  10. @Autowired
  11. private SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory;
  12. @Autowired
  13. private RabbitCallbackConfig rabbitCallbackConfig;
  14. @Bean
  15. RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
  16. RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
  17. //消息到不到队列 自动重新返回到生产者
  18. rabbitTemplate.setMandatory(true);//其实前面配置加了
  19. rabbitTemplate.setConfirmCallback(rabbitCallbackConfig);
  20. rabbitTemplate.setReturnCallback(rabbitCallbackConfig);
  21. // 使用 JSON 序列化与反序列化
  22. rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
  23. rabbitListenerContainerFactory.setMessageConverter(new Jackson2JsonMessageConverter());
  24. return rabbitTemplate;
  25. }
  26. }

 ---> 展示效果: 


3. 配置总结

3.1 完整的application.properties的配置

  1. #beta版 rabbitmq V3.0.1 版本启动测试 pzy===============================================>
  2. #基础配置
  3. spring.rabbitmq.host=*
  4. spring.rabbitmq.port=5672
  5. spring.rabbitmq.username=pzy
  6. spring.rabbitmq.password=*
  7. spring.rabbitmq.virtual-host=develop
  8. #发送确认机制设置
  9. #发布消息成功到交换器后会触发回调方法(默认禁用none)
  10. spring.rabbitmq.publisher-confirm-type=correlated
  11. #消息发布不可达目的地的时候 才进行回退
  12. spring.rabbitmq.publisher-returns=true
  13. # 队列设置
  14. #设置每次预抓取的数量是3,处理完之前不收下一条 默认250
  15. spring.rabbitmq.listener.simple.prefetch=3
  16. # 手动确认模式
  17. #spring.rabbitmq.listener.simple.acknowledge-mode=manual
  18. spring.rabbitmq.listener.simple.acknowledge-mode=auto
  19. #spring.rabbitmq.listener.direct.acknowledge-mode=manual
  20. # 开启rabbit初始化重试机制
  21. spring.rabbitmq.template.retry.enabled=true
  22. ## 最大重试间隔时间
  23. spring.rabbitmq.template.retry.max-interval=1000ms
  24. ## 最大重试次数
  25. spring.rabbitmq.template.retry.max-attempts=3
  26. # 间隔乘数
  27. spring.rabbitmq.template.retry.multiplier=1
  28. # 初始化的时间间隔
  29. spring.rabbitmq.template.retry.initial-interval=1000ms
  30. #异常重试机制设置[未加死信队列 五次异常后 直接抛弃了]
  31. #设置是否重回队列 true即出现异常会将消息重新发送到队列中
  32. spring.rabbitmq.listener.simple.default-requeue-rejected=true
  33. #设置是否启用消息重试机制,默认为false。
  34. spring.rabbitmq.listener.simple.retry.enabled=true
  35. #设置消息重试的最大次数,默认为3。
  36. spring.rabbitmq.listener.simple.retry.max-attempts=5
  37. #设置消息重试的初始间隔时间,默认为1000ms。
  38. spring.rabbitmq.listener.simple.retry.initial-interval=2000ms
  39. #设置消息重试的时间间隔倍数,默认为1(重试时间越来越长)
  40. spring.rabbitmq.listener.simple.retry.multiplier=1.2
  41. ##设置消息重试的最大时间间隔,默认为10000ms。
  42. spring.rabbitmq.listener.simple.retry.max-interval=3000ms
  43. # beta版 ============================================================================>

3.2 完整的application.yml配置

properties 转成 yml 后 注释没了 具体看上面的

  1. #只有服务的消费者 决定怎么消费确认 生产者决定不了
  2. spring:
  3. rabbitmq:
  4. listener:
  5. simple:
  6. acknowledge-mode: manual
  7. default-requeue-rejected: true
  8. retry:
  9. enabled: true
  10. initial-interval: 2000ms
  11. max-attempts: 5
  12. max-interval: 3000ms
  13. multiplier: 1.2
  14. host: *
  15. port: 5672
  16. username: pzy
  17. password: *
  18. virtual-host: develop
  19. # 新版的就是publisher-confirm-type=correlated
  20. publisher-confirms: true
  21. publisher-returns: true
  22. template:
  23. retry:
  24. enabled: true
  25. initial-interval: 1000ms
  26. max-attempts: 3
  27. max-interval: 1000ms
  28. multiplier: 1

4. 文章传送门  

微服务: 00-rabbitmq出现的异常以及解决方案

微服务: 01-rabbitmq的应用场景及安装(docker)

微服务 02-rabbitmq在springboot中如何使用(上篇)

微服务: 03-rabbitmq在springboot中如何使用(下篇)

5. 下文预告

微服务: 05-rabbitmq设置重试次数并设置死信队列 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/483411
推荐阅读
相关标签
  

闽ICP备14008679号