首页 论坛 spring消息的发送默认都是同步的,如果要异步发送消息,首先要在配置类上开启异步功能@EnableAsync
帖子详情

00:41:20.198 [http-nio-8080-exec-43] INFO c.r.s.s.i.SysPayconfigServiceImpl – [wechatPayNotify,443] – 微信v3通知:{“transaction_id”:”4200001747202302251365106590″,”amount”:{“total”:10.0,”payer_total”:10.0,”currency”:”CNY”,”payer_currency”:”CNY”},”mchid”:”1622981569″,”out_trade_no”:”1677256797404″,”trade_state”:”SUCCESS”,”bank_type”:”OTHERS”,”appid”:”wx8b3a080783d3a8d0″,”trade_state_desc”:”支付成功”,”trade_type”:”NATIVE”,”attach”:””,”success_time”:”2023-02-25T00:41:16+08:00″,”payer”:{“openid”:”oH0bZ6UVzOxjk0AO2mEZ8XplDO5c”}}
00:41:20.230 [http-nio-8080-exec-43] INFO c.r.k.s.i.WebOrderServiceImpl – [onApplicationEvent,146] – 收到支付完成信息:–CommonOrder{orderId=’1677256797404′, status=1, payOrderId=’4200001747202302251365106590′, amount=null, returnUri=’null’, appType=’null’}
00:41:20.232 [http-nio-8080-exec-43] DEBUG c.r.k.m.W.selectWebOrderByorderId – [debug,137] – ==> Preparing: select o.*,w.title,w.isCard,w.category_id,w.openContent,w.paidContent from t_web_order o left join t_web_merchant_works w on o.worksId=w.id where o.orderId = ?
00:41:20.234 [http-nio-8080-exec-43] DEBUG c.r.k.m.W.selectWebOrderByorderId – [debug,137] – ==> Parameters: 1677256797404(String)
00:41:20.277 [http-nio-8080-exec-43] DEBUG c.r.k.m.W.selectWebOrderByorderId – [debug,137] – <== Total: 1

 

 

package com.morris.spring.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;

@Configuration
@EnableAsync // 开启异步
public class EventListenerConfig { 
   
}

在监听的方法上加上@Async:

package com.morris.spring.listener;

import com.morris.spring.event.CustomEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;

@Slf4j
public class AsyncCustomEventListener { 
   
	@EventListener({ 
   ContextRefreshedEvent.class, CustomEvent.class})
	@Async // 异步
	public void listenEvent(ApplicationEvent event) { 
   
		log.info("receive event: {}", event);
	}
}

也可以自定义执行异步消息的线程池(默认就是SimpleAsyncTaskExecutor):

@Bean
public TaskExecutor executor() { 
   
	return new SimpleAsyncTaskExecutor("eventListen-");
}

异步消息只是借用spring的异步执行机制,在方法上加上@Async注解,方法都会异步执行。


01:23:49.841 [http-nio-8080-exec-75] INFO c.r.s.s.i.SysPayconfigServiceImpl – [wechatPayNotify,443] – 微信v3通知:{“transaction_id”:”4200001765202302259152891537″,”amount”:{“total”:10.0,”payer_total”:10.0,”currency”:”CNY”,”payer_currency”:”CNY”},”mchid”:”1622981569″,”out_trade_no”:”1677259400700″,”trade_state”:”SUCCESS”,”bank_type”:”OTHERS”,”appid”:”wx8b3a080783d3a8d0″,”trade_state_desc”:”支付成功”,”trade_type”:”NATIVE”,”attach”:””,”success_time”:”2023-02-25T01:23:46+08:00″,”payer”:{“openid”:”oH0bZ6UVzOxjk0AO2mEZ8XplDO5c”}}
01:23:49.878 [threadPoolTaskExecutor-1] INFO c.r.k.s.i.WebOrderServiceImpl – [onApplicationEvent,150] – 收到支付完成信息:–CommonOrder{orderId=’1677259400700′, status=1, payOrderId=’4200001765202302259152891537′, amount=null, returnUri=’null’, appType=’null’}
01:23:49.879 [threadPoolTaskExecutor-1] DEBUG c.r.k.m.W.selectWebOrderByorderId – [debug,137] – ==> Preparing: select o.*,w.title,w.isCard,w.category_id,w.openContent,w.paidContent from t_web_order o left join t_web_merchant_works w on o.worksId=w.id where o.orderId = ?
01:23:49.880 [threadPoolTaskExecutor-1] DEBUG c.r.k.m.W.selectWebOrderByorderId – [debug,137] – ==> Parameters: 1677259400700(String)

配置以后即可异步执行

版权:言论仅代表个人观点,不代表官方立场。转载请注明出处:https://www.freeman.work/forum/1574.html

发表评论
暂无评论