精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot:Event實(shí)現(xiàn)發(fā)布/訂閱模式

開發(fā) 架構(gòu)
不管是否基于spring boot 的發(fā)布訂閱模型,最終都是開啟了線程執(zhí)行任務(wù),和使用第三方的MQ消息組件,問題在于重啟服務(wù)器或者未知原因崩潰的時(shí)候,消息的恢復(fù)機(jī)制要自行處理。

如圖所示支付業(yè)務(wù)中,用戶支付成功之后,后續(xù)還有很多的業(yè)務(wù)流程,但是對(duì)于用戶來講是透明的,所以為了提高接口的響應(yīng)速率,提高用戶體驗(yàn),后續(xù)操作都會(huì)選擇異步執(zhí)行

異步執(zhí)行方式

異步執(zhí)行主體

@Service
public class OrderService {
public void orderSuccess(){

// 訂單完成異步任務(wù)開啟 可以再統(tǒng)一封裝
Order order = new Order();
order.setOrderNo(String.valueOf(System.currentTimeMillis()));
Map<String, OrderSuccessService> orderSuccessServiceMap = SpringContextUtil.getBeansOfType(OrderSuccessService.class);
orderSuccessServiceMap.values().forEach(service -> {
service.orderSuccess(order);
});
}
}

異步執(zhí)行接口

public interface OrderSuccessService {
/**
* 訂單支付成功
* @param order
*/
public CompletableFuture<Boolean> orderSuccess(Order order);
}
@Slf4j
@Service
public class MerchantNoticeServiceImpl implements OrderSuccessService {
@Override
@Async("taskExecutor")
public CompletableFuture<Boolean> orderSuccess(Order order) {
log.info("{}商戶通知:{}",Thread.currentThread(),order);
// 返回異步調(diào)用的結(jié)果
return CompletableFuture.completedFuture(true);
}
}
@Slf4j
@Service
public class MerchantNoticeServiceImpl implements OrderSuccessService {
@Override
@Async("taskExecutor")
public CompletableFuture<Boolean> orderSuccess(Order order) {
log.info("{}商戶通知:{}",Thread.currentThread(),order);
// 返回異步調(diào)用的結(jié)果
return CompletableFuture.completedFuture(true);
}
}
@Slf4j
@Service
public class MerchantNoticeServiceImpl implements OrderSuccessService {
@Override
@Async("taskExecutor")
public CompletableFuture<Boolean> orderSuccess(Order order) {
log.info("{}商戶通知:{}",Thread.currentThread(),order);
// 返回異步調(diào)用的結(jié)果
return CompletableFuture.completedFuture(true);
}
}

自定義線程池,線程池隔離,開啟異步任務(wù)執(zhí)行

@Configuration // 配置類
@EnableAsync // @Async注解能夠生效
public class TaskConfiguration {
@Bean("taskExecutor")
public Executor taskExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 線程池創(chuàng)建時(shí)候初始化的線程數(shù)
executor.setCorePoolSize(5);
// 線程池最大的線程數(shù),只有在緩沖隊(duì)列滿了之后,才會(huì)申請超過核心線程數(shù)的線程
executor.setMaxPoolSize(10);
// 用來緩沖執(zhí)行任務(wù)的隊(duì)列
executor.setQueueCapacity(200);
// 當(dāng)超過了核心線程之外的線程,在空閑時(shí)間到達(dá)之后會(huì)被銷毀
executor.setKeepAliveSeconds(60);
// 可以用于定位處理任務(wù)所在的線程池
executor.setThreadNamePrefix("taskExecutor-orderSuccess-");
// 這里采用CallerRunsPolicy策略,當(dāng)線程池沒有處理能力的時(shí)候,該策略會(huì)直接在execute方法的調(diào)用線程中運(yùn)行被拒絕的任務(wù);
// 如果執(zhí)行程序已關(guān)閉,則會(huì)丟棄該任務(wù)
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 設(shè)置 線程池關(guān)閉 的時(shí)候 等待 所有任務(wù)都完成后,再繼續(xù) 銷毀 其他的 Bean,
// 這樣這些 異步任務(wù) 的 銷毀 就會(huì)先于 數(shù)據(jù)庫連接池對(duì)象 的銷毀。
executor.setWaitForTasksToCompleteOnShutdown(true);
// 該方法用來設(shè)置線程池中 任務(wù)的等待時(shí)間,如果超過這個(gè)時(shí)間還沒有銷毀就 強(qiáng)制銷毀,以確保應(yīng)用最后能夠被關(guān)閉,而不是阻塞住。
executor.setAwaitTerminationSeconds(60);
return executor;
}
}

