阻塞队列实现日志接口开发

举报
经典鸡翅 发表于 2022/02/17 22:23:50 2022/02/17
【摘要】 前言 近日开发一个日志接口,供其他系统通过 webservice 进行调用。考虑到并发,多线程决定使用阻塞队列实现日志接口。记录实现的过程,供大家参考,对阻塞队列不了解的,可以参照上一篇博文。 实现阻塞队列 public class RemoteUpgradeLogQueue {    &...

前言

近日开发一个日志接口,供其他系统通过 webservice 进行调用。考虑到并发,多线程决定使用阻塞队列实现日志接口。记录实现的过程,供大家参考,对阻塞队列不了解的,可以参照上一篇博文。

实现阻塞队列


   
  1. public class RemoteUpgradeLogQueue {
  2.      private static RemoteUpgradeLogQueue remoteUpgradeLogQueue  = new RemoteUpgradeLogQueue();
  3.      //定义一个阻塞队列
  4.      private <u>BlockingQueue</u> blockingQueue = new
  5. LinkedBlockingQueue<>();
  6.      private RemoteUpgradeLogQueue(){}
  7.      public static RemoteUpgradeLogQueue getInstance(){
  8.            return remoteUpgradeLogQueue;
  9.      }
  10.      public Boolean push(RemoteUpgradeLogInfo
  11. remoteUpgradeLogInfo){
  12.            return <u>this</u><u>.</u><u>blockingQueue</u><u>.add(</u><u>remoteUpgradeLogInfo</u><u>)</u>;
  13.      }
  14.      public RemoteUpgradeLogInfo pop(){
  15.            RemoteUpgradeLogInfo remoteUpgradeLogInfo = null;
  16.            try {
  17.                 remoteUpgradeLogInfo = (RemoteUpgradeLogInfo)
  18. this.blockingQueue.take();
  19.            } catch (InterruptedException e) {
  20.                 System.out.println("从队列中取出日志错误!");
  21.            }
  22.            return remoteUpgradeLogInfo;
  23.      }
  24.      public int size(){
  25.            return this.blockingQueue.size();
  26.      }
  27. }

定义消费者

service调用的方法就为具体的处理日志的方法


   
  1. @Component
  2. public class DealRemoteUpgradeLogQueue {
  3.      @Autowired
  4.      private RemoteUpgradeLogService remoteUpgradeLogService;
  5.      
  6.      @PostConstruct
  7.      public void startLogThread(){
  8.            ExecutorService e = Executors.newFixedThreadPool(1);
  9.            e.submit(new PopLogInfo(remoteUpgradeLogService));
  10.      }
  11.      
  12.      class PopLogInfo implements Runnable {
  13.            RemoteUpgradeLogService remoteUpgradeLogService;
  14.         public PopLogInfo(RemoteUpgradeLogService
  15. remoteUpgradeLogService) {
  16.             this.remoteUpgradeLogService =
  17. remoteUpgradeLogService;
  18.         }
  19.         @Override
  20.         public void run() {
  21.             while (true) {
  22.                 try {
  23.                   RemoteUpgradeLogInfo remoteUpgradeLogInfo = RemoteUpgradeLogQueue.getInstance().pop();
  24.                     if(remoteUpgradeLogInfo!=null){
  25.                         remoteUpgradeLogService.saveLogInfo(remoteUpgradeLogInfo);
  26.                     }
  27.                 } catch (Exception e) {
  28.                     e.printStackTrace();
  29.                 }
  30.             }
  31.         }
  32.     }
  33. }

实现生产者

生产者直接往对列中 push 即可。

RemoteUpgradeLogQueue.getInstance().push(remoteUpgradeLogInfo);
  

文章来源: blog.csdn.net,作者:经典鸡翅,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/hanqing456/article/details/111878878

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。