3 Star 4 Fork 5

快鸟 / universal-chain

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

universal-chain

简介

universal-chain是一个万用链,它能将将公共逻辑与业务逻辑解耦。而且公共逻辑可以方便的进行扩展,而不影响业务逻辑。
使用的是责任链的思想。通过代理的方式,提供了简单易用的API。
现在universal-chain提供了以下功能:

    1. 幂等链(IdempotentFilter.java)
    1. Redis分布式可重入锁链(LockFilter.java)

Quick Start

示例参考:InvokerBuilderTest.java
(幂等功能依赖表:idempotent

public class BizService implements Invoker {
	private IIdempotentDao idempotentDao;
	public String doBiz(String param) {
		InvokerContext context = InvokerContext.create().apendArg(param);
		context.putExtendContext(LockContext.create().appendLock(LockHolder.create("wzy", null)));
		String rlt = (String) InvokerBuilder
				.buildInvoker(this, context, FilterFactory.createLockFilter())
				.delegateInvokeInvoker();
		System.out.println("==>执行结果:" + rlt);
		return rlt;
	}
	@Override
	public Object invoke(InvokerContext lockContext) {
		String param = (String) lockContext.getArgs().get(0);
		System.out.println("---> 执行业务:param=" + param);
		return "OK";
	}
}

分步幂等最佳实践:

示例:BizMulitiStepsServiceTest

public void doBizNew2(final String param) {
	IdempotentStep step1 = new IdempotentStep(IdempotentHolder.create("幂等key-new", "业务1", "step1")) {
		@Override
		public Object invoke(InvokerContext invokerContext) {
			String step1rlt = step1(param);
			return step1rlt;
		}
	};
	IdempotentStep step2 = new IdempotentStep(IdempotentHolder.create("幂等key-new", "业务1", "step2")) {
		@Override
		public Object invoke(InvokerContext invokerContext) {
			return step2(param, invokerContext);
		}
	};
	IdempotentStep step3 = new IdempotentStep(IdempotentHolder.create("幂等key-new", "业务1", "step3")) {
		@Override
		public Object invoke(InvokerContext invokerContext) {
			return step3(param);
		}
	};
	// 1. 不用锁的写法
	StepsContainer.create(idempotentDao).addStep(step1).addStep(step2).addStep(step3).executeAll(InvokerContext.create());
	// 2. 用锁的写法
	// InvokerContext context = InvokerContext.create();
	// context.putExtendContext(LockContext.create().appendLock(LockHolder.create("wzy")));
	// StepsWithinLockContainer.create(idempotentDao).addStep(step1).addStep(step2).addStep(step3).executeAll(context);
}

幂等链(IdempotentFilter.java)

注意:使用幂等链时,需要外部注入 IIdempotentDao。
在使用时,需要在使用者的容器中加载 MyBatis的 IIdempotentDao.javaIdempotentMapper.xml

Redis分布式可重入锁链(LockFilter.java)

使用的是 Redis 做分布式锁。可重入性是使用记数器实现的。

空文件

简介

万用链:使用责任链,将公共逻辑与业务逻辑解耦 现在提供了以下功能: 1. 幂等链 2. Redis分布式锁链 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/kkk001/universal-chain.git
git@gitee.com:kkk001/universal-chain.git
kkk001
universal-chain
universal-chain
master

搜索帮助