1.复杂事件处理

到目前为止,我们已经看到如何使用规则,以基于数据(我们称呼它为fact)来做出决定。这个信息几乎是任何一组Java对象,它们描述了我们正在做决策的域的状态,但是它总是在一个特定的时间点上代表这个世界的状态。本章我们将会去看一些列的概念,配置和规则语法组件,他们可以允许你基于事实数据之间的时间关系做出决定。这个概念也被称为complex event processing(CEP)
Drools以Drools Fusion或Drools CEP的名义提供支持, 一个概念模块完全集成到Drools的核心特性中。这只是概念上的分离,因为所有CEP特性都由提供规则引擎功能的相同模块完全支持。为了完全理解这一点,本章将涵盖以下主题:
>讨论与复杂事件处理相关的不同概念,包括滑动窗口、入口点和时间操作
>将复杂的事件处理装配为一种称为事件驱动架构的特殊架构
>编写规则并配置运行时以充分利用Drools CEP特性

1.1 什么是复杂事件处理

CEP的主要关注点是在不断变化的、不断增长的数据云中,将基于时间的数据关联起来,以便发现难以发现的特殊情况,并为这些情况做些事情。为了充分理解它的工作原理,我们首先需要定义一些其他的概念。让我们从定义事件开始。

1.1.1 什么是事件和复杂事件??

为了了解事件,让我们先谈一个熟悉的概念。到目前为止,我们已经讨论了插入到一个Kie session中的事实数据以及它们如何匹配一个特定的规则。事实数据与事件非常相似,除了事件有一个额外的特征:发生的时间。事件仅仅是关于任何域(表示为Java对象)的数据,以及关于该信息是真实的时间的信息。
在特定的时间里,我们记录的任何事情都可以是一个事件,如下:
>我们的eShop限时折扣
>电话呼叫有一个开始时间和一个结束事件
>任何一种传感器读数都会告诉你它的特定读数(温度、湿度和运动)与特定时刻的关系
事件本身是事件处理的基本结构。我们从外界获得的每一个输入都可以被看作是一个事件。然而,我们将主要关注于检测复杂事件。
一个复杂事件就是一个简单的聚合,组合,或者其他事件的抽象。复杂事件处理的真正威力来自于能够将简单的传入事件关联起来,这样我们就可以检测复杂的情况,而这些情况是无法由任何设备或个人直接检测到的,如下所示:
>我们在某一特定时刻所拥有的所有事务都可以被关联起来,以检测任何可能的欺诈行为(并采取先发制人的措施)。
>在呼叫中心,根据特定区域分组的所有传入调用,可以确定这些区域的服务中断情况,从而自动通知用户。
即使是传感器读数,在很大程度上,也可以通过简单的事件组合来检测复杂的情况。让我们考虑一组传感器读数,作为我们的输入事件。一组地震事件可以告诉我们这座城市发生了什么地震以及它的强度。一组火警警报可以告诉我们在城市里哪里有火灾。
在发生大地震的情况下,结合城市基础设施的信息,我们可以推断出可能发生的结构性崩溃,并派专家来评估当前的形势。如果我们有火警警报,我们就可以派消防队去灭火。
如果我们发现一组小地震,一个接一个,在一秒内,在同一个方向上,我们可以推断出一个很大的大地震正朝着这个方向移动.如果我们也探测到火灾,一个接一个地在同一个方向上,我们可能会把所有的地震和火灾警报事件集合成一个复杂的事件,也许哥斯拉正在朝这个方向移动,如下图所示:

这里写图片描述

如果是这样的话,我们可能就不希望把架构师和消防队送到那个大方向(他们很可能会被吃掉)。相反,我们可能采取不同的行动,比如派遣军队。正如您所看到的,非常小的简单事件可以使我们能够从这些事件中推断出更多的信息。这是复杂事件处理的主要功能。

 

1.2 阐述基于CEP的规则

在此之前,我们已经讨论了规则应该如何尝试变为原子性,并一起工作以实现复杂场景的管理。这与CEP很好地结合在一起,因为每个不同的规则都可以处理聚合、组合或其他事件的抽象的一个方面。他们可以一起工作来实现非常复杂的事件的实时解决方案。我们仍然需要一些Drools的附加功能来做到这一点,如下:
>如何指导Drools一个对象被视为一个事件
>如何及时的比较两个事件的
在下一小节中,我们将看到如何使用DRL语法实现此目的。

1.2.1 事件的语义

