EasyTransaction icon indicating copy to clipboard operation
EasyTransaction copied to clipboard

Filter是如何被调用的

Open MiracleJy opened this issue 6 years ago • 3 comments

关于幂等性的控制,DefaultIdempotentHandlerFilter这个类中的invoke函数主要实现了幂等表的插入更新操作,也在配置类中找到了DefaultIdempotentHandlerFilter这个bean,请问这个bean在哪里调用的,幂等性的控制是如何触发的?

MiracleJy avatar Dec 18 '18 02:12 MiracleJy

通过EasyTransCoreConfiguration中创建

	@Bean
	public DefaultEasyTransFilterFactory defaultEasyTransFilterFactory(List<EasyTransFilter> defaultFilters) {
		return new DefaultEasyTransFilterFactory(defaultFilters);
	}

这个bean,这个bean创建方法的入参将会收集所有的Filter,其中就包括幂等的filter。

DefaultEasyTransFilterFactory将会在每次调用时创建一个ET的FilterChain实例,该实例会在调用实际业务方法前执行,其中就包括了幂等的控制Filter。

更具体的,可以打断点调试。

skyesx avatar Dec 18 '18 03:12 skyesx

CREATE TABLE idempotent ( src_app_id smallint(5) unsigned NOT NULL COMMENT '来源AppID', src_bus_code smallint(5) unsigned NOT NULL COMMENT '来源业务类型', src_trx_id bigint(20) unsigned NOT NULL COMMENT '来源交易ID', app_id smallint(5) NOT NULL COMMENT '调用APPID', bus_code smallint(5) NOT NULL COMMENT '调用的业务代码', call_seq smallint(5) NOT NULL COMMENT '同一事务同一方法内调用的次数', handler smallint(5) NOT NULL COMMENT '处理者appid', called_methods varchar(64) NOT NULL COMMENT '被调用过的方法名', md5 binary(16) NOT NULL COMMENT '参数摘要', sync_method_result blob COMMENT '同步方法的返回结果', create_time datetime NOT NULL COMMENT '执行时间', update_time datetime NOT NULL, lock_version smallint(32) NOT NULL COMMENT '乐观锁版本号', PRIMARY KEY (src_app_id,src_bus_code,src_trx_id,app_id,bus_code,call_seq,handler) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

请问幂等表的设计中src_app_id、src_bus_code、src_trx_id是代表调用者信息,app_id、bus_code代表被调用者信息吗?call_seq代表什么?

MiracleJy avatar Dec 18 '18 07:12 MiracleJy

新问题请新建issue

skyesx avatar Dec 18 '18 07:12 skyesx