Browse Source

add 规则引擎集群

18339543638 4 years ago
parent
commit
eb27821025

+ 2 - 0
jetlinks-components/rule-engine-component/src/main/java/org/jetlinks/community/rule/engine/configuration/RuleEngineConfiguration.java

@@ -21,6 +21,7 @@ import org.jetlinks.rule.engine.model.RuleModelParserStrategy;
 import org.jetlinks.rule.engine.model.antv.AntVG6RuleModelParserStrategy;
 import org.jetlinks.rule.engine.model.antv.AntVG6RuleModelParserStrategy;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
 
 
@@ -95,6 +96,7 @@ public class RuleEngineConfiguration {
 
 
 
 
     @Bean
     @Bean
+    @ConditionalOnMissingBean(RuleEngine.class)
     public RuleEngine defaultRuleEngine(Scheduler scheduler) {
     public RuleEngine defaultRuleEngine(Scheduler scheduler) {
 //        ClusterRuleEngine clusterRuleEngine = new ClusterRuleEngine();
 //        ClusterRuleEngine clusterRuleEngine = new ClusterRuleEngine();
         return new DefaultRuleEngine(scheduler);
         return new DefaultRuleEngine(scheduler);

+ 10 - 2
jetlinks-standalone/src/main/java/org/jetlinks/community/standalone/configuration/ClusterConfiguration.java

@@ -2,11 +2,15 @@ package org.jetlinks.community.standalone.configuration;
 
 
 import org.jetlinks.community.standalone.configuration.cluster.ClusterDeviceMessageBrokeMessageBroker;
 import org.jetlinks.community.standalone.configuration.cluster.ClusterDeviceMessageBrokeMessageBroker;
 import org.jetlinks.community.standalone.configuration.cluster.ClusterDeviceMessageConnector;
 import org.jetlinks.community.standalone.configuration.cluster.ClusterDeviceMessageConnector;
+import org.jetlinks.community.standalone.configuration.cluster.ruleEngine.ClusterRuleEngine;
 import org.jetlinks.core.cluster.ClusterManager;
 import org.jetlinks.core.cluster.ClusterManager;
 import org.jetlinks.core.device.DeviceRegistry;
 import org.jetlinks.core.device.DeviceRegistry;
 import org.jetlinks.core.event.EventBus;
 import org.jetlinks.core.event.EventBus;
 import org.jetlinks.core.server.MessageHandler;
 import org.jetlinks.core.server.MessageHandler;
 import org.jetlinks.core.server.session.DeviceSessionManager;
 import org.jetlinks.core.server.session.DeviceSessionManager;
+import org.jetlinks.rule.engine.api.RuleEngine;
+import org.jetlinks.rule.engine.api.scheduler.Scheduler;
+import org.jetlinks.rule.engine.defaults.DefaultRuleEngine;
 import org.jetlinks.supports.config.ClusterConfigStorageManager;
 import org.jetlinks.supports.config.ClusterConfigStorageManager;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
@@ -24,13 +28,11 @@ import org.springframework.context.annotation.Configuration;
 public class ClusterConfiguration {
 public class ClusterConfiguration {
 
 
     @Bean
     @Bean
-    @ConditionalOnProperty(name = "jetlinks.cluster",havingValue = "true")
     public ClusterDeviceMessageBrokeMessageBroker clusterDeviceMessageBrokeMessageBroker(JetLinksProperties properties, ClusterManager clusterManager) {
     public ClusterDeviceMessageBrokeMessageBroker clusterDeviceMessageBrokeMessageBroker(JetLinksProperties properties, ClusterManager clusterManager) {
         return new ClusterDeviceMessageBrokeMessageBroker(properties.getServerId(),clusterManager);
         return new ClusterDeviceMessageBrokeMessageBroker(properties.getServerId(),clusterManager);
     }
     }
 
 
     @Bean
     @Bean
-    @ConditionalOnProperty(name = "jetlinks.cluster",havingValue = "true")
     public ClusterConfigStorageManager clusterEventBusStorageManager(ClusterManager clusterManager, EventBus eventBus) {
     public ClusterConfigStorageManager clusterEventBusStorageManager(ClusterManager clusterManager, EventBus eventBus) {
         return new ClusterConfigStorageManager(clusterManager);
         return new ClusterConfigStorageManager(clusterManager);
     }
     }
@@ -47,4 +49,10 @@ public class ClusterConfiguration {
         return new ClusterDeviceMessageConnector(eventBus, registry, messageHandler, sessionManager,jetLinksProperties.getServerId(),clusterManager);
         return new ClusterDeviceMessageConnector(eventBus, registry, messageHandler, sessionManager,jetLinksProperties.getServerId(),clusterManager);
     }
     }
 
 
+
+    @Bean
+    public RuleEngine defaultRuleEngine(Scheduler scheduler,ClusterManager clusterManager,JetLinksProperties jetLinksProperties) {
+        return new ClusterRuleEngine(scheduler,clusterManager,jetLinksProperties.getServerId());
+    }
+
 }
 }

+ 7 - 0
jetlinks-standalone/src/main/java/org/jetlinks/community/standalone/configuration/cluster/ruleEngine/ClusterRuleEngine.java

@@ -1,5 +1,6 @@
 package org.jetlinks.community.standalone.configuration.cluster.ruleEngine;
 package org.jetlinks.community.standalone.configuration.cluster.ruleEngine;
 
 
+import lombok.AllArgsConstructor;
 import org.jetlinks.community.rule.engine.enums.RuleInstanceState;
 import org.jetlinks.community.rule.engine.enums.RuleInstanceState;
 import org.jetlinks.community.standalone.configuration.cluster.message.ClusterMessage;
 import org.jetlinks.community.standalone.configuration.cluster.message.ClusterMessage;
 import org.jetlinks.core.cluster.ClusterManager;
 import org.jetlinks.core.cluster.ClusterManager;
@@ -19,6 +20,7 @@ import reactor.core.scheduler.Schedulers;
  * @createTime 2021年11月10日 16:10:00
  * @createTime 2021年11月10日 16:10:00
  */
  */
 
 
+
 public class ClusterRuleEngine extends DefaultRuleEngine {
 public class ClusterRuleEngine extends DefaultRuleEngine {
     private ClusterManager clusterManager;
     private ClusterManager clusterManager;
     private volatile  boolean started=false;
     private volatile  boolean started=false;
@@ -27,6 +29,11 @@ public class ClusterRuleEngine extends DefaultRuleEngine {
         super(scheduler);
         super(scheduler);
     }
     }
 
 
+    public ClusterRuleEngine(Scheduler scheduler, ClusterManager clusterManager, String serverId) {
+        super(scheduler);
+        this.clusterManager = clusterManager;
+        this.serverId = serverId;
+    }
 
 
     public synchronized void init(){
     public synchronized void init(){
         if(started){
         if(started){