Κοινή χρήση τεχνολογίας

Προσομοίωση για την αποφυγή διπλών υποβολών

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

διεύθυνση gitee (πρέπει να την παραλάβετε μόνοι σας)Διπλότυπες υποβολές AopProxy: Αποτροπή διπλότυπων υποβολών (gitee.com)

  1. @RestController
  2. public class SubmissionController {
  3. @Autowired
  4. private SubmissionService submissionService;
  5. private static Jedis jedis = new Jedis("localhost",6379);
  6. private String lock = "lock";
  7. private String lockValue = "locked";
  8. private int gqsj = 5;
  9. private String ok = "OK";
  10. @PostMapping("/submit")
  11. public void handleSubmitForm(@RequestParam String name, @RequestParam int age) {
  12. SubmissionService submissionServiceProxy = (SubmissionService) Proxy.newProxyInstance(submissionService.getClass().getClassLoader(), new Class[]{SubmissionService.class}, (proxy, method, args) -> {
  13. SetParams params = new SetParams();
  14. params.nx().ex(gqsj);
  15. String res = jedis.set(lock, lockValue,params);
  16. if (ok.equals(res)){
  17. Object invoke = method.invoke(submissionService,name,age);
  18. System.out.println("提交成功");
  19. return invoke;
  20. }else {
  21. System.out.println("不允许重复提交");
  22. return null;
  23. }
  24. });
  25. submissionServiceProxy.insert(name, age);
  26. // 存疑?第一天晚上return null后汇报一个空指针错误,奇怪的是第二天不报错了
  27. // 希望懂得大佬给小弟支个招
  28. // try{
  29. // submissionServiceProxy.insert(name, age);
  30. // }catch (NullPointerException e){
  31. // System.out.println("禁止重复提交");
  32. // }
  33. }
  34. }

Η ιδέα είναι να χρησιμοποιήσετε έναν διακομιστή μεσολάβησης για να εκτελέσετε τη μέθοδο, να χρησιμοποιήσετε την ιδέα του aop για να την τεμαχίσετε και να προσθέσετε ένα κατανεμημένο κλείδωμα πριν από την εκτέλεση της μεθόδου Το κατανεμημένο κλείδωμα εδώ χρησιμοποιεί το redis.nx και προσθέτει έναν χρόνο λήξης αποτρέψει το αδιέξοδο. Συνολικά, έκανα μόνο μια απλή προσομοίωση και η γραφή είναι σχετικά απλή, εάν υπάρχουν λάθη ή ελλείψεις, διορθώστε με και αφήστε μας να προχωρήσουμε μαζί.