国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

SpringBoot:Event實現發布/訂閱模式

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

如圖所示支付業務中,用戶支付成功之后,后續還有很多的業務流程,但是對于用戶來講是透明的,所以為了提高接口的響應速率,提高用戶體驗,后續操作都會選擇異步執行

異步執行方式

異步執行主體

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

// 訂單完成異步任務開啟 可以再統一封裝
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);
});
}
}

異步執行接口

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);
// 返回異步調用的結果
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);
// 返回異步調用的結果
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);
// 返回異步調用的結果
return CompletableFuture.completedFuture(true);
}
}

自定義線程池,線程池隔離,開啟異步任務執行

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

Spring Event實現發布/訂閱模式

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

nt,并重寫構造函數,實現事件擴展。

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

定義事件的消息體

@Data
public class OrderData {
/**
* 訂單號
*/
private String orderNo;
}

事件監聽

@Slf4j
@Service
public class MerchantNoticeListener {
@Async("asyncEventTaskExecutor")
@EventListener
public CompletableFuture<Boolean> orderSuccess(OrderApplicationEvent event) {
log.info("{}商戶通知:{}",Thread.currentThread(),event);
// 返回異步調用的結果
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封裝的一個線程池
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);
}
}

事件發布

@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);
// 發布事件
applicationEventPublisher.publishEvent(orderApplicationEvent);
}
}

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

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

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-06-27 13:56:10

設計模式緩存分布式系統

2024-07-02 11:42:53

SpringRedis自定義

2024-07-29 08:34:18

C++訂閱者模式線程

2023-11-10 09:22:06

2025-01-09 11:15:47

2009-11-05 10:07:37

WCF設計模式

2025-02-25 09:29:34

2023-03-03 12:39:25

MQTT工廠模式

2024-03-28 08:07:42

RabbitMQ訂閱模式

2024-05-14 08:03:51

C#EventArgs?屬性

2021-08-02 17:21:08

設計模式訂閱

2024-01-10 08:16:08

Redis集成JMS

2023-12-04 08:24:23

2020-09-15 10:25:13

Redis命令Java

2025-03-11 09:30:00

2022-07-13 08:36:57

MQ架構設計模式

2022-08-15 09:02:22

Redis模式訂閱消息

2010-03-02 16:28:11

WCF發布訂閱

2022-09-19 16:08:31

Dapr發布訂閱

2023-12-14 10:10:09

pythonRedis開發
點贊
收藏

51CTO技術棧公眾號