在我们详细讨论如何定义一个事件之前,我们㤇理解事件的一些特点。第一个特征是两种主要类型的事件——准时和间隔事件之间的区别——如下所示:
>Punctual events(准时事件):它们是在某个特定实例中发生的事件。它们可能代表了我们的领域模型出现了变化的确切时刻,或者它们的生命周期太短而不能被考虑。准时事件的一个例子是传感器读数,它会将传感器的特定值与读数的特定时间相关联。如果时间太短,事务也可以被认为是准时的事件,我们可以忽略它们的持续时间。
>间隔事件:它们是有两个独特时刻的事件:一是开始的时刻,二是结束的时刻。这使得间隔事件比准时事件要复杂一些;如果你有两个准时的事件,你只能比较它们是在同一时间,还是在之前,还是在彼此之后发生的。另一方面,对于间隔事件,您可以比较一个事件在另一个事件中开始和结束的情况,只是为了命名一个场景。
另外,无论什么是准时或间隔事件,它们都有一组概念特征,在我们查看代码之前,它们都是值得提及的。
>他们通常是不可变的:事件应该是我们的领域模型在某个特定时刻的状态的记录。你不能改变过去,因此,你不应该改变你的事件信息。引擎没有强制这个功能,但是在设计我们的活动时,它是要记住的。它们可能通过向它们添加额外的信息来修饰,但是您不需要修改它们在Kie session中插入的内部数据。
>他们有被管理的生命周期:由于引擎将所有事件都理解为具有时间关系的对象,因此Kie session可以根据其定义的规则确定事件何时不再触发规则,并可以从会话中自动删除它。

1.2.2 阐述Drools的time-based-events

为了创建CEP规则,我们需要做的第一件事是指定需要将对象作为事件处理的对象的类型.也就是说,对象应该有时间元数据。这将允许Kie session对这些类型应用时间推理。有几种方法可以用来定义特定的类型应该作为事件处理看待,但是它们都定义了相同的元数据集。要定义的属性如下所示:
>类型的角色:这是唯一的强制元数据,用于定义一个事件的类型。它将有两个特定类型:事实和事件
>时间戳:这是定义类型属性的可选属性,它将定义事件发生的时刻。如果不存在,则每个事件实例的时间戳将是插入到Kie session中的时间。
>持续时间Duration:这是一个可选属性,用于定义指定事件持续时间的类型的属性。如果不赋值,该活动将被视为一个准时的活动。这个属性对于间隔事件是必需的。
>到期Expires:这是一个可选的字符串,以确定在自动删除之前,这个类型的事件应该在多长时间内出现。
现在我们了解了这些属性,让我们看看将它们应用到我们的类型的不同方法。该元数据可以直接定义为Java bean中的类级注解,如下:
@org.kie.api.definition.type.Role(Role.Type.EVENT)
@org.kie.api.definition.type.Duration("durationAttr")
@org.kie.api.definition.type.Timestamp("executionTime")
@org.kie.api.definition.type.Expires("2h30m")
public class TransactionEvent implements Serializable {private Date executionTime;private Long durationAttr;/* class content skipped */
}
正如您在前面的代码部分中看到的,我们可以为事件类型的角色、持续时间、时间戳和过期属性定义注释。Duration持续事件属性应该确定一个Long类型的属性,时间戳则是确定一个Date类型的属性。通过这种方式,Kie session将能将插入的上述所指定的对象,看做是一个事件。
定义这些属性的另一种方法是声明类型。类似的注释可用于将声明类型定义为事件,如下:
declare PhoneCallEvent@role(event)@timsstamp(whenDidWeReceiveTheCall)@expires(2h30m)whenDidWeReceiveTheCall:LOngcallInfo:String
end
上述的代码段展示了我们如果创建我们的声明类型,并且对他进行注解,使其成为一个事件。
声明事件的另一种方法是获取一个已存在的类,并将其声明为DRL中的一个事件。当在不同的系统之间我们需要创建事件去共享,但是我们不能直接修改这些类,使其具有这些事件注解。这时候我们可以像下面代码这样,声明一个已经存在的java类为一个事件:
import path.to.my.shared.ExternalEvent;
...
declare ExternalEvent
@role(event)
end
就像上面代码展示的,我们可以在DRL文件内,重新声明没有被注解的java类,使其成为一个事件。正如上文所言,所有的这些注解都是可选的。将一个类声明为一个事件所必须的注解就是@role(event)注解,你可以参考chapter-06/chapter-06-events项目的代码样例。
现在我们已经了解了如何声明事件类型,我们需要开始查看如何比较它们。为了实现这一操作,我们将回顾现有的时间运算符。

1.2.3 运算符

一旦我们定义了我们自己的事件类型,我们需要一种能够方式来基于这些事件的时间戳进行比较。为了这样,我们可以在Drools里使用13运算符。有的运算符只对比较区间事件有意义,但是给予两个事件,他们可以将它们与以下代码片段进行比较:
declare MyEvent@role(event)@timestamp(executionTime)
End
rule "my first time operators example"
when$e1: MyEvent()$e2: MyEvent(this after[5m] $e1)
ThenSystem.out.println("We have two events" +" 5 minutes apart");
end
在上面的样例中,我们使用了after操作符,来决定一个事件是否至少比以往的某一个事件新5分钟以上。正如你所见,比较是在特定的事件实例上进行的。在内部,时间比较会发生在被称为executionTime的时间戳属性上,但是在处理事件时我们可以忽略这个事实。如果我们需要修改事件类型的时间戳特性,这就提供了一个优势,因为我们不需要改变使用它的CEP规则。
此外,我们还可以注意到在运算符中使用参数,在方括号内传递。每个时间操作符将准备接收0到4个参数,以更具体的方式使用操作符。在前面的场景中,我们传递了一个5m参数,以指定一个事件应该在另一个事件发生后至少5分钟。
有很多我们可以工作的时间运算符。以下是他们的一份清单和他们的意思:

