Easy rules在微服务的集成和使用

1.我用的是若依的微服务前后的分离版本,jdk是8,首先是pom引入

<dependency>
    <groupId>org.jeasy</groupId>
    <artifactId>easy-rules-core</artifactId>
    <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>org.jeasy</groupId>
    <artifactId>easy-rules-support</artifactId>
    <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>org.jeasy</groupId>
    <artifactId>easy-rules-mvel</artifactId>
    <version>4.0.0</version>
</dependency>

2.编写了四个相关的类,实现了三种方式的规则

新建类ThreeEightRuleLauncher

做了两个方法,其中方法二里面实现了两种规则的配置

package com.asgard.task.util;/**
 * 描述
 *
 * @author
 * @date 2022/03/11 16:05:33
 * @version 1.0
 */

import com.alibaba.fastjson.JSON;
import com.asgard.task.domain.Person;
import org.jeasy.rules.api.*;
import org.jeasy.rules.core.DefaultRulesEngine;
import org.jeasy.rules.mvel.MVELRule;
import org.jeasy.rules.mvel.MVELRuleFactory;
import org.jeasy.rules.support.reader.YamlRuleDefinitionReader;
import org.springframework.util.ResourceUtils;

import java.io.FileReader;

/**
 *
 * @param
 * @author bdBoCao
 * @date 2022/3/1116:05
 * @version 1.0
 */
public class ThreeEightRuleLauncher {

    //方法一
    public static void main(String[] args) {
        /**
         * 创建规则执行引擎
         * 注意: skipOnFirstAppliedRule意思是,只要匹配到第一条规则就跳过后面规则匹配
         */
        RulesEngineParameters parameters = new RulesEngineParameters().skipOnFirstAppliedRule(true);
        RulesEngine rulesEngine = new DefaultRulesEngine(parameters);
        //创建规则
        Rules rules = new Rules();
        rules.register(new EightRule());
        rules.register(new ThreeRule());
        Facts facts = new Facts();
        for (int i=1 ; i<=50 ; i++){
            //规则因素,对应的name,要和规则里面的@Fact 一致
            facts.put("number", i);
            //执行规则
            rulesEngine.fire(rules, facts);
            System.out.println();
        }
    }

    //方法二
//    public static void main(String[] args) throws Exception {
//        //创建一个Person实例(Fact)
//        Person tom = new Person("Tom", 19);
//        Facts facts = new Facts();
//        facts.put("person", tom);
//
//        //创建规则1
//        Rule ageRule = new MVELRule()
//            .name("age rule")
//            .description("Check if persons age is > 18 and marks the person as adult")
//            .priority(1)
//            .when("person.age > 18")
//            .then("person.setAdult(true);");
//        //创建规则2
        Rule alcoholRule = new MVELRuleFactory(new YamlRuleDefinitionReader()).
        createRule(new FileReader(ResourceUtils.getFile("classpath:alcohol-rule.yml")));
//
//        Rules rules = new Rules();
//        rules.register(ageRule);
        rules.register(alcoholRule);
//
//        //创建规则执行引擎,并执行规则
//        RulesEngine rulesEngine = new DefaultRulesEngine();
//        System.out.println("Tom: Hi! can I have some Vodka please?");
//        rulesEngine.fire(rules, facts);
//        System.out.println(JSON.toJSONString(tom));
//    }
}

新建类EightRule,这个类是上面规则里面用到的,符合条件会走这个类

package com.asgard.task.util;/**
 * 描述
 *
 * @author
 * @date 2022/03/11 15:12:18
 * @version 1.0
 */

import org.jeasy.rules.annotation.*;

/**
 *
 * @param
 * @author bdBoCao
 * @date 2022/3/1115:12
 * @version 1.0
 */
@Rule(name = "被8整除")
public class EightRule {
    /**
     * 条件
     */
    @Condition
    public boolean isEight(@Fact("number") int number) {
        return number % 8 == 0;
    }

    /**
     * 满足条件的动作
     */
    @Action
    public void eightAction(@Fact("number") int number) {
        System.out.println(number + " is eight");
    }

    /**
     * 条件判断的优先级
     */
    @Priority
    public int getPriority() {
        return 2;
    }
}

新建类ThreeRule,也是做测试用,在规则中符合条件的会走这个

package com.asgard.task.domain;/**
 * 描述
 *
 * @author
 * @date 2022/03/11 22:41:42
 * @version 1.0
 */

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 *
 * @param
 * @author bdBoCao
 * @date 2022/3/1122:41
 * @version 1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {

    private String name;

    private boolean adult;

    private int age;

    public Person(String name, int age) {
         this.name = name;
         this.age = age;
       }
}

这个实体是规则中用来判断参数的

一次做一下笔记,怕以后找不到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值