欧美午夜精品免费| 日韩欧美黄色影院| 国产一区免费在线| 欧美a级在线观看| 国产午夜精品一区二区三区嫩草| 亚洲春色h网| 欧美精品日韩一本| 一本岛在线视频| 青青草91视频| 亚洲va国产va天堂va久久| 色综合一区二区日本韩国亚洲 | 欧美中文字幕精品| 99久re热视频精品98| 欧美一区二区性| 日韩中文字幕免费| 欧美家庭影院| 欧美午夜激情小视频| 欧洲黄色一级视频| 免费成人在线视频观看| 99re国产在线播放| 九九综合久久| 欧美成人手机在线| 国产精品自拍视频在线| 国产在线精品一区二区不卡了 | 亚洲精品中文字幕乱码三区不卡| 精品视频免费| 精品中文字幕在线观看| 欧亚一区二区| 日韩精品免费一线在线观看| 黄色片网站在线| 欧美亚洲一区二区在线| 国产字幕中文| 国产精品久久看| 动漫av免费观看| 97成人超碰视| 日韩中文字幕三区| 成人黄色国产精品网站大全在线免费观看| 久久青青草综合| 国产精品a级| 亚洲伊人久久大香线蕉av| 欧美丝袜一区| 国产欧美日韩中文字幕在线| 欧美性感美女一区二区| 欧美亚洲另类激情另类| 红杏视频成人| 97在线免费视频| 奇米影视777在线欧美电影观看| 欧美极品少妇xxxxⅹ喷水| 日韩视频一区二区三区四区| 欧美精品videosex性欧美| 都市激情亚洲欧美| 国自产精品手机在线观看视频| 牛牛影视久久网| 97精品国产97久久久久久春色| 牛牛精品成人免费视频| 91a在线视频| 精品国精品国产自在久国产应用| 国产美女精品免费电影| 欧美日韩一区二区三区四区在线观看 | 国产精品一 二 三| 国产精品综合| 一道本在线观看视频| 国内精品久久久久影院薰衣草| 免费成人深夜夜行网站视频| 国产福利一区二区三区视频 | 欧美日韩免费高清一区色橹橹 | 日韩免费三级| 激情丁香综合五月| av之家在线观看| 中文字幕色av一区二区三区| 天天夜夜亚洲| 91精品国产综合久久久久久漫画| 国产ktv在线视频| 久久91精品国产91久久跳| 色愁久久久久久| 国产精品伊人日日| 国产+成+人+亚洲欧洲自线| www.这里只有精品| 91豆麻精品91久久久久久| 变态调教一区二区三区| 色综合久久88| 欧美精品一线| 久久久久久av无码免费网站下载| 久久99国产精一区二区三区| 99re视频| 99久精品国产| 深夜福利视频一区| 亚洲欧美福利视频| 色综合综合网| 亚洲精品乱码久久久久久蜜桃91| 久久久久久久久久久久久久久99| 天堂91在线| 一区二区欧美在线| 天堂网在线观看国产精品| 中文精品一区二区三区| 欧美精品网站| 国产免费一区二区视频| 亚洲乱码国产乱码精品精98午夜 | 国产夜色精品一区二区av| 中文字幕在线资源| 亚洲精品www久久久| 国产精品nxnn| 日韩一区二区三区资源| 中文字幕亚洲电影| 丝袜在线观看| 国产精品成熟老女人| 日韩精品中文字幕一区二区| 97久久人人超碰caoprom欧美| 大陆成人av片| 色播亚洲婷婷| 一本色道久久精品| 中文字幕欧美人妻精品一区| 欧美日韩一区高清| 国产图片一区| 天堂8在线天堂资源bt| 欧美在线免费观看视频| 国产精品sss在线观看av| 一区二区三区电影| 在线观看视频一区| 国产图片一区| 亚洲精品久久久久久久蜜桃臀| 欧洲中文字幕精品| 欧美男gay| 免费激情视频在线观看| 亚洲国产又黄又爽女人高潮的| 成人亚洲一区二区| 国产综合免费视频| 亚洲免费成人av电影| 激情婷婷亚洲| 在线免费毛片| 国产成人精品在线视频| 国产午夜精品在线观看| www.国产精品| 综合国产精品久久久| 91成人网在线| 天堂网在线观看国产精品| 成人xxx免费视频播放| 久久色精品视频| 国产精品毛片av| 草草草视频在线观看| 日韩欧美123| 综合日韩在线| 色视频www在线播放| 97在线免费观看| 91小视频在线| 免费视频观看成人| 九九久久九九久久| 亚洲国产欧美一区| 日韩中文字幕亚洲一区二区va在线| 国产高清在线观看| av一区二区三区免费| 欧美性猛xxx| 女人香蕉久久**毛片精品| 亚洲女人视频| av激情久久| 亚洲成a人v欧美综合天堂| 欧美成人三区| 99精品欧美一区二区三区| 天天综合色天天| 色综合色综合| 九九热视频在线观看| av成人免费观看| 欧美女孩性生活视频| 在线综合亚洲| 50度灰在线| 色偷偷888欧美精品久久久| 国产在线国偷精品免费看| 韩国精品一区| a级黄色片免费| 中文在线不卡视频| 成人aaaa免费全部观看| 亚洲午夜剧场| 99re在线国产| 精品视频免费看| 亚洲综合激情| 婷婷电影在线观看| 国产精品国内视频| 偷窥少妇高潮呻吟av久久免费| 欧美二区视频| 欧美男男video| 久久精品国产sm调教网站演员| 久久成人在线视频| 尤物视频一区二区| 在线不卡亚洲| 涩涩视频在线| 国产又黄又猛又粗又爽的视频| 国产成人精品视频在线| 欧美亚洲日本国产| 久久国产精品第一页| 亚洲精品一区av| 免费av一级电影| 古典武侠综合av第一页| 精品91自产拍在线观看一区| 成人av免费观看| 精品久久久久久久久久久aⅴ| 国产人成在线视频| 青青草综合在线| 45www国产精品网站| 欧美日韩国产首页| 99久久精品99国产精品|