# lqw-vhr **Repository Path**: lqwcode/lqw-vhr ## Basic Information - **Project Name**: lqw-vhr - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-02 - **Last Updated**: 2021-03-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 问题清单 + #### 员工添加发送邮件业务中如何确保消息的幂等性 > 从两方面入手,消息发送确认以及消息消费确认 1 消息发送中设置消息发送到交换机,以及从交换机发送到队列的回调接口。由于失败发送到MQ的消息有可能是网络延迟等原因导致发送失败,所以通过mail_send_log表在进行消息发送时做记录 2 当员工入职发送邮件时,创建mail_send_log记录,其中state设置为0(1表示发送成功,2表示失败,0表示发送者) 3 mail_send_log中设置一个尝试次数的字段,通过定义定时器在规定时间内重新发送,定时器在规定时间内查询mail_send_log表中state为1的记录并发送,由于员工随时可能入职,所以定时器查询出来的记录有可能是刚发送的邮件,所以在mail_send_log中定义一个try_time来作为查询的判断 ```sql select * from mail_send_log where status=0 and tryTime < sysdate() ``` 4 经过上述操作,MQ中的queue仍然有重复消息的可能,例如当queue收到消息发送一个ack时,该ack因网络原因丢失,此时消费者会再次发送消息到MQ,导致MQ有重复消息的存在 5 上述操作之后,我们需要在接受方中保持幂等性,具体操作为在消息发送中设置一个邮件的全局唯一标识msgId,每次在进行消息确认时判断该msgId是否在redis中存在,若存在表示已经消费,不存在则存入到redis中。 UsernamePasswordAuthenticationFilter:登陆过程中的认证处理器,默认不能处理json,放回json即实现该类的继承 ProviderManager:认证管理器,DaoAuthenticationProvider为处理认证的类 能够处理UsernamePasswordAuthenticationToken的认证