这里写图片描述

前面的图显示了不同的时间操作符,以及它们如何在不同的事件之间进行比较。他们都有某些特质,如下所示:
>他们都是操作两个事件。这些操作符都准备着与另一个事件进行比较。
>它们还可以用来比较Date对象,根据定义,它是事件的最简化的表示形式(只有时间信息,而不需要额外的数据)。
>它们可以接收参数来指定它们的内部工作。这些参数的操作在https://docs.jboss.org/drools/release/latest/drools-docs/html/的Temporal Operators主题得到了充分的解释。
关于事件值得一提的一点是,它们仍然是事实数据。引擎将把时间特性添加到事件类型,但是我们仍然可以比较它们的内部属性和方法来创建规则的条件和约束,就像我们在前几章中所做的那样。为了熟悉CEP规则,让我们分析一下我们在chapter-06/chapter-06-rules代码包中可以找到的一个规则,它的目的是检测欺诈行为,如下:
rule "More than 10 transactions in an hour from one client"when$t1: TransactionEvent($cId: customerId)Number(intValue >= 10) from accumulate($t2: TransactionEvent(this != $t1,customerId == $cId, this meets[1h] $t1),count($t2) )not (SuspiciousCustomerEvent(customerId == $cId,reason == "Many transactions"))theninsert(new SuspiciousCustomerEvent($cId,"Many transactions"));
end
这个例子DRL文件可以子在 chapter-06-rules/src/main/resources/chapter06/cep/cep-rules.drl里找到。为了运行这个例子,我们从前面定义的TransactionEvent事件类型开始。在我们的规则中,我们将检查两件主要的事情:一个小时内是否有10个来自同一客户的事务,并且我们仍然没有一个复杂的事件来反映这种情况。
第一个条件写在一个accumulate累积中。我们计算包含相同客户ID的TransactionEvent对象的数量,并且使用 this meets [1h] $t1来检查是否发生在原始参考交易的一个小时内。
这条规则的结果并不是针对外部的特别行动。相反,我们只是发现了一个复杂的事件,叫做SuspiciousCustomerEvent(是我们样例中所声明的一个类型)。这将表示交易事件的聚合。
第二段条件是一个简单的not字句,我们只是通过SuspiciousCustomerEvent对象来检查我们还没有为特定的客户启动这条规则,如果还没有添加的话,我们需要在结果中添加。
这个规则只会检测到这种情况,因为这是我们可以将其分解为最小的责任。我们可以对可疑的客户做很多事情,但是这条规则只负责理解一个特定的情况,即客户行为可疑。我们需要记住始终保持我们的规则尽可能的原子化。其他规则可能通过其他方法检测客户的可疑活动。
一旦检测到可疑的客户,另一条规则可以在检测到一些可疑的客户事件时决定要做什么。对于这种情况,我们将创建一个不同的规则:
rule "More than 3 suspicious cases in the day and we warn the owner"whenSuspiciousCustomerEvent($cId: customerId)not (AlarmTriggered(customerId == $cId))Number(intValue >= 2) from accumulate($s: SuspiciousCustomerEvent(customerId == $cId),count($s))then//warn the ownerSystem.out.println("WARNING: Suspicious fraud case. Client " + $cId);insert(new AlarmTriggered($cId));
end
如前所述,我们可以有多个规则来检测可疑的客户活动。当两个或多个规则被相同的客户触发时,该规则将触发.一旦发生这种情况,我们就向所有者发出警告。在这个例子里,它被表示为一个简单的系统输出,但它也可以很容易地成为一个助手方法或全局变量方法,用来发送电子邮件或SMS。
正如我们从前面的示例中可以看到的,我们可以将复杂的事件处理案例分解成多个规则,每个规则都通过它所消耗或产生的事件连接到CEP场景的其余部分。这些事件的聚合为我们的系统提供了一种特殊的体系结构,事件及其与隔离的应用程序组件之间的关系使我们能够创建非常分离的、高度可扩展的组件。这个体系结构称为事件驱动体系结构,我们将在下一小节中描述它。

1.3 事件驱动架构

事件驱动的体系结构是一种非常容易与CEP结合的概念,因为它定义了一个简单的体系结构来促进生产、检测、消费和对事件的反应。此体系结构的概念是将应用程序组件作为四个可能的元素之一,相关的内容如下图所示:

 

这里写图片描述

事件驱动架构(EDA)的概念是将以下四个不同类别的组件分类:

 

组件分类描述
Event Producer他们在EDA中的作用完全是为了创造事件,所有能产生事件的东西都被认为是生产者,无论它是基于硬件的传感器、应用程序收集请求、业务流程,或者任何其他形式的应用程序,可以将一个新事件引入到我们的体系结构中。
Event Consumer他们在EDA中的角色是倾听其他组件产生的事件。它们还可以从各种各样的组件,从应用程序的简单监听器到复杂的仪表板。它们通常表示该体系结构的最终输出,并将生成的值指向外部世界。
Event Channels它们是所有其他组件之间的通信协议。事件通道封装了用于将事件从一个组件传输到另一个组件,从一个传输传感器读数的武力电线传输到逻辑组件的任何组件,例如一个Java消息服务队列。
Event Processing Agents这些是组织事件来检测和处理复杂事件的核心组件。在Drools里,处理CEP的每一条规则都被认为是事件处理代理。对更复杂的情况进行检测和反应的分组称为事件处理网络。

