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

网站怎样恶意刷wap网站做微信小程序

网站怎样恶意刷,wap网站做微信小程序,建设网站怎么收费标准,润滑油东莞网站建设技术支持文章目录一、观察者模式1. 观察者模式基本概念2. 观察者模式的应用场景3. 观察者模式的类图二、设计异步多渠道群发框架2.1. 定义消息观察者抽象接口2.2. 创建观察者2.3. 主题通知所有观察者2.4. 观察者注册2.5. 自定义线程池2.6. 签单通知入口2.6. 异步通知接口测试2.7. 依赖三… 文章目录一、观察者模式1. 观察者模式基本概念2. 观察者模式的应用场景3. 观察者模式的类图二、设计异步多渠道群发框架2.1. 定义消息观察者抽象接口2.2. 创建观察者2.3. 主题通知所有观察者2.4. 观察者注册2.5. 自定义线程池2.6. 签单通知入口2.6. 异步通知接口测试2.7. 依赖三、Spring事件通知3.1. 定义消息实体类3.2. 定义(邮件)事件通知3.3. 定义(短信)事件通知3.4. 签单同步通知入口3.5. 测试效果3.6. 开源项目一、观察者模式 1. 观察者模式基本概念 一个对象状态改变通知给其他所有的对象 2. 观察者模式的应用场景 Zk的事件监听、分布式配置中心刷新配置文件、业务中群发不同渠道消息 3. 观察者模式的类图 二、设计异步多渠道群发框架 2.1. 定义消息观察者抽象接口 package com.gblfy.observer;import com.alibaba.fastjson.JSONObject;/*** 定义消息观察者(ObServer)抽象接口** author gblfy* date 2022-03-15*/ public interface GblfyObServer {void sendMsg(JSONObject jsonObject); } 2.2. 创建观察者 短信观察者 package com.gblfy.observer.impl;import com.alibaba.fastjson.JSONObject; import com.gblfy.observer.GblfyObServer; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component;/*** 定义(短信)事件通知** author gblfy* date 2022-03-15*/ Slf4j Component public class SmsObServer implements GblfyObServer {OverrideAsync(customAsyncThreadPool)public void sendMsg(JSONObject jsonObject) {log.info(观察者模式发送-短信--{}, jsonObject.toJSONString());} } 邮件观察者 package com.gblfy.observer.impl;import com.alibaba.fastjson.JSONObject; import com.gblfy.observer.GblfyObServer; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component;/*** 定义(邮件)事件通知** author gblfy* date 2022-03-15*/ Slf4j Component public class EmailObServer implements GblfyObServer {OverrideAsync(customAsyncThreadPool)public void sendMsg(JSONObject jsonObject) {log.info(观察者模式发送-邮件--{},jsonObject.toJSONString());} } 2.3. 主题通知所有观察者 package com.gblfy.observer;import com.alibaba.fastjson.JSONObject; import org.springframework.stereotype.Component;import java.util.ArrayList; import java.util.List;/*** 定义消注册中心主题通知所有观察者** author gblfy* date 2022-03-15*/ Component public class GblfySubject {//观察者容器private ListGblfyObServer obServerList new ArrayList();/*** 添加观察者** param gblfyObServer*/public void addObServer(GblfyObServer gblfyObServer) {obServerList.add(gblfyObServer);}/*** 通知所有的观察者** param jsonObject*/public void notifyObServer(JSONObject jsonObject) {obServerList.stream().forEach(p - p.sendMsg(jsonObject));} } 2.4. 观察者注册 项目启动自动注册观察者 package com.gblfy.start;import com.gblfy.observer.GblfyObServer; import com.gblfy.observer.GblfySubject; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component;import java.util.Map;/*** 项目启动注册观察者** author gblfy* date 2022-03-15*/ Component public class StartService implements ApplicationRunner, ApplicationContextAware {Autowiredprivate GblfySubject gblfySubject;//初始化上下文对象private ApplicationContext applicationContext;/*** 项目启动成功注册在观察着集合ObServer的子类实例** param args* throws Exception*/Overridepublic void run(ApplicationArguments args) throws Exception {/*** 根据接口类获取相应bena对象自动注册观察者* 1.使用spring获取ObServer下所有子类的bean对象* 2.将bean对象依次添加到gblfySubject观察者集合中即可*/MapString, GblfyObServer map applicationContext.getBeansOfType(GblfyObServer.class);for (String key : map.keySet()) {GblfyObServer gblfyObServer map.get(key);gblfySubject.addObServer(gblfyObServer);}}//获取上下文Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext applicationContext;} } 2.5. 自定义线程池 package com.gblfy.config;import org.springframework.context.annotation.Bean; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component;import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor;/*** Deacription 自定义异步线程池* Author gblfy* Date 2022-03-15 10:38**/ Component EnableAsync public class AsyncScheduledTaskConfig {Bean(customAsyncThreadPool)public Executor customAsyncThreadPool() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();//最大线程数executor.setMaxPoolSize(100);//核心线程数executor.setCorePoolSize(10);//任务队列的大小executor.setQueueCapacity(10);//线程池名的前缀executor.setThreadNamePrefix(gblfy-signpolicy-asynnotify-);//允许线程的空闲时间30秒executor.setKeepAliveSeconds(30);//设置线程池关闭的时候等待所有任务都完成再继续销毁其他的Beanexecutor.setWaitForTasksToCompleteOnShutdown(true);//设置线程池中任务的等待时间如果超过这个时候还没有销毁就强制销毁以确保应用最后能够被关闭而不是阻塞住executor.setAwaitTerminationSeconds(60);/*** 拒绝处理策略* CallerRunsPolicy()交由调用方线程运行比如 main 线程。* AbortPolicy()直接抛出异常。* DiscardPolicy()直接丢弃。* DiscardOldestPolicy()丢弃队列中最老的任务。*//*** 特殊说明* 1. 这里演示环境拒绝策略咱们采用抛出异常* 2.真实业务场景会把缓存队列的大小会设置大一些* 如果提交的任务数量超过最大线程数量或将任务环缓存到本地、redis、mysql中,保证消息不丢失* 3.如果项目比较大的话异步通知种类很多的话建议采用MQ做异步通知方案*/executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());//线程初始化executor.initialize();return executor;} }2.6. 签单通知入口 package com.gblfy.controller;import com.alibaba.fastjson.JSONObject; import com.gblfy.observer.GblfySubject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;/*** 签单通知入口** author gblfy* date 2022-03-15*/ Slf4j RestController public class SignPolicyController {Autowiredprivate GblfySubject gblfySubject;/*** 签单异步通知短信、邮件等多种方式** return*/GetMapping(/signPolicyToAsynNotify)public String signPolicy() {log.info(将签单信息保存数据库处理);JSONObject jsonObject new JSONObject();jsonObject.put(sms, 1766666666);jsonObject.put(email, 1766163.com);gblfySubject.notifyObServer(jsonObject);return success;} } 2.6. 异步通知接口测试 http://localhost:8080/signPolicyToAsynNotify2.7. 依赖 !--字符串工具类--dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.12.0/version/dependency!--数据json处理--dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.79/version/dependency!--SpringMVC--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency三、Spring事件通知 3.1. 定义消息实体类 package com.gblfy.entity;import org.springframework.context.ApplicationEvent;/*** 定义消息实体类** author gblfy* date 2022-03-15*/ public class SignPolicyMsgEntity extends ApplicationEvent {private String email;private String phone;private String userId;public SignPolicyMsgEntity(Object source) {super(source);}public SignPolicyMsgEntity(Object source, String email, String phone) {super(source);this.email email;this.phone phone;}Overridepublic String toString() {return email: email ,phone: phone;} } 3.2. 定义(邮件)事件通知 package com.gblfy.listener;import com.gblfy.entity.SignPolicyMsgEntity; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component;/*** 定义(邮件)事件通知** author gblfy* date 2022-03-15*/ Component Slf4j public class EmailListener implements ApplicationListenerSignPolicyMsgEntity {Overridepublic void onApplicationEvent(SignPolicyMsgEntity event) {log.info(eamil:-{}, event.toString());} } 3.3. 定义(短信)事件通知 package com.gblfy.listener;import com.gblfy.entity.SignPolicyMsgEntity; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component;/*** 定义(短信)事件通知** author gblfy* date 2022-03-15*/ Component Slf4j public class SmsListener implements ApplicationListenerSignPolicyMsgEntity {Overridepublic void onApplicationEvent(SignPolicyMsgEntity event) {log.info(sms:-{}, event.toString());}} 3.4. 签单同步通知入口 Autowired private ApplicationEventPublisher applicationEventPublisher;/*** 签单同步通知短信、邮件等多种方式* 使用spring事件通知** return*/GetMapping(/signPolicyToSyncNotify)public String signPolicyToSyncNotify() {log.info(将签单信息保存数据库处理);SignPolicyMsgEntity signPolicyMsgEntity new SignPolicyMsgEntity(this, 1766163.com, 1766666666);applicationEventPublisher.publishEvent(signPolicyMsgEntity);return success;}3.5. 测试效果 http://localhost:8080/signPolicyToSyncNotify3.6. 开源项目 https://gitee.com/gblfy/design-pattern/tree/observer-mode/
http://www.yutouwan.com/news/193257/

相关文章:

  • dw做网站背景图片设置app营销策划方案
  • 做外贸的网站平台有哪些内容宠物网站页面设计ps
  • 贷款公司如何做网站学校网站建设都是谁做的
  • 小程序开发和网站开发的区别wordpress 文章分开
  • 建站平台 在线提交功能公众号平台app
  • 建网站公司 优帮云织梦律师网站模版
  • 浙江网站建设而小程序加盟代理前景
  • 宠物美容网站建设的目的建筑木模板厂家
  • 深圳模板建站多少钱wordpress菜单登录
  • 广东宏福建设有限公司网站沈阳自助建站模板
  • 如何搭建一个企业子账号网站网络方案怎么写
  • asp c 网站开发dlink nas建设网站
  • 太原网站建设杰迅科技店铺管理软件
  • 营销型网站模板电商网站开发过程
  • 外贸网站设计公司海南网站建设粤icp备
  • 鞋材东莞网站建设网站开发语言为
  • wordpress注册可见插件青岛seo关键词排名
  • 邯郸哪儿做网站便宜四川教育公共信息服务平台
  • 广东茶叶网站建设php网站mysql数据库导入工具
  • 老外做牛排的视频网站微信公众号私自建设电影网站
  • 平面设计有什么网站凡科互动游戏修改速度
  • 网站建设属于会计哪个科目做阀门网站电话号码
  • 有什么可以做翻译的网站吗用vs2010做网站登入
  • 科技网站制作高德地图能在国外用吗
  • 视频网站开发 价格域名服务器有哪几种
  • 怎么seo网站关键词优化国家企业信用公示信息查询平台
  • 温州微网站重庆施工许可证查询
  • 南昌做任务的网站工信部网站域名备案信息查询
  • 重庆推广网站中企动力 网站价格
  • 做网站步骤响应网站怎么做