Spring Event實(shí)現(xiàn)發(fā)布/訂閱模式

自定義事件:通過繼承ApplicationEve?

nt,并重寫構(gòu)造函數(shù),實(shí)現(xiàn)事件擴(kuò)展。

public class OrderApplicationEvent extends ApplicationEvent {
public OrderApplicationEvent(OrderData orderData){
super(orderData);
}
}

定義事件的消息體

@Data
public class OrderData {
/**
* 訂單號(hào)
*/
private String orderNo;
}

事件監(jiān)聽

@Slf4j
@Service
public class MerchantNoticeListener {
@Async("asyncEventTaskExecutor")
@EventListener
public CompletableFuture<Boolean> orderSuccess(OrderApplicationEvent event) {
log.info("{}商戶通知:{}",Thread.currentThread(),event);
// 返回異步調(diào)用的結(jié)果
return CompletableFuture.completedFuture(true);
}
}
@Slf4j
@Service
public class UserNoticeListener implements ApplicationListener<OrderApplicationEvent> {
@Override
@Async("asyncEventTaskExecutor")
public void onApplicationEvent(OrderApplicationEvent event) {
log.info("{}用戶通知:{}",Thread.currentThread(),event);
}
}
@Slf4j
@Service
public class UserNoticeListener implements ApplicationListener<OrderApplicationEvent> {
@Override
@Async("asyncEventTaskExecutor")
public void onApplicationEvent(OrderApplicationEvent event) {
log.info("{}用戶通知:{}",Thread.currentThread(),event);
}
}
@Slf4j
@Service
public class UserNoticeListener implements ApplicationListener<OrderApplicationEvent> {
@Override
@Async("asyncEventTaskExecutor")
public void onApplicationEvent(OrderApplicationEvent event) {
log.info("{}用戶通知:{}",Thread.currentThread(),event);
}
}

自定義線程池

