网站推广方法有哪些,上海进博会2022,网站浏览器兼容性问题吗,投资网站网站源码目录
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…目录
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 基础配置
#基础配置
spring.rabbitmq.host*
spring.rabbitmq.port5672
spring.rabbitmq.usernamepzy
spring.rabbitmq.password*
spring.rabbitmq.virtual-hostdevelop 2.2 连接重试配置
# 开启rabbit初始化重试机制
spring.rabbitmq.template.retry.enabledtrue
## 最大重试间隔时间
spring.rabbitmq.template.retry.max-interval1000ms
## 最大重试次数
spring.rabbitmq.template.retry.max-attempts3
# 间隔乘数
spring.rabbitmq.template.retry.multiplier1
# 初始化的时间间隔
spring.rabbitmq.template.retry.initial-interval1000ms 2.3 异常重试机制
#异常重试机制设置[未加死信队列 五次异常后 直接抛弃了]
#设置是否重回队列 true即出现异常会将消息重新发送到队列中
spring.rabbitmq.listener.simple.default-requeue-rejectedtrue
#设置是否启用消息重试机制默认为false。
spring.rabbitmq.listener.simple.retry.enabledtrue
#设置消息重试的最大次数默认为3。
spring.rabbitmq.listener.simple.retry.max-attempts5
#设置消息重试的初始间隔时间默认为1000ms。
spring.rabbitmq.listener.simple.retry.initial-interval2000ms
#设置消息重试的时间间隔倍数默认为1(重试时间越来越长)
spring.rabbitmq.listener.simple.retry.multiplier1.2
##设置消息重试的最大时间间隔默认为10000ms。
spring.rabbitmq.listener.simple.retry.max-interval3000ms
2.4 确认模式(本篇是自动)
#spring.rabbitmq.listener.simple.acknowledge-modenone
spring.rabbitmq.listener.simple.acknowledge-modeauto
#spring.rabbitmq.listener.simple.acknowledge-modemanual
#spring.rabbitmq.listener.direct.acknowledge-modemanual--- 2.4.1 如图所示 2.5 发送确认设置
#发布消息成功到交换器后会触发回调方法(默认禁用none)
spring.rabbitmq.publisher-confirm-typecorrelated
#消息发布不可达目的地的时候 才进行回退
spring.rabbitmq.publisher-returnstrue --- 2.5.1 参数解释: (老版的功能 直接是一个布尔值 false不开启 true开启) None 禁用发布确认模式是默认值CORRELATED 发布消息成功到交换机后会触发回调方法SIMPLE 有两种效果: 其一: 效果和 CORRELATED 值一样会触发回调方法 其二: 在发布消息成功 使用 rabbitTemplate 调用 waitForConfirms 或 waitForConfirmsOrDie 方法 等待 broker 节点返回发送结果根据返回结果来判定下一步的逻辑要注意的点是 waitForConfirmsOrDie 方法如果返回 false 则会关闭 channel无法发送消息到 broker --- 2.5.2 写一个callbackConfig, 重写方法
package com.aisce.axmall.order.config.rabbitmq;import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Configuration;/*** rabbitmq的成功与失败* 消息回调* author pzy* description: TODO* version 1.0.1 beta版*/
Slf4j
Configuration
public class RabbitCallbackConfig implements RabbitTemplate.ConfirmCallback, RabbitTemplate.ReturnCallback {/*** 消息正常发送 或者发送到broker后出现问题* param correlationData* param ack* param cause*/Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) {if (!ack) {log.error(confirm发送到broker失败\r\n correlationData{}\r\n ack{}\r\n cause{},correlationData, ack, cause);} else {log.info(confirm发送到broker成功\r\n correlationData{}\r\n ack{}\r\n cause{},correlationData, ack, cause);}}/*** 压根没到目的地 执行* param message* param replyCode* param replyText* param exchange* param routingKey*/Overridepublic void returnedMessage(NonNull Message message, int replyCode,NonNull String replyText, NonNull String exchange, NonNull String routingKey) {log.error(error returnedMessage \r\n message{}\r\n replyCode{}\r\n replyText{}\r\n exchange{}\r\n routingKey{},message, replyCode, replyText, exchange, routingKey);}//可进行后续操作} 2.6 重新配置序列化 有两种方式(原理差不多) --- 方法一: 都以application/json传递接收
Configuration
public class RabbitConfig {
Bean
public MessageConverter messageConverter(){return new Jackson2JsonMessageConverter();
}
--- 方法二: 都以application/json传递接收
/*** rabbitmq配置类** author pzy* version 0.1.0* description: TODO*/
Configuration
public class RabbitConfig {Autowiredprivate SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory;Autowiredprivate RabbitCallbackConfig rabbitCallbackConfig;BeanRabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {RabbitTemplate rabbitTemplate new RabbitTemplate(connectionFactory);//消息到不到队列 自动重新返回到生产者rabbitTemplate.setMandatory(true);//其实前面配置加了rabbitTemplate.setConfirmCallback(rabbitCallbackConfig);rabbitTemplate.setReturnCallback(rabbitCallbackConfig);// 使用 JSON 序列化与反序列化rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());rabbitListenerContainerFactory.setMessageConverter(new Jackson2JsonMessageConverter());return rabbitTemplate;}
} --- 展示效果: 3. 配置总结
3.1 完整的application.properties的配置
#beta版 rabbitmq V3.0.1 版本启动测试 pzy
#基础配置
spring.rabbitmq.host*
spring.rabbitmq.port5672
spring.rabbitmq.usernamepzy
spring.rabbitmq.password*
spring.rabbitmq.virtual-hostdevelop
#发送确认机制设置
#发布消息成功到交换器后会触发回调方法(默认禁用none)
spring.rabbitmq.publisher-confirm-typecorrelated
#消息发布不可达目的地的时候 才进行回退
spring.rabbitmq.publisher-returnstrue# 队列设置
#设置每次预抓取的数量是3,处理完之前不收下一条 默认250
spring.rabbitmq.listener.simple.prefetch3
# 手动确认模式
#spring.rabbitmq.listener.simple.acknowledge-modemanual
spring.rabbitmq.listener.simple.acknowledge-modeauto
#spring.rabbitmq.listener.direct.acknowledge-modemanual# 开启rabbit初始化重试机制
spring.rabbitmq.template.retry.enabledtrue
## 最大重试间隔时间
spring.rabbitmq.template.retry.max-interval1000ms
## 最大重试次数
spring.rabbitmq.template.retry.max-attempts3
# 间隔乘数
spring.rabbitmq.template.retry.multiplier1
# 初始化的时间间隔
spring.rabbitmq.template.retry.initial-interval1000ms#异常重试机制设置[未加死信队列 五次异常后 直接抛弃了]
#设置是否重回队列 true即出现异常会将消息重新发送到队列中
spring.rabbitmq.listener.simple.default-requeue-rejectedtrue
#设置是否启用消息重试机制默认为false。
spring.rabbitmq.listener.simple.retry.enabledtrue
#设置消息重试的最大次数默认为3。
spring.rabbitmq.listener.simple.retry.max-attempts5
#设置消息重试的初始间隔时间默认为1000ms。
spring.rabbitmq.listener.simple.retry.initial-interval2000ms
#设置消息重试的时间间隔倍数默认为1(重试时间越来越长)
spring.rabbitmq.listener.simple.retry.multiplier1.2
##设置消息重试的最大时间间隔默认为10000ms。
spring.rabbitmq.listener.simple.retry.max-interval3000ms# beta版
3.2 完整的application.yml配置 properties 转成 yml 后 注释没了 具体看上面的 #只有服务的消费者 决定怎么消费确认 生产者决定不了
spring: rabbitmq:listener:simple:acknowledge-mode: manualdefault-requeue-rejected: trueretry:enabled: trueinitial-interval: 2000msmax-attempts: 5max-interval: 3000msmultiplier: 1.2host: * port: 5672username: pzypassword: *virtual-host: develop# 新版的就是publisher-confirm-typecorrelatedpublisher-confirms: truepublisher-returns: truetemplate:retry:enabled: trueinitial-interval: 1000msmax-attempts: 3max-interval: 1000msmultiplier: 1
4. 文章传送门 微服务: 00-rabbitmq出现的异常以及解决方案 微服务: 01-rabbitmq的应用场景及安装(docker) 微服务 02-rabbitmq在springboot中如何使用(上篇) 微服务: 03-rabbitmq在springboot中如何使用(下篇) 5. 下文预告 微服务: 05-rabbitmq设置重试次数并设置死信队列