当前位置: 首页 > news >正文

一般网站海报做一张多久成都网站seo厂家

一般网站海报做一张多久,成都网站seo厂家,深圳网站建站的公司,在哪里找给公司做网站优化的人文章目录 事件监听驱动 与 异步事件源ApplicationContextAware接口 发布事件事件实体监听事件实现异步注入綫程池 事件驱动机制,与MQ消息队列比较 事件监听驱动 与 异步 事件监听驱动优点:解耦,将 事件和业务进行解耦,通过Asyc注解…

文章目录

  • 事件监听驱动 与 异步
    • 事件源
      • ApplicationContextAware接口
    • 发布事件
    • 事件实体
    • 监听事件
    • 实现异步
    • 注入綫程池
  • 事件驱动机制,与MQ消息队列比较

事件监听驱动 与 异步

事件监听驱动优点:解耦,将 事件和业务进行解耦,通过@Asyc注解可以实现异步

事件监听驱动优点:解耦,将 事件和业务进行解耦,通过@Asyc注解可以实现异步

我们监听事件之前要有事件源source,事件(Event),发布事件(publishEvent),然后才能到监听事件。

事件驱动机制是观察者模式(称发布订阅)具体实现,事件对象(Event)相当于被观察对象(Subject), 事件监听(EventListener) 相当于观察者(Observer)

事件源

实现ApplicationContextAware接口
重写setApplicationContext方法
获取ApplicationContext对象

public class FilePhysicalDeleteEventListener implements ApplicationContextAware {private ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}
}

ApplicationContextAware接口

ApplicationContext作用具体参考 https://blog.csdn.net/Pluto372/article/details/130139628

在Spring/SpringMVC中,我们拿到IOC容器无非有三种方式,那就是使用ApplicationContext接口下的三个实现类:ClassPathXmlApplicationContextFileSystemXmlApplicationContextAnnotationConfigApplicationContext
但是SpringBoot的强大让我们无需再配置xml文件,也因此我们无法通过上述方式拿到ApplicationContext对象,所以当在项目需要用到spring中的bean对象时,一般做法就是实现ApplicationContextAware接口,通过这个接口就可以获取到ApplicationContext对象,进入从ApplicationContext中获取所需要bean对象。

总结:通过ApplicationContextAware接口获取ApplicationContext对象,ApplicationContext可以获取IOC容器中的bean

发布事件