在设计一个围绕复杂事件处理的系统时,这个体系结构是一个非常有用的概念。它可以很容易地集成到任何其他类型的体系结构中,因为它只关心事件如何与组件互连,从而为各种其他特性留出空间。
大多数开始使用CEP的应用程序需要考虑,在设计阶段,有一个概念类似于EDA提出的一个概念,即多个事件生产者连接到一个事件处理代理(即我们的规则)的网络,并将数据生成给多个事件使用者。Drools通过称为入口点的组件提供了源多元化的概念,我们将在下一小节中讨论它。

1.3.1 将事件源与入口点分开

在Drools中提供入口点作为分区工作内存的一种方法。每一个Kie session可以有多个入口点,它可以用来确定传入数据的来源。对于复杂的事件处理,入口点是为事件定义多个源的一个很好的方法。
为了将任何类型的对象插入到一个入口点,我们所需要做的就是使用以下的API:
KieSession ksession = …; //kie session initialization
ksession.getEntryPoint("some entry point").insert(new Object());
前面的代码部分只有在我们在DRL文件中声明一个入口点时才会起作用;否则,它将抛出一个异常。声明和使用入口点可以直接在任何规则中发生。它们可以在规则的条件或结果中使用,如下面的例子所示:
rule "Routing transactions from small resellers"
whent: TransactionEvent() fromentry-point "small resellers"
thenentryPoints["Stream Y"].insert(t);
end
在前面的规则,我们过滤从 small resellers这个入口点传入的TransactionEvent对象。然后,在结果中,我们将把每一个匹配事件插入到另一个叫做Stream Y的入口点。正如您可以看到的,我们可以创建尽可能多的入口点来分割我们信息的来源。
插入一个入口点的事件永远不会失去对它的引用。这意味着,Kie session将把不同的入口点作为完全不同的事件组对待。在您的规则中,您需要指定您想要过滤数据的入口点,以及您想要修改数据的入口点。但是,您可以在一个规则中交叉引用来自多个入口点的信息,也可以在入口点和常规工作内存之间交叉引用。
您可以在CEPEntryPointsTest类上看到一个在不同入口点工作的规则示例。它在 chapter-06-tests项目下。在这个例子里,我们使用两个入口点去将传入的事务分为“big client”和“small client”.每个人都会有不同数量的交易他们会认为是可疑的,因此,每个人用不同的规则来处理这个案例.

1.3.2 滑动窗口

Drools CEP特性的另一个非常有用的概念是使用滑动窗口。因为事件有一个时间戳,它们也有一个固有的顺序。我们可以通过这个特殊的顺序过滤来自工作内存或任何入口点的事件。我们有两种滑动窗口,如下:
>Length-based滑动窗口
>Time-based滑动窗口

1.3.2.1 Length-based滑动窗口

最简单的滑动窗口是基于长度的滑动窗口。您可以使用它来指定插入到流中的最后N个元素。每当将一个新事件添加到流中,窗口的最后一个元素就会被一个新的元素所取代。使用基于长度的滑动窗口是很容易的。下面的规则显示了一个简单的方法来声明一个滑动窗口来从工作内存中获取TransactionEvent类型的最后6个事件:
rule "last 6 transactions are more than 100 dollars"
whenNumber(doubleValue > 100.00) from accumulate(TransactionEvent($amount: totalAmount)over window:length(6),sum($amount))
then//... TBD
end
在前面的规则中,我们将汇总最后6个事务的所有金额,并在这个金额超过100美元的情况下触发规则。为了得到最后的6个事务,我们使用一个滑动窗口。
如果在TransactionEvent类型的工作内存中有6个或更少的元素,那么这个窗口将包含所有元素。当我们添加第七个TransactionEvent对象时,我们只会得到这个滑动窗口返回的最后6个对象。这就是为什么它被称为滑动窗口。您将只看到一个特定的事件组,每次您添加一个新事件时,窗口将会移动来查看符合条件的最后一个元素。

1.3.2.2 Time-based滑动窗口

可以创建一个类似的窗口,它将返回从现在开始的特定时间内发生的任何元素。这是通过一个基于时间的滑动窗口完成的。让我们来看看下面这个例子:
rule "obtain last five hours of operations"
when$n: Number() from accumulate(TransactionEvent($a: totalAmount)over window:time(5h),sum($a))
ThenSystem.out.println("total = " + $n);
end
在前面的示例中,我们会得到在从现在到过去5小时前之内的交易。如果一笔交易发生在5个小时1秒只前,它将不再活跃在这里。在这段时间内,无论我们是有一个交易还是有500个交易,时间窗口将包含所有这些事务。
PS:请注意,这个窗口将随着Kie session的内部时钟而滑动,我们将在本章后面的《使用会话时钟进行测试》这一部分中看到如何在测试中进行配置。

1.3.2.3 声明滑动窗口

