代码拉取完成,页面将自动刷新
universal-chain是一个万用链,它能将将公共逻辑与业务逻辑解耦。而且公共逻辑可以方便的进行扩展,而不影响业务逻辑。
使用的是责任链的思想。通过代理的方式,提供了简单易用的API。
现在universal-chain提供了以下功能:
示例参考: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";
}
}
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);
}
注意:使用幂等链时,需要外部注入 IIdempotentDao。
在使用时,需要在使用者的容器中加载 MyBatis的 IIdempotentDao.java 和 IdempotentMapper.xml
使用的是 Redis 做分布式锁。可重入性是使用记数器实现的。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。