@Configuration
@Slf4j
@EnableAsync // @Async注解能夠生效
public class AsyncConfiguration implements AsyncConfigurer {
@Bean("asyncEventTaskExecutor")
public ThreadPoolTaskExecutor executor(){
//Spring封裝的一個(gè)線程池
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(50);
executor.setQueueCapacity(30);
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.setThreadNamePrefix("asyncEventTaskExecutor--orderSuccess-");
executor.initialize();
return executor;
}

@Override
public Executor getAsyncExecutor(){
return executor();
}

/**
* 異常處理
* @return
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler(){
return (ex, method, params) -> log.error(String.format("[async] task{} error:", method), ex);
}
}

事件發(fā)布

@Service
@Slf4j
public class OrderEventService {
private final ApplicationEventPublisher applicationEventPublisher;

public OrderEventService(ApplicationEventPublisher applicationEventPublisher){
this.applicationEventPublisher = applicationEventPublisher;
}
public void success(){
OrderData orderData = new OrderData();
orderData.setOrderNo(String.valueOf(System.currentTimeMillis()));
// 消息
OrderApplicationEvent orderApplicationEvent = new OrderApplicationEvent(orderData);
// 發(fā)布事件
applicationEventPublisher.publishEvent(orderApplicationEvent);
}
}

寫在最后:不管是否基于spring boot 的發(fā)布訂閱模型,最終都是開啟了線程執(zhí)行任務(wù),和使用第三方的MQ消息組件,問題在于重啟服務(wù)器或者未知原因崩潰的時(shí)候,消息的恢復(fù)機(jī)制要自行處理。

建議使用在一些邊緣業(yè)務(wù),比如記錄日志,這些要求沒有那么高的業(yè)務(wù)。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2022-06-27 13:56:10

設(shè)計(jì)模式緩存分布式系統(tǒng)

2024-07-02 11:42:53

SpringRedis自定義

2023-11-10 09:22:06

2025-01-09 11:15:47

2024-07-29 08:34:18

C++訂閱者模式線程

2009-11-05 10:07:37

WCF設(shè)計(jì)模式

2023-03-03 12:39:25

MQTT工廠模式

2025-02-25 09:29:34

2024-03-28 08:07:42

RabbitMQ訂閱模式

2024-05-14 08:03:51

C#EventArgs?屬性

2021-08-02 17:21:08

設(shè)計(jì)模式訂閱

2024-01-10 08:16:08

Redis集成JMS

2023-12-04 08:24:23

2025-03-11 09:30:00

2020-09-15 10:25:13

Redis命令Java

2022-08-15 09:02:22

Redis模式訂閱消息

2022-07-13 08:36:57

MQ架構(gòu)設(shè)計(jì)模式

2010-03-02 16:28:11

WCF發(fā)布訂閱

2023-12-14 10:10:09

pythonRedis開發(fā)

2022-09-19 16:08:31

Dapr發(fā)布訂閱
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日本丶国产丶欧美色综合| av电影在线观看一区| 日韩有码在线观看| 26uuu国产| 老司机深夜福利在线观看| 久久久99久久| 亚洲aaa激情| 久久久国产精品成人免费| 日韩在线高清| 亚洲国产精品成人va在线观看| 99久久国产宗和精品1上映| 五月婷婷在线观看| 成人精品亚洲人成在线| 国产福利视频一区| 国产乡下妇女做爰毛片| 色777狠狠狠综合伊人| 欧美成人性福生活免费看| 欧美黄色一级片视频| av中文字幕在线观看| 国产欧美一区二区精品婷婷 | 亚洲欧美国产高清va在线播| 中文字幕日韩综合| **在线精品| 亚洲午夜视频在线观看| 在线看成人av电影| 好男人免费精品视频| 豆国产96在线|亚洲| 国产精自产拍久久久久久蜜| 天天干天天干天天干天天| 欧美在线首页| 日韩中文字幕久久| 日本美女xxx| 综合亚洲自拍| 亚洲精品电影网| www.黄色网| 国产精品日本一区二区三区在线| 在线观看免费一区| 日本三级免费网站| 欧美gv在线观看| 一区二区三区91| 亚洲自拍偷拍一区二区三区| 95在线视频| 国产欧美精品在线观看| 欧美亚洲精品日韩| 日本不卡免费播放| 久久久一区二区三区| 久久久久欧美| 日本高清中文字幕二区在线| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 91中文在线| 亚洲欧洲韩国日本视频| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 国产永久免费高清在线观看视频| 26uuu欧美| 欧美一区二区三区四区夜夜大片| 欧美性孕妇孕交| 久久这里只有精品6| 久草一区二区| 久久精品蜜桃| 国产三级三级三级精品8ⅰ区| 久久精品国产综合精品| 四虎在线免费观看| 久久黄色小视频| 香港久久久电影| 日韩三级免费观看| jjzz黄色片| 97se亚洲| 日韩精品极品视频免费观看| 亚洲狠狠婷婷综合久久久久图片| 一区二区三区韩国免费中文网站| 精品在线小视频| 免费网站在线高清观看| 久久精品国产99久久| 久久韩剧网电视剧| 久久黄色免费网站| 亚洲一区久久| 国产精品99久久久久久www| 中文字幕乱码中文字幕| 国产一区二区在线影院| 春色成人在线视频| 日韩porn| 国产精品成人一区二区三区夜夜夜| 男人天堂成人网| 爱看av在线入口| 日本高清不卡在线观看| 欧美激情国内自拍| 日韩成人动漫在线观看| 国产一区二区三区视频在线观看| 97在线观看免费高| 在线高清一区| 国产精品视频久久| 丰满人妻一区二区三区无码av| 91色.com| 亚洲欧洲精品一区二区| 欧洲精品二区| 色8久久精品久久久久久蜜| 九九九九九伊人| 天天躁日日躁狠狠躁欧美| 欧美自拍第一页| 国产婷婷精品av在线| 最新中文字幕久久| 亚洲中文无码av在线| 在线看的av网站| 国产精品美女久久久久高潮| 被灌满精子的波多野结衣| 91国内外精品自在线播放| 欧美一区永久视频免费观看| 朝桐光av一区二区三区| 亚洲精品极品少妇16p| 欧美亚洲成人精品| 精品女同一区二区三区| 国产日韩欧美不卡在线| 日韩中文在线字幕| 欧美色片在线观看| 亚洲成人网久久久| 国产色无码精品视频国产| 香蕉久久夜色精品| 99视频在线免费观看| 国产黄色片在线播放| 亚洲综合激情小说| 国产成人美女视频| 奇米狠狠一区二区三区| 久久久免费电影| 国产理论视频在线观看| 中文字幕精品三区| 久久久精品在线视频| 51vv免费精品视频一区二区| 色系列之999| 怡红院av久久久久久久| 北条麻妃一区二区三区| www.国产二区| 国产精品一区二区三区www| 一区二区三区四区精品| 无码一区二区三区在线观看| 97精品久久久午夜一区二区三区| 黄色激情在线视频| 久久久久久久久久久久电影| 色偷偷噜噜噜亚洲男人| 亚洲精品91天天久久人人| 337p粉嫩大胆色噜噜噜噜亚洲| 国产曰肥老太婆无遮挡| 影音先锋欧美激情| 色综合色综合网色综合 | 欧美日韩在线免费视频| 国产精品亚洲无码| 小嫩嫩精品导航| 美女被啪啪一区二区| 中国色在线日|韩| 日韩大陆毛片av| 天天做天天爱夜夜爽| 99精品视频一区二区| 日韩av在线播放不卡| 18国产精品| 久久久亚洲成人| 免费av网站观看| 都市激情亚洲色图| 日韩中文字幕电影| 日韩精品视频网站| 亚洲欧美丝袜| 不卡一区视频| 欧美国产在线视频| 手机看片1024日韩| 色综合久久综合网97色综合| 日本性高潮视频| 麻豆精品一区二区三区| 麻豆md0077饥渴少妇| 亚洲日本va午夜在线电影| 久久久久久久久91| 三级视频在线播放| 欧美在线观看视频一区二区| 国产在线免费看| 国产精品一卡二| 性欧美大战久久久久久久| 天堂av一区二区三区在线播放| 国产精品69av| av免费看在线| 日韩精品视频在线观看网址| 欧美日韩 一区二区三区| 国产精品久久久久永久免费观看| 天天爽夜夜爽视频| 99国内精品| 亚洲精品日韩在线观看| 日韩精品一区二区三区中文字幕| 午夜精品99久久免费| 成人亚洲综合天堂| 精品精品国产高清一毛片一天堂| 亚洲欧美精品一区二区三区| 国产精品久久久久久亚洲毛片| 性一交一黄一片| 国产精品久久久久久久久久妞妞 | 久久视频www| 欧美日韩一区二区欧美激情 | 欧美激情四色| 蜜桃视频在线观看91| 日韩黄色三级在线观看| 性欧美xxxx交| 日本免费在线观看| 亚洲精品videossex少妇| 亚洲专区在线播放| 午夜精品免费在线观看| 女教师淫辱の教室蜜臀av软件| 成人中文字幕在线| 999精品视频在线| 亚洲福利免费| 视频一区二区视频| 九九综合在线| 国产99在线免费| 男女啪啪999亚洲精品| 欧美在线不卡区| 欧美寡妇性猛交xxx免费| 中文字幕欧美日韩va免费视频| 丰满人妻一区二区三区四区53| 欧美四级电影在线观看| 国产成人亚洲欧洲在线| 亚洲精品国产精华液| 91精品国自产在线| 91小视频免费观看| 美女又黄又免费的视频| 久久精品理论片| 激情网站五月天| 99热免费精品| 欧美午夜小视频| 综合激情网站| 国产高清免费在线| 欧美午夜精彩| 欧美lavv| 外国成人在线视频| 国产日韩一区二区| 中文字幕一区二区三区中文字幕| 国产乱人伦真实精品视频| 国产综合色区在线观看| 欧美孕妇与黑人孕交| 白浆视频在线观看| 久久久噜噜噜久久久| 国产高清在线a视频大全| 美女福利视频一区| 黄色免费在线网站| 久久色在线播放| 欧美a在线看| 精品国偷自产在线视频| 日本美女高清在线观看免费| 中文精品99久久国产香蕉| melody高清在线观看| 亚洲男人av在线| 青青草在线免费视频| 国产丝袜精品第一页| 欧美成人免费| 亚洲精品一区在线观看香蕉| 欧美一区二区少妇| 亚洲一区二区精品| 超碰免费在线观看| 中文字幕免费精品一区| 色开心亚洲综合| www日韩欧美| 欧美野外wwwxxx| 91国产一区在线| 在线天堂资源www在线污| 日本午夜在线亚洲.国产| 日本在线中文字幕一区二区三区| 国产精品igao视频| 香蕉久久一区| 91pron在线| 成人三级毛片| 久久久综合香蕉尹人综合网| 免费成人高清在线视频theav| 欧美性色黄大片人与善| 久久人体视频| 国产片侵犯亲女视频播放| 一区在线视频| 日日碰狠狠丁香久燥| 久久精品国产一区二区三| 午夜激情影院在线观看| 国产成人小视频| 色天使在线视频| 中文字幕av一区二区三区免费看 | 极品白嫩的小少妇| 91网站在线播放| 91ts人妖另类精品系列| 一区二区视频在线| 国产精品自拍99| 欧美日本精品一区二区三区| 粉嫩av一区二区夜夜嗨| 亚洲色图综合网| 在线观看免费视频你懂的| 国产91av在线| 爱情电影网av一区二区| 精品亚洲欧美日韩| 国产精品久久久久久久免费观看| 日本一本中文字幕| 日韩精品电影一区亚洲| www.久久com| 国产亚洲精品福利| 久久久精品视频免费观看| 欧美性极品xxxx娇小| 91亚洲国产成人精品一区| 亚洲国内精品在线| 欧美日韩在线资源| 欧美在线日韩在线| 日韩亚洲精品在线观看| 日韩福利影院| 99精品视频免费全部在线| 看看黄色一级片| 国产亚洲一区二区三区四区| 欧美成人免费看| 欧美欧美欧美欧美首页| 丝袜视频国产在线播放| 欧美裸体xxxx极品少妇| a屁视频一区二区三区四区| 国产伦精品一区二区三区在线| 日韩免费特黄一二三区| 免费黄色福利视频| 国产成人精品亚洲日本在线桃色| 欧美波霸videosex极品| 欧美日韩一区二区精品| 午夜美女福利视频| 久久精品视频在线观看| 电影一区二区三区| 国产综合欧美在线看| 欧美精品观看| 99久久99精品| 欧美激情一区二区三区| 中文字幕亚洲乱码熟女1区2区| 精品国产乱码久久久久久久久| 黄色成人影院| 国产精品久久久久久中文字| 一道在线中文一区二区三区| 久久久久久久久久网| 国产成人免费视频网站| 久久免费看少妇高潮v片特黄| 欧美三级中文字幕| 国产片在线观看| 国产成人在线视频| 国产精品亚洲人成在99www| 91av资源网| 26uuu精品一区二区| 天堂在线免费观看视频| 日韩成人在线观看| 日本在线影院| 欧美二区在线| 久久亚洲二区| 精品人妻一区二区三区蜜桃视频| 欧美午夜激情视频| 青青草观看免费视频在线| 欧美亚洲成人网| 在线日韩一区| 日韩精品一区二区三区不卡| 2021国产精品久久精品| 波多野结衣理论片| 国产一区二区美女视频| yiren22亚洲综合| 国产高清精品软男同| 国产一区二区精品在线观看| www.av成人| 日韩精品一区二区三区老鸭窝| 欧美黑人猛交| 久久国产一区二区| 久久三级福利| 国产白丝一区二区三区| 欧美日韩aaa| 在线三级中文| 国产精品一 二 三| 亚洲制服少妇| 九九热免费在线| 91麻豆精品国产91久久久更新时间 | 女人十八岁毛片| 亚洲色图五月天| 日韩精品一级毛片在线播放| 亚洲一区 在线播放| 成人毛片老司机大片| 中文字幕在线天堂| 久久精品在线播放| 粉嫩久久久久久久极品| 男女av免费观看| 国产精品亲子乱子伦xxxx裸| 国产成人精品白浆久久69| 98精品国产自产在线观看| 国产一区2区| 五月天丁香花婷婷| 性做久久久久久免费观看| 韩国中文免费在线视频| 91免费观看网站| 在线一区免费观看| 自拍偷拍你懂的| 日韩精品一区二区三区四区视频| 自拍网站在线观看| 性做爰过程免费播放| 99久久99久久精品国产片果冻| 在线观看免费黄色小视频| 久久久久久久国产精品| re久久精品视频| a级片在线观看视频| 91黄色小视频| 激情av在线| 亚洲精品成人a8198a| 懂色av一区二区夜夜嗨| 成人黄色三级视频| 国产最新精品视频| 99久久久久| 亚洲国产无码精品| 日韩欧美一级二级三级久久久|