Wula: A Strategy Route Framework¶
2022-07-11 11:18:27
https://github.com/twentwo/wula
Usage¶
spring-boot application support
Maven¶
maven dependency import
<dependency>
<groupId>io.yec</groupId>
<artifactId>wula-spring-boot-starter</artifactId>
<version>${wula.version}</version>
</dependency>
Strategy Bean¶
create different strategy bean with a logical component name
@Slf4j
@Component("newOrderRouter")
public class NewOrderRouter implements IOrderRouter {
@Override
public void wula(OrderEntity orderEntity) {
log.info("NewOrderRouter = {}", orderEntity);
}
}
// ...
bizRulesConfig¶
define strategy route rules, support both: - bizRulesConfig.json - bizRulesConfig.yml
[
{
"group": "io.yec.wula.example.extpoint.IOrderRouter",
"def": [
{
"beanName": "newOrderRouter",
"extEl": "['businessType'] == 'NEW' && ['discounted'] == false && ['sellerId'] == '618'",
"desc": "新品"
},
{
"beanName": "normalOrderRouter",
"extEl": "['businessType'] == 'NORMAL' && ['discounted'] == true ",
"desc": "普品"
},
{
"beanName": "defaultOrderRouter",
"extEl": "['businessType'] == null",
"desc": "默认"
}
]
}
]
or
---
- group: io.yec.wula.example.extpoint.IOrderRouter
def:
- beanName: newOrderRouter
extEl: "['businessType'] == 'NEW' && ['discounted'] == false && ['sellerId'] == '618'"
desc: 新品
- beanName: normalOrderRouter
extEl: "['businessType'] == 'NORMAL' && ['discounted'] == true"
desc: 普品
- beanName: defaultOrderRouter
extEl: "['businessType'] == null"
desc: 默认
- group: io.yec.wula.example.extpoint.IPersonRouter
def:
- beanName: yellowRouter
extEl: "['raceEnum'] == 'YELLOW'"
desc: 黄种人
ExtensionExecutor¶
strategy route executor usage
@SpringBootApplication
public class WulaApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(WulaApplication.class, args);
ExtensionExecutor extensionExecutor = applicationContext.getBean(ExtensionExecutor.class);
OrderEntity newOrderEntity = OrderEntity.createNewOrderEntity();
extensionExecutor.executeVoid(IOrderRouter.class,
// match rule param
IdentityParam.builder()
.businessType(newOrderEntity.getBusinessType())
.discounted(false)
.sellerId("618")
.build(),
orderRouter -> orderRouter.wula(newOrderEntity));
}
}