问题标签 [enterprise-integration]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-camel - 如何在 Camel 的 HTTP url 中使用 bean 中的变量
我是 Camel 的新手,过去几天才使用它。
我想在 bean“retreiveDetails”中进行一些处理,然后在路由的下一步中使用来自该 bean“retreiveDetails”的变量“idValue”,这是一个 http url。Routebuilder 类的一部分如下,
如何在 bean“retreiveDetails”中设置“idValue”的值?以及如何在 Routebuilder 的路线中使用它?
java - Apache Camel 将所有请求标头复制到响应
我有一条骆驼路线,它设置了一些自定义标头并充当反向代理。
对应用服务器的请求是通过 Web 代理传递的,并且 Web 代理会为请求设置一些标头。这些标头包含一些敏感信息。但是看起来骆驼溃败将所有请求标头作为响应标头复制到响应中,因此网络代理设置的敏感信息在浏览器端可用。
但是,当我跳过骆驼溃败时,响应没有网络代理标头。所以我怀疑camel/servelet组件复制请求头来响应。请注意,我没有复制任何请求标头来响应我在 roue 中的代码。请对此有所了解。
更新
根据骆驼servlet文档
Camel 将应用与 HTTP 组件相同的消息头。Camel 还将填充所有 request.parameter 和 request.headers。例如,如果客户端请求的 URL 为 http://myserver/myserver?orderid=123,则交换将包含一个名为 orderid 的标头,其值为 123。
这是否意味着 servlet 组件将所有请求标头复制到响应中?如果是这样如何禁用它?
wso2esb - 如何在没有太多耦合的情况下“关联”共享相似信息的 API?
我需要集成 3 个系统,每个系统都有自己的 REST API。这些系统需要共享一些信息,比如说产品(只是为了简化讨论)。每个系统都有自己对同一物理产品的表示,具有自己的内部 ID。
我计划使用 ESB(更准确地说是 WSO2 ESB)“连接”这些系统。
在与另一个系统通信时,消息发送系统(发起消息交换的系统)理想情况下应该知道远程系统产品 ID,以识别它需要与之交互的产品。但是,我觉得它的耦合太大了,因为一个系统不应该知道另一个系统的内部 ID。此外,未来有更多系统要集成,系统之间交换的所有 JSON 消息都应该修改,新系统的产品 ID 保存在每个系统本地数据存储中。
你如何处理类似的情况?您如何将应该相互通信的不同系统的内部 ID 关联起来,而不在本地保存彼此的系统内部 ID?
我会很感激你的建议。
java - 如何“忽略”来自 Apache Camel File Consumer 的拾取交换
我有一个批处理文件使用者,它正在轮询许多不同进程将文件拖放到的公共目录。这些文件通过文件名上的 guid 一起“批处理”。完成特定批次后,应用程序会删除一个 .done 文件以触发骆驼文件使用者。
我的问题是我正在尝试找到一种方法来潜在地“忽略”可能包含我不想处理的文件的消息/交换(即..不是我当前批次的一部分)。
此外,我希望骆驼不处理“忽略”的交换(即..不移动到 .processed 目录)。
我目前正在将消息过滤器视为一种潜在的方法来做到这一点,尽管我不确定它是否能满足我不处理的要求。
有什么建议么?
python - Python 企业集成模式库/框架
是否有一个 Python 库可以实现经典企业集成模式书中的企业集成模式?
java - JMS 队列拆分。企业集成。阿帕奇骆驼
我有一个将一些消息放入 JMS 队列的第三方应用程序。我也有一个从这个队列中读取消息的应用程序。根据消息的类型,我将此消息保存到 DB 或将其发送到第三方服务。此外,我们不应该超过一些固定的每秒调用限制,以免第三方超载。
目前,对于这个用例,我想到了两种解决方案。
第一个是要求第三方发送一些自定义标头,以便 JMS 消费者能够使用 JMS 选择器过滤消息。因此,在这种情况下,我们将能够创建两个消费者,第一个将能够读取消息并将它们保存到数据库,第二个将使用一些节流/轮询机制在特定负载下向第三方发送消息. 但是这种方法对我不起作用,因为第三方添加这些自定义标题需要很长时间。在骆驼中是这样的:
第二个是创建另外两个 JMS 队列和一个将在这些队列之间拆分消息的处理器。然后与第一个解决方案中的逻辑相同。但是,这意味着应该添加 2 个额外的 JMS 队列。在骆驼中:
另外,我一直在考虑使用两个内存队列而不是 JMS 队列。但是,在这种情况下,如果 JMS 队列中有很多消息,我们很容易陷入内存问题。
任何人都可以为这个用例建议一个架构设计吗?很高兴以骆驼路线风格看到它。
apache-camel - 在 apache camel 中传递 HTTP 消息是否可靠?
MuleSoft HTTP ListenerConnector将 HTTP 请求转换为 Mule 消息。据我了解,因此,消息存储在队列中 - 因此可以保证消息将被传递(一旦请求到达集成平台)。
相比之下,apache camel 不附带消息传递系统。因此,我假设消息没有存储在任何地方,并且当消息的目的地暂时不可用时会丢失。
那正确吗?将骆驼与一些消息系统一起使用时,骡子行为是否可以轻松实现?
java - 骆驼:文件消费者组件“咬得比它可以咀嚼的多”,管道因内存不足错误而死
我在 Camel 中定义了一条路线,如下所示: GET 请求进来,在文件系统中创建了一个文件。文件消费者拾取它,从外部 Web 服务获取数据,并通过 POST 将结果消息发送到其他 Web 服务。
简化代码如下:
多播中的三个端点只是将生成的消息发布到其他 Web 服务。
cameldest
当队列(即文件目录)相当空时,这一切都很好。正在创建文件cameldest/<subdir>
,由文件使用者拾取并移入cameldest/<subdir>/inprogress
,并且正在将内容发送到三个传出 POST 没有问题。
但是,一旦传入的请求堆积到大约 300,000 个文件,进度就会减慢,最终管道会由于内存不足错误(超出 GC 开销限制)而失败。
通过增加日志记录,我可以看到文件消费者轮询基本上从不运行,因为它似乎对每次看到的所有文件负责,等待它们完成处理,然后才开始另一轮轮询。除了(我假设)导致资源瓶颈之外,这也干扰了我的排序要求:一旦队列被成千上万条等待处理的消息堵塞,那么天真地排序更高的新消息 - 如果它们仍然被拾取- 仍在那些已经“开始”的人后面等待。
现在,我尝试了maxMessagesPerPoll
andeagerMaxMessagesPerPoll
选项。起初,它们似乎缓解了这个问题,但经过几轮投票后,我仍然发现有数千个文件处于“已启动”的边缘。
唯一有效的方法是使瓶颈delay
变得maxMessages...
如此狭窄,以至于处理的平均完成速度比文件轮询周期快。
显然,这不是我想要的。我希望我的管道尽可能快地处理文件,但不是更快。我期待文件使用者在路线繁忙时等待。
我犯了一个明显的错误吗?
(如果这是问题的一部分,我正在使用 XFS 的 Redhat 7 机器上运行稍旧的 Camel 2.14.0。)
java - 在分散聚集中定义动态通道
在分散聚集的情况下,定义了静态通道(即通道是已知的先前设计),将从中聚合响应。
是否可以根据数组列表(动态列表)的大小多次调用同一个api。
在我的情况下,有大小为 3 的 java 数组列表(动态)(每次大小不同),比如
即对于arraylist的每个元素我需要调用业务api(samp是业务api,这里应该调用3次)。由于大小每次都不一样,这里如何应用scather gather spring 集成模式?是否可以在这里应用任何其他弹簧集成模式?
针对上述问题所做的事情(但以下方法是一种顺序处理方式,是否可以并行处理每个调用):
. Spring 集成 , java , 企业 集成 模式 ;