通过ApplicationContext对象发布

 private void physicalDeleteFileByStorageEngine(List<RPanFile> realFileRecords) {//映射为路径集合List<String> realFilePathList = realFileRecords.stream().map(RPanFile::getRealPath).collect(Collectors.toList());DeleteFileContext context = new DeleteFileContext();context.setRealFilePathList(realFilePathList);try {storageEngine.delete(context);} catch (IOException e) {//记录错误日志applicationContext.publishEvent(new ErrorLogEvent(this, "实体文件:" + JSON.toJSONString(realFilePathList) + ", 物理删除失败,请执行手动删除", RPanConstants.ZERO_LONG));}}

事件实体

事件实体需要继承ApplicationEvent对象

@Getter
@Setter
@EqualsAndHashCode
@ToString
public class ErrorLogEvent extends ApplicationEvent {/*** 错误日志的内容*/private String errorMsg;/*** 当前登录的用户ID*/private Long userId;public ErrorLogEvent(Object source, String errorMsg, Long userId) {super(source);this.errorMsg = errorMsg;this.userId = userId;}
}

监听事件

注解@EventListener(ErrorLogEvent.class)方式监听事件

@Component
public class ErrorLogEventListener {@Autowiredprivate IErrorLogService iErrorLogService;/*** 监听系统错误日志事件,并保存到数据库中** @param event*/@EventListener(ErrorLogEvent.class)     //监听这个事件@Async(value = "eventListenerTaskExecutor")public void saveErrorLog(ErrorLogEvent event){RPanErrorLog record = new RPanErrorLog();//保存到数据库,调用mp 方法iErrorLogService.save(record);}
}

实现异步

实现异步,并指定线程池任务执行器,value 为指定线程池执行器的 bean的名称

@Async(value = “eventListenerTaskExecutor”)

当 ErrorLogEvent 事件发生时,相关的处理方法将会以异步的方式执行,
并且将使用指定的任务执行器 “eventListenerTaskExecutor”。不阻塞主线程,提高响应。

public class ErrorLogEventListener {@Autowiredprivate IErrorLogService iErrorLogService;/*** 监听系统错误日志事件,并保存到数据库中** @param event*/@EventListener(ErrorLogEvent.class)     //监听这个事件@Async(value = "eventListenerTaskExecutor")public void saveErrorLog(ErrorLogEvent event){RPanErrorLog record = new RPanErrorLog();//保存到数据库,调用mp 方法iErrorLogService.save(record);}
}

注入綫程池

通过Configuration注解和Bean注解以配置类的方式注入线程池
,通过name属性指定bean的名称

@SpringBootConfiguration
public class TreadPoolConfig {// 注入bean// 任务线程池执行器@Bean(name = "eventListenerTaskExecutor")public ThreadPoolTaskExecutor eventListenerTaskExecutor(){ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
//        new FutureTask<>();taskExecutor.setCorePoolSize(10);taskExecutor.setMaxPoolSize(10);taskExecutor.setKeepAliveSeconds(200);taskExecutor.setQueueCapacity(2048);taskExecutor.setThreadNamePrefix("event-listener-thread");//拒绝策略// CallerRunsPolicy 既不抛弃任务也不抛出异常,直接使用主线程来执行此任务// abort 直接拒绝并抛异常// discard 丢弃不抛出异常// discardEldest 抛弃队列中等待最久的taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());return taskExecutor;}
}

事件驱动机制,与MQ消息队列比较

MQ驱动的作用:解耦、异步、削峰
优点:解耦,异步,削峰,消息不丢失,解决高并发消息
缺点:难维护

事件驱动机制:解耦、异步,做不到削峰。
优点:维护简单
缺点:大并发扛不住,适合单机环境,消息可能丢失,无法削峰

总结MQ的优点

  1. 异步解耦
  2. 应对高并发的消息
  3. 适用于分布式环境
  4. 消息不丢失
  5. 对消息进行 削峰

总结MQ的缺点:

  1. 分布式场景下引发的复杂问题,如分布式事务等。
http://www.sczhlp.com/news/20954/

相关文章:

  • 用seo对网站做分析有创意的营销案例
  • 百度做网站推广怎么样百度一下你就知道官网百度
  • 网站宝搭建网站环境竞价培训课程
  • 2025“钉耙编程”中国大学生算法设计暑期联赛(1)
  • matlab裂纹检测与延展分析系统
  • 黄骅做网站_黄骅昊信科技|黄骅网站|黄骅网站开发|黄骅微信|黄骅网络推广外包业务怎么样
  • 电子商务网站建设期末湖北最新消息
  • 网站链接到邮箱怎么做windows优化软件
  • 电子商务网站毕业论文网站设计软件
  • 厦门酒店团购网站建设网站seo系统
  • 自己做网站用什么数据库用asp做的网站
  • 免费做网站表白网课免费平台
  • 单纯的文章网站怎么做天津网站排名提升
  • 聊城网站那家做的好产品推广方案怎么做
  • 吉安网站建设贵港seo关键词整站优化
  • 个人怎么做网站推广nba最新比赛直播
  • 信阳做网站公司汉狮价格百度手机浏览器下载
  • 链接映射文件(Link Map File)深度解析
  • 替代FTP迫在眉睫?信创环境下,这款国产传输工具更安全高效
  • 洛谷 P1363 幻象迷宫(bfs、思维)
  • 本土开发新篇章:深入解读 Gitee 如何赋能中国开发者
  • 上海网站编辑招聘seo兼职工资一般多少
  • 网站建设参考文献英文书籍seo从入门到精通
  • 网页制作视频教程自学网seo是什么车
  • 网站修改图片怎么做宝鸡seo外包公司
  • 做平台的网站有哪些功能吗2023年8月份新冠病毒
  • 想提升团队效率?这7款项目管理宝藏工具别错过!从世界级神器到国产黑马,一键解锁。
  • Matlab实现CT图像重建
  • 记录wifi设置图标消失经历
  • VMware Fusion网络配置