当前位置: 首页 > 知识库问答 >
问题:

调用BRMS/Drools逻辑优于REST的良好设计

汪深
2023-03-14

我正在开发一个内置的应用程序。NET和Java。Java组件包含使用Redhat BRMS套件的完整规则库。这个NET客户端(UI和基于桌面的应用程序)将咨询Java规则引擎并发送/接收JSON数据。已经做出的决定是将规则引擎(使用Drools的Redhat BRMS 6.0.0)公开为基于REST的API。我提出了以下设计方法:

  1. 在Spring框架和服务类中编写一个REST控制器,用于调用BRMS
  2. 使用JBOSS专有的RESTSY或JAXRS编写一个简单的REST控制器
  3. 编写一个Camel适配器,将其余调用封装在Camel后面,让Camel与Drools对话
  4. 将REST封装在基于SOAP的webservices后面

我想问一下,哪一种方法是设计此类系统的更好方法。

欢迎任何其他想法。

共有2个答案

江育
2023-03-14

在我看来,

我会选择选项1。这是最简单的方法。

选项2可能是第二选择。

选项3-看起来好像有一些路由规则可以选择。同样,它可能会使它变得复杂。

而且绝对不是让SOAP变得复杂的选项4。

易淳
2023-03-14

从中可以明显看出https://github.com/gratiartis/sctrcd-payment-validation-web和https://github.com/gratiartis/qzr我通常倾向于在Spring应用程序中使用RESTAPI公开Drools业务规则。

我在上面列表中考虑的唯一替代方案是4,其中API通过SOAP Web服务公开。尽管绝对没有包装JSON REST服务!设计良好的Spring应用程序可以通过REST和SOAP API公开功能,只需很少的努力。

我通常在工作时通过肥皂接触。NET客户端。首先是。NET工具非常支持基于您定义的WSDL生成代理。其次,WSDL形成了一个定义良好的契约,您和客户机开发人员都必须遵守该契约。有一个严格的合同对于防止争论非常有用。虽然如果您的界面很简单,但它可能不会带来太多好处。

另一个关键原因是WSDL不会更改,除非您故意更改它。由于Jackson为您生成了所有内容,REST JSON API似乎开发得很快。但是,它可以公开您的内部对象模型(和依赖项!),这意味着除非您小心,否则对内部模型看似微不足道的更改可能会使私有数据可见并可能破坏客户端。

综上所述,如果您能够使API保持合理的简单并与保持良好的关系。NET开发人员(也许您是其中之一),那么我建议使用Spring REST API。如果github repos可以帮助您入门,那么您可以随意从中窃取代码!

顺便说一句——如果你要考虑骆驼,值得注意的是有一个Drools-Camel组件可以为你做很多工作。

 类似资料:
  • 本文向大家介绍SQL 设计良好的表的属性。,包括了SQL 设计良好的表的属性。的使用技巧和注意事项,需要的朋友参考一下 示例 真正的关系数据库必须超越将数据扔到几个表中并编写一些SQL语句来提取数据的能力。 最好的一个错误设计的表结构将减慢查询的执行速度,并可能使数据库无法按预期运行。 一个数据库表不应被视为另一个表。它必须遵循一组规则才能被认为是真正的关系。从学术上讲,区分是一种“关系”。 关系

  • 规格- 在游戏中,孩子们坐成一圈,圈外的一个人(领导者)唱一首固定字数的歌。绕着圆圈顺时针移动,领导者为歌曲中的每个单词指向环中的一个新孩子。歌曲最后一个词被指向的孩子出局,必须离开圆圈。领导者然后用较小的圆重复这个过程。游戏继续进行,直到最后一个孩子被淘汰。这个孩子是开始下一个游戏的领导者。 我几乎已经弄明白了这个逻辑,但在我的数组索引中找不到一个bug,我将当前元素添加到另一个数组中(以显示消

  • 主要内容:前言,谁适合阅读本教程,Cat Me,矫情箴言前言 本教程主要讲述 Verilog 完成数字 IC 设计(数字集成电路设计,Digital Integrated Circuit Design) 时涉及的一些知识,更加注重数字电路安全、稳定、方便的实现。将该教程理解为 《Verilog 教程》的高级篇,也再适当不过。 内容主要包括:底层(1章 门级建模、2章 用户自定义原语 UDP、9章 逻辑综合)、时序(3章 时序分析)、优化(4章 同步与异

  • 问题内容: 对于以下代码,为什么打印A,B?我希望它能打印B,B。而且,由JVM执行的方法调用是动态还是静态评估? 问题答案: 重载由编译器 静态 确定。 重写 是在执行时完成的,但这不是这里的因素。 的静态类型为A,因此第一个方法调用解析为。

  • 我正在创建一个UDP服务器,它需要从各种客户端接收UDP数据包,然后将它们转发给其他客户端。我使用C#,所以每个UDP套接字对我来说都是一个Udp客户端。我想我想要2个Udp客户端对象,一个用于接收,一个用于发送。接收套接字将绑定到已知端口,发送者根本不会绑定。 服务器将获取每个数据包,查找数据包数据中的用户名,然后根据服务器维护的路由列表,将数据包转发给1个或多个其他客户端。 我开始监听Udp客