滑动窗口通常在使用它们的规则中定义。这是一个很常见的做法,因为它本来是使用滑动窗口的唯一方法。 然而,这就导致了需要从同一个窗口中过滤元素的规则,在每个规则中都必须重新定义它。如果我们这样定义滑动窗口,并且以后需要改变我们使用的窗口的性质,例如 将一个基于长度的滑动窗口转换为基于时间的滑动窗口,我们必将编辑所有使用它的规则。为了避免这样做,Drools有一个特性 被称为窗口声明。
窗口声明允许我们去定义一个窗口作为一个预创建组件,并通过名字,被任意数量的规则调用。这样就允许我们在声明窗口内进行改变,这个窗口仅仅在此处声明一次,被多个规则之间共享。其语法如下:
declare window Beats@doc("last 10 seconds heart beats")HeartBeat() over window:time( 10s )from entry-point "heart beat monitor"
end
然后,规则可以通过引用这个名称来使用声明的窗口,如下面的例子所示:
rule "beats in the window"whenaccumulate(HeartBeat() from window Beats,$cnt : count(1))
then// there has been $cnt beats over the last 10s
end
如你所见,窗口声明允许简单的重用窗户,甚至是为特定入口点声明初始公共过滤器。这可以避免重写许多规则,这些规则可能共享一个逻辑上相同的滑动窗口。

 

1.4 运行CEP-based场景

现在我们已经看到了CEP规则的主要组件,我们需要开始关注在Drools中成功运行CEP场景所需的一些配置步骤。运行CEP案例的KieBase和session都需要特殊的管理,我们将在下一小节中看到,如下所示:
>如何配置基基以支持复杂事件处理
>连续和离散规则执行的区别
>Kie session内部时钟如何计算时间事件

1.4.1 流处理配置

为了创建CEP Drools运行环境,我们需要从默认的初始化中提供一些额外的配置。我们需要添加的第一个是我们将要使用的Kie base的事件处理模式。
事件处理模式将决定在运行时中插入的新数据的处理方式。默认的事件处理模式称为CLOUD模式,基本上以相同的方式处理任何传入的数据,而不考虑事件还是简单的事实数据。这意味着运在行时将不去理解事件的概念,因此我们不能将其用于CEP。
我们需要配置我们的Kie base以使用STREAM事件处理模式。该配置将通知运行时,它应该管理事件,并根据时间戳将其内部排序。由于这一排序,我们能够对事件运行时间操作,并在其中使用滑动窗口。有许多方法可以在Kie Base中配置STREAM事件处理模式。最简单的方法是直接在kmodule.xml中作为kbase标签的一个属性来配置:
<kbase name="cepKbase" eventProcessingMode="stream"packages="chapter06.cep"><ksession name="cepKsession"/>
</kbase>
通过这种方式,我们稍后可以直接从对应的Kie Container中使用Kie Base或Kie session,而其运行时的配置将使用流事件处理模式。我们可以看到这个配置的一个例子,位置在chapter-06/chapter-06-rules/src/main/resources/META-INF/kmodule.xml。
配置此事件处理模式的另一种方法是编程方式。这样做的话,我们将会使用到 KieBaseConfiguration这个实体Bean以及他的setOption方法,如下:
KieServices ks = KieServices.Factory.get();
KieContainer kc = ks.getKieClasspathContainer();
KieBaseConfiguration kbconf = ks.newKieBaseConfiguration();
kbconf.setOption(EventProcessingOption.STREAM);
KieBase kbase = kc.newKieBase(kbconf, null);
在上一个例子中,我们使用了Kie的类路径容器来简化,但我们可以使用任何Kie Container来创建KieBase。它在定义动态知识模块时非常有用。
一旦我们定义了一个基于STREAM处理模式的Kie base,我们就需要了解不同的选项,我们将需要运行一个Kie session并管理我们的CEP场景。

1.4.2 连续的和离散的规则触发

当运行我们的CEP规则时,我们首先需要理解的是,我们是否需要以连续或离散的方式运行它们。两者之间的主要区别如下:
>离散规则触发将在特定时间点触发规则。我们的应用将会添加事件和事实数据进Kie session,在一个特定的点,它将会使用 fireAllRules方法触发任何与工作内存相匹配的规则
>连续规则触发将有一个特定的线程,用于在某些数据与规则匹配时触发规则。它将使用Kiesession的 fireUntilHalt方法来实现这一点,而一个或多个其他线程将把事件和事实插入到Kie session中。
这两种触发规则的方式完全取决于我们的情况和可能触发规则的情况。如果我们有一个场景,没有事件会触发一个规则,或者换句话说,没有事件可以被抽象成另一个事件,那么您应该使用连续规则触发。另一方面,如果能触发新规则的唯一因素是将新事件插入到Kie session中,那么对于我们的情况来说,离散规则的触发就足够了。
让我们来讨论几个例子来理解这两个场景。
首先,让我们讨论一下离散规则触发的常见情况:欺诈检测。大多数欺诈检测系统将根据来自交易的累积信息工作。基本上,如果我们有特定数量的具有特定参数的交易,我们可能会考虑欺诈的可能性。在这种情况下,我们触发规则的唯一方法是插入一个新交易来匹配规则的条件。对于这种情况,我们可以在每次交易或交易批插入到我们的Kie session时调用fireAllRules。如果在添加最新数据后不立即执行规则,就不需要触发任何规则。
在另一个场景中,让我们想象一个心脏监视器正在向我们的CEP引擎发送事件。大约每隔一秒,我们就会从示波器上获得心跳。如果我们获取事件的时间靠的过近或者不规律,我们可能会发现中风或者心律不齐的复杂事件。如果我们想检测心脏停止跳动会发生什么?这将是一个心脏骤停事件。如果我们想发现它,我们的系统将需要在没有事件发生时触发规则的能力。这种类型的场景是连续规则触发案例的典型特征。

