日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

后台审核管理 ergo_Kogito,ergo规则:从知识到服务,轻松自如

發(fā)布時(shí)間:2023/12/3 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 后台审核管理 ergo_Kogito,ergo规则:从知识到服务,轻松自如 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

后臺(tái)審核管理 ergo

歡迎閱讀有關(guān)Kogito倡議的博客系列的另一集,以及我們將Drools帶入云的努力。 這些文章的目的是收集用戶對(duì)我們提供給Kogito的功能的早期反饋。

在本文中,我們介紹了兩種實(shí)現(xiàn)完整智能服務(wù)的新方法 :

  • 獨(dú)立的規(guī)則服務(wù)
  • 集成智能工作流程和規(guī)則任務(wù)
  • Kogito的執(zhí)行單位

    您可能已經(jīng)知道,在Kogito中,我們正在使全新的Unit概念成為中心。

    “執(zhí)行單元”是我們用來(lái)表示可執(zhí)行知識(shí)的術(shù)語(yǔ)。 一個(gè)單元可以是一個(gè)過(guò)程,一組規(guī)則,一個(gè)決策等。在一組規(guī)則的情況下,我們稱其為規(guī)則單元 。 如果您選擇使用單位,則在Kogito中,我們將照顧自動(dòng)生成REST端點(diǎn)所需的所有樣板。

    規(guī)則單元主要由

    1)數(shù)據(jù)定義;

    2)一組實(shí)現(xiàn)單元行為的規(guī)則和查詢(規(guī)則引擎的規(guī)則); 3)可選地,可以出于多種目的附加事件監(jiān)聽(tīng)器。

    在本文中,我們將重點(diǎn)介紹數(shù)據(jù)定義,規(guī)則和查詢。

    通過(guò)聲明一個(gè)可能包含數(shù)據(jù)源的Java類來(lái)給出數(shù)據(jù)定義 。 每個(gè)數(shù)據(jù)源代表規(guī)則將匹配或插入到其中的工作內(nèi)存分區(qū)。

    例如,假設(shè)您要聲明一個(gè)警報(bào)服務(wù),該服務(wù)接收事件并根據(jù)某些條件產(chǎn)生警報(bào)。 我們聲明
    Event和Alert對(duì)象如下:

    package com.acme; public class Event { String type; int value; // getters and setters } public class Alert { String severity; String message; // getters and setters }

    AlertingService單元類型聲明是實(shí)現(xiàn)接口RuleUnitData 。

    package com.acme; public class AlertingService implements RuleUnitData { private final DataStream<Event> eventData = DataSource.createStream(); private final DataStream<Alert> alertData = DataSource.createStream(); // getters and setters }

    規(guī)則通常在DRL文件中定義,除了現(xiàn)在必須在文件頂部指示它們的單位 。 例如,您可以按以下方式聲明AlertingService的數(shù)據(jù)定義:

    package com.acme; unit AlertingService; rule IncomingEvent when // matches when a temperature higher than 30 °C is registered (OOPath syntax) $e : /eventData [ type == "temperature" , value >= 30 ] then System.out.println( "incoming event: " + $e.getMessage()); alertData.append( new Alert( "warning" , "Temperature is too high" ) ); end

    如您所見(jiàn),規(guī)則可能與給定的數(shù)據(jù)源匹配或插入到給定的數(shù)據(jù)源。

    查詢是在DRL文件(如規(guī)則)中定義的,也屬于一個(gè)單元。 如果聲明至少一個(gè)查詢,則將免費(fèi)獲得REST端點(diǎn)自動(dòng)生成 。 例如:

    query Warnings alerts: /alertData [ severity == "warning" ] end

    將生成REST終結(jié)點(diǎn)/warnings ,您可以通過(guò)以下方式對(duì)其進(jìn)行POST-ing調(diào)用:

    $ curl -X POST \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "eventData": [ { "type": "temperature", "value" : 40 } ] }' \ http: //localhost:8080/warnings

    這將生成響應(yīng):

    [ { "severity" : "warning" , "message" : "Temperature is too high" } ]

    程序員非常熟悉基于Java的數(shù)據(jù)定義,但是從用戶的早期反饋來(lái)看, 我們決定提供兩種替代方法來(lái)聲明規(guī)則單元 。 我們正在發(fā)布此博客文章,以收集更多的用戶反饋!

    類型聲明

    類型聲明是DRL功能,用于以與Java無(wú)關(guān)的方式聲明與Java兼容的類型。 在7系列中,用戶可以使用以下語(yǔ)法聲明類型:

    package com.acme; declare Event type: String value: int end declare Alert severity: String message: String end

    這使DRL完全獨(dú)立:可以使用DRL定義實(shí)體和規(guī)則。 但是,它們沒(méi)有什么限制。 例如,它們不支持實(shí)現(xiàn)接口,也不支持泛型類型字段。 換句話說(shuō),以下聲明在7系列中在語(yǔ)法上是無(wú)效的:

    package com.acme; declare AlertingService extends RuleUnitData eventData: DataStream<Event> alertData: DataStream<Alert> end

    在版本0.8.0中,我們解除了這些限制:我們?cè)试S接口的繼承受限(現(xiàn)在僅允許一個(gè)繼承),而字段的通用類型聲明。 有了這些新功能,以下代碼將成為有效的DRL。

    長(zhǎng)話短說(shuō): 您現(xiàn)在可以聲明完整的微服務(wù)
    來(lái)自單個(gè)DRL 。

    使用原型引導(dǎo)您的Kogito服務(wù):

    mvn archetype:generate \ -DarchetypeGroupId=org.kie.kogito \ -DarchetypeArtifactId=kogito-quarkus-archetype \ -DarchetypeVersion= 0.8 . 0 \ -DgroupId=com.acme \ -DartifactId=sample-kogito

    目前,沒(méi)有Quarkus版本捆綁Kogito 0.8.0。 否則,您將可以使用mvn io.quarkus:quarkus-maven-plugin:create代替。

    現(xiàn)在,清除src/main的內(nèi)容,然后將此DRL放到src/main/resources/com/acme文件夾中:

    package com.acme; unit AlertingService; import org.kie.kogito.rules.DataStream; import org.kie.kogito.rules.RuleUnitData; declare Event type: String value: int end declare Alert severity: String message: String end declare AlertingService extends RuleUnitData eventData: DataStream<Event> alertData: DataStream<Alert> end rule IncomingEvent when // matches when a temperature higher than 30 °C is registered (OOPath syntax) $e : /eventData [ type == "temperature" , value >= 30 ] then System.out.println( "incoming event: " + $e.getMessage()); alertData.append( new Alert( "warning" , "Temperature is too high: " + $e ) ); end query Warnings alerts: /alertData [ severity == "warning" ] end

    現(xiàn)在,以以下方式在開(kāi)發(fā)人員模式下啟動(dòng)Quarkus服務(wù):

    $ mvn compile quarkus:dev

    到此為止,您現(xiàn)在可以curl您的服務(wù)了:

    $ curl -X POST \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "eventData": [ { "type": "temperature", "value" : 40 } ] }' \ http: //localhost:8080/warnings

    工作流程整合

    公開(kāi)基于規(guī)則的服務(wù)的另一種方法是通過(guò)工作流 。

    工作流 (有時(shí)稱為“業(yè)務(wù)流程”)描述了圖中的一系列步驟,并且通常會(huì)聲明變量 :在執(zhí)行過(guò)程中操作的值的數(shù)據(jù)持有者。 一個(gè)這樣的變量的數(shù)據(jù)類型可以是任何東西 :您可以使用Java類,但是在此示例中,我們將再次使用聲明的數(shù)據(jù)類型。

    package com.acme; declare Event type: String value: int end declare Alert severity: String message: String end

    讓我們將此工作流稱為com.acme.AlertingWorkflow ,并聲明變量eventData和alertData :

    包含規(guī)則任務(wù)的工作流可能會(huì)完全跳過(guò)規(guī)則單元的數(shù)據(jù)聲明 :在這種情況下,規(guī)則單元是直接從流程的結(jié)構(gòu)中推斷的:每個(gè)變量都將插入同名的數(shù)據(jù)源中 。

    單元的名稱由進(jìn)程使用語(yǔ)法unit:com.acme.AlertingService 。 您仍然可以自由聲明單元com.acme.AlertingService ; 在這種情況下,該過(guò)程將獲取您手工編碼的聲明。

    注意:您可能已經(jīng)注意到我們正在使用“規(guī)則流組”字段。 將來(lái),我們將在UI中實(shí)現(xiàn)更明確的支持。

    使用原型引導(dǎo)您的Kogito服務(wù):

    mvn archetype:generate \ -DarchetypeGroupId=org.kie.kogito \ -DarchetypeArtifactId=kogito-quarkus-archetype \ -DarchetypeVersion= 0.8 . 0 \ -DgroupId=com.acme \ -DartifactId=sample-kogito

    警告 。 該功能的支持是試驗(yàn)性的,因此它可能無(wú)法與Quarkus熱代碼重新加載無(wú)縫配合; 我們還需要執(zhí)行以下額外步驟來(lái)啟用它,但將來(lái)會(huì)有所改變。

    使用以下插件聲明更新pom.xml :

    <build> <plugins> <plugin> <groupId>org.kie.kogito</groupId> <artifactId>kogito-maven-plugin</artifactId> <version> 0.8 . 0 </version> <executions> <execution> <goals> <goal>generateDeclaredTypes</goal> </goals> </execution> </executions> </plugin> ... </plugins> </build>

    現(xiàn)在,您可以清除src/main的內(nèi)容,然后將進(jìn)程和以下DRL放到src/main/resources/com/acme文件夾中。

    package com.acme; unit AlertingService; import org.kie.kogito.rules.DataStream; import org.kie.kogito.rules.RuleUnitData; declare Event type: String value: int end declare Alert severity: String message: String end rule IncomingEvent when // matches when a temperature higher than 30 °C is registered (OOPath syntax) $e : /eventData [ type == "temperature" , value >= 30 ] then System.out.println( "incoming event: " + $e.getMessage()); alertData.set( new Alert( "warning" , "Temperature is too high: " + $e ) ); end

    您可能已經(jīng)注意到,不需要顯式聲明查詢:該過(guò)程將顯示變量的內(nèi)容作為響應(yīng); 它將生成端點(diǎn)/AlertingWorkflow ,并接受以下形式的POST請(qǐng)求:

    $ curl -X POST \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "eventData": { "type": "temperature", "value" : 40 } }' \ http: //localhost:8080/AlertingWorkflow

    答復(fù)將是:

    { "id" : ..., "eventData" : { "type" : "temperature" , "value" : 100 }, "alertData" : { "severity" : "warning" , "message" : "Temperature is too high: Event( type=temperature, value=100 )" } }

    但是,如果您確實(shí)聲明了查詢,則也可以使用單獨(dú)的端點(diǎn)。 例如,如果您聲明查詢“ Warnings您仍然可以POST到http://localhost:8080/warnings并分別調(diào)用規(guī)則服務(wù),如下所示:

    $ curl -X POST \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "eventData": { "type": "temperature", "value" : 40 } }' \ http: //localhost:8080/warnings

    請(qǐng)注意,該請(qǐng)求不再包含事件列表。 這是因?yàn)檫^(guò)程變量映射到單個(gè)值而不是DataStreams。

    結(jié)論

    我們偷看了我們正在做的工作,以改進(jìn)Kogito中的規(guī)則和流程的入門經(jīng)驗(yàn)。 通過(guò)這些更改,我們希望提供一種更加簡(jiǎn)化的方法來(lái)定義基于知識(shí)的服務(wù)。 通過(guò)選擇編寫Java,開(kāi)發(fā)人員將始終能夠更加明確地了解他們想要處理的數(shù)據(jù)。 但如果他們?cè)敢?#xff0c;他們可以采用完全以DSL為中心的開(kāi)發(fā)工作流程。

    對(duì)于懶惰,可以在https://github.com/evacchi/kogito-rules-example/tree/master/code獲得示例。

    翻譯自: https://www.javacodegeeks.com/2020/03/kogito-ergo-rules-from-knowledge-to-service-effortless.html

    后臺(tái)審核管理 ergo

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的后台审核管理 ergo_Kogito,ergo规则:从知识到服务,轻松自如的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。