1.4.3 使用会话时钟进行测试

当创建Kie Sessions来运行基于cep的场景时,一个更有用的配置是配置其内部时钟。默认方式,Kie Session将会用其运行所在的机器的时钟来理解时间的流逝。然而,这只是两个可用配置中的一个,称为运行时时钟。另一个允许我们定义一个受应用控制的始终的配置,叫做配置虚拟时钟。
运行时和虚拟时钟都 只向一个方向移动(往前走)。但是,如果您调用一个特定的称为advanceTime的方法,那么伪时钟就会这样做。这里有一个小的例子,说明如何在KIe session中使用虚拟时钟:
SessionPseudoClock clock = ksession.getSessionClock();
clock.advanceTime(2, TimeUnit.HOURS);
clock.advanceTime(5, TimeUnit.MINUTES);
在前面的例子中,我们告诉时钟要提前2小时5分钟。这两个调用只需要几毫秒的时间,这使得这个时钟成为测试CEP场景的一个极好的选择如果您必须检查两个事件(它们被插入到Kie session中),其中两个事件的默认时间戳间隔两个小时,那么虚拟时钟会让您几乎立即运行这个案例,运行时时钟至少需要两个小时。
为了在我们的基会话中使用伪时钟,我们需要通过kmodule.xml文件为它提供一个特定的配置:
<kbase name="cepKbase" eventProcessingMode="stream"packages="chapter06.cep"><ksession name="cepKsession" clockType="pseudo"/>
</kbase>
我们甚至可以通过KieSessionConfiguration bean来使用它:
KieServices ks = KieServices.Factory.get();
KieContainer kc = ks.getKieClasspathContainer();
KieSessionConfiguration ksconf = ks.newKieSessionConfiguration();
ksconf.setOption(ClockTypeOption.get(ClockType.PSEUDO_CLOCK.getId()));
KieSession ksession = kc.newKieSession(ksconf);
样例代码在 chapter-06-test项目下。
即使虚拟时钟最常见的用途是测试,但它通常使用的另一种情况是分布式生产环境。这样做的原因是,在大型环境中,CEP场景可能在多个服务器中执行,而虚拟时钟通常用于在不同的服务器中轻松地同步所有会话的时钟。一个额外的线程或服务器可以在几乎相同的时间内调用每个服务器上的定时的机制,并且每个服务器都有一个Kie session可以提前确保它们都在几乎相同的时钟值上运行。这通常比让多个服务器的内部时钟同步更简单,这是规则负责实时决策时的一个要求。

1.5 Drools CEP的局限性

Drools CEP的功能非常强大,并且能够像其他类型的基于Drools的规则一样快速地解决决策问题。但是,它有一些我们需要注意的架构元素,以便充分利用它。
首先,所有的Kie session都在内存中运行。这意味着所有的生存在Kie session中的事件都在内存中,而它们仍然与Kie Base中的至少一个规则相关。这可以通过一个事件类型的@expires注释来克服,但是它仍然需要预先规划定义Drools CEP服务所需的内存数量。一个快速逇方式来确定在一个服务端运行一个Drools CEP需要有多少内存:
>确定每个事件实例在Kie SESSION中应该存在多长时间(因为它可能仍然用于触发规则)。我们称这个值为a。
>确定在特定时间段内可以接收到多少事件。我们称其为B
>确定事件实例的大小.我们称其为C
A * B * C = X,一个非常粗略的估计所需的最少的内存Kie session保持所有生活事件的参考。我们还需要小心,因为我们还没有考虑到存储在规则条件和Beta网络之间的事件之间的存储的内存消耗。我们将在之后的PHREAK介绍中,提及这个知识点。
另一个需要考虑的限制是在任何持久性机制中存储Kie session的可能性。当它的内部表示发生变化时,无论它是工作内存或者是它的匹配agenda,Kie session通常是持久化了的。对于常规的CEP场景,这可能意味着在每次规则触发或插入新事件时都要存储所有的工作内存数据。使用基于CEP的Kie session进行这样的操作,可能意味着每秒存储数gb的数据。因此,需要在另一个系统中复制一个Kie session的其他机制。
目前,唯一可以复制一种基于CEP的KIE session的方法是在Kie session之间复制小的增量(不需要复制整个工作内存)以及制定规则的协调策略(因此,只有一个复制的Kie session实际上会为复制的匹配数据触发规则)。这些都是定制的机制,每个用户都应该根据自己的风险来实现自己的功能,因此,建议的替代方案是按域分解CEP场景,并让不同的服务器只处理一组案例。
为此,通常第一步是根据数据中的类型或特定组件对事件进行过滤,并将其转发给特定的Kie session,以便在特定的情况下管理特定的场景。
举例来说,在服务器中处理来自小型提供商的所有欺诈检测案例,并在两个专用服务器上进行欺诈检测。即使是过滤也可以是一个无状态的会话,创建了将每个事件重定向到相应的Kie Stateful session,如下图所示

这里写图片描述

通过这种方式,可以在Drools CEP会话中实现事件吞吐量的增加,并通过添加额外的服务器来处理(至少在某种程度上)。
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 五子棋初始版

    五子棋初始版 1、设计主框架,界面,drawchessboard方法画出棋盘。 2、利用ActionListener接口继承实现按钮事件的监听,利用MouseListener接口实现事件监听,并实现接口里的所有方法。 3、重新开始功能的实现 4、悔棋功能的实现 5、棋盘中棋子点类的定义(x,y,color)。 6,点…...

    2024/3/29 14:17:09
  2. wordpress仿站笔记

    最近接了一个用wordpress仿站的项目,本以为很简单,但实际上手后才发现了一些“小”问题,而且中文网上关于wordpress的教程不仅少,而且老,很多都已经不适用于5.x后的版本,现在就把我在开发过程中遇到问题整理成该文循环块 这大概是wordpress最实用的功能了,在把静态网页改…...

    2024/3/14 10:19:53
  3. 学习笔记(01):零基础掌握 Python 入门到实战-一个圆点的何去何从(一)

    立即学习:https://edu.csdn.net/course/play/26676/338762?utm_source=blogtoedu范式:面向对象、面向过程...

    2024/3/29 0:44:11
  4. 学习笔记(01):10小时闪电上手Java编程-课程介绍

    立即学习:https://edu.csdn.net/course/play/29050/405963?utm_source=blogtoedu讲java宏观,不太注重细节。...

    2024/3/14 10:19:52
  5. 学习笔记(02):零基础掌握 Python 入门到实战-一个圆点的何去何从(二)

    立即学习:https://edu.csdn.net/course/play/26676/338772?utm_source=blogtoedu内置函数:type() : 对象的类型id(): 对象的地址divmod(a,b): 除法help(): 函数文档...

    2024/3/14 5:08:07
  6. 学习笔记(02):MySQL数据库从入门到实战应用-DML:插入、修改、删除数据

    立即学习:https://edu.csdn.net/course/play/27328/362520?utm_source=blogtoeducreate table contacts(id int not null auto_increment primary key,name varchar(50),sex tinyint default 1,phone varchar(20) )desc contacts;insert into contacts(name,sex,phone) values…...

    2024/3/29 17:39:18
  7. 学习笔记(01):程序员的数学:概率统计-巩固概率分布性质的掌握(下)

    立即学习:https://edu.csdn.net/course/play/26113/323361?utm_source=blogtoedu...

    2024/3/29 18:33:15
  8. 区块链技术原理、发展历史根由、应用场景

    记账技术历史悠久,现代复式记账系统(Double Entry Bookkeeping)是由意大利数学家卢卡帕西奥利,1494年在《Summa de arithmetica, geometrica, proportioni et proportionalit》 一书中最早制定。复式记账法的基石是资产负债表等式,又称为会计恒等式。即任何一项经济业务的…...

    2024/3/19 5:39:18
  9. 何为面对对象,面向对象的特性

    我们都知道Java是一门面向对象的语言。什么是面向对象,它有什么特性呢,今天我们就来说一下这个"面向对象"到底是什么意思。面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,其实就有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OO…...

    2024/3/14 0:48:58
  10. 分享200个App移动端模板---总有一个适合你

    链接:https://pan.baidu.com/s/1NjBHqIoq7ORuDfJoR6gOkA 密码:xn6x分享200个App移动端文件,总有一款适合你! 下面是名字,我放了一些图片,所有图片全都放进去是不行的图太多,大家下载后可以看到。收集整理不容易老铁支持我动力APP应用介绍网站模板 APP应用广场CSS网页模板…...

    2024/3/29 3:13:12
  11. python编程从入门到实践

    1、计算机核心基础 1.1 什么是语言?什么是编程语言?为何要有编程语言? 语言其实就是人与人之间沟通的介质,如英语,汉语,俄语等。 编程语言则是人与计算机之间沟通的介质, 编程的目的就是为了让计算机按照人类的思维逻辑(程序)自发地去工作从而把人力解放出来二 计算机组成…...

    2024/3/29 0:23:48
  12. 【Netty】Netty 核心组件 ( ChannelPipeline 中的 ChannelHandlerContext 双向链表分析 )

    文章目录一、 代码示例分析二、 ChannelHandlerContext 双向链表类型三、 Pipeline / ChannelPipeline 管道内双向链表分析四、 数据入站与出站接上一篇博客 【Netty】Netty 核心组件 ( Pipeline | ChannelPipeline ) 内容 , 在 debug 调试中 , 详细分析 ChannelPipeline 内部的…...

    2024/3/14 0:48:58
  13. 【linux】frp内网穿透

    项目地址https://github.com/fatedier/frp 服务器 上传frp_0.33.0_linux_amd64.tar.gz 快捷下载链接:https://github-production-release-asset-2e65be.s3.amazonaws.com/48378947/03a3af00-88ad-11ea-91e9-21b33a8d8ff6?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credent…...

    2024/3/29 1:19:03
  14. 【LeetCode】周赛纪录(四)第192场周赛20200607 重新排列数组 数组中的k个最强值 设计浏览器历史记录 给房子涂色

    第192场周赛[5428. 重新排列数组](https://leetcode-cn.com/problems/shuffle-the-array/)题目描述Solution[5429. 数组中的 k 个最强值](https://leetcode-cn.com/problems/the-k-strongest-values-in-an-array/)题目描述Solution[5430. 设计浏览器历史记录](https://leetcode…...

    2024/3/13 5:30:09
  15. Java之GUI编程(事件监听)

    监听事件 事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理事件源:就是awt包或者swing包中的那些图形用户界面组件。(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件。(如:鼠标单击事件) 监听器:将可以触发某一事件的动作(不止一个动作)都已…...

    2024/3/14 0:48:52
  16. 面试官:小伙子,说说你对分布式系统原理的看法吧

    1 概念1.1 模型1.2 副本1.3 衡量分布式系统的指标2 分布式系统原理2.1 数据分布方式2.2 基本副本协议2.3 Lease 机制2.4 Quorum 机制2.5 日志技术2.6 两阶段提交协议2.7 MVCC2.8 Paxos协议2.9 CAP1 概念 1.1 模型 节点 在具体的工程项目中,一个节点往往是一个操作系统上的进程…...

    2024/3/14 0:48:50
  17. 23、数据结构与算法 - 图 拓扑排序

    拓扑排序拓扑排序 - 简介设G= (V, E) 是一个具有n个顶点的有向图,V中的顶点序列V1, V2,…Vn.满足从顶点Vi到顶点Vj有一条路径,则在定点序列Vi必须在Vj之前,则我们成这样的顶点需列成为拓扑序列 所谓拓扑排序,其实就是对一个有向图构造序列的过程 构造过程拓扑序列会产生2个…...

    2024/3/14 0:48:49
  18. LeetCode contest 192 5430. 设计浏览器历史记录 Design Browser History

    Table of Contents一、中文版二、英文版三、My answer四、解题报告一、中文版你有一个只支持单个标签页的 浏览器 ,最开始你浏览的网页是 homepage ,你可以访问其他的网站 url ,也可以在浏览历史中后退 steps 步或前进 steps 步。请你实现 BrowserHistory 类:BrowserHistor…...

    2024/3/26 7:48:33
  19. Sleuth分布式链路请求跟踪

    简介 在分布式系统中,微服务有多个,服务之间调用关系也比较复杂,如果有的微服务网络或者服务器出现问题会导致服务提供失败,如何快速便捷的去定位出现问题的微服务,SpringCloud Sleuth 给我们提供了解决方案,它集成了Zipkin、HTrace 链路追踪工具,用服务链路追踪来快速定…...

    2024/3/14 10:19:38
  20. docker_swarm_service

    docker_swarm运行service replicas global[root@node1 ~]# docker create --name web_server httpd 运行一个httpd服务注:默认情况下只有一个副本(期望值)正在运行运行的容器会在三个节点中任意一个节点运行:[root@node1 ~]# docker service ls #该命令代表目前有几个servi…...

    2024/3/14 10:19:36

最新文章

  1. WEB embedded APP (javafx)

    WEB embedded APP &#xff08;javafx&#xff09; &#xff08;BS 嵌入CS&#xff09; CS嵌入BS_哔哩哔哩_bilibili...

    2024/3/29 22:01:44
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. STM32看似无法唤醒的一种异常现象分析

    1. 引言 STM32 G0 系列产品具有丰富的外设和强大的处理性能以及良好的低功耗特性&#xff0c;被广泛用于各类工业产品中&#xff0c;包括一些需要低功耗需求的应用。 2. 问题描述 用户使用 STM32G0B1 作为汽车多媒体音响控制器的控制芯片&#xff0c;用来作为收音机频道存贮…...

    2024/3/29 15:00:58
  4. css3鼠标悬停图片特效,图片悬停效果源码

    特效介绍 css3鼠标悬停图片特效,图片悬停效果源码&#xff0c;可以在网页上面作为自己的动态加载名片&#xff0c;放到侧边栏或者网站合适的位置即可 动态效果 代码下载 css3鼠标悬停图片特效,图片悬停效果源码...

    2024/3/29 18:58:32
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/3/29 18:08:39
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/3/29 18:08:34
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/3/29 2:45:46
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/3/29 16:26:39
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/3/29 5:19:52
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/3/29 18:08:00
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/3/29 11:11:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/3/29 1:13:26
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/3/29 8:28:16
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/3/29 7:41:19
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/3/29 18:07:15
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/3/29 9:57:23
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/3/29 0:49:46
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/3/29 18:06:57
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/3/29 17:27:19
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/3/29 18:06:36
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/3/29 18:06:22
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/3/28 18:26:34
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/3/29 18:06:01
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/3/28 20:09:10
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57