问题标签 [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.

0 投票
2 回答
1189 浏览

java - Spring Integration - 在应用程序代码中调用方法

我有一个出站通道适配器,相关配置如下所示。

而在 FooFeedHandlerImpl...

问题:

通道适配器调用了哪个 handleFeedFile 方法?

当我使用 Spring 集成在应用程序代码中调用方法时,方法参数是如何确定的?

谢谢你的帮助!

编辑:

我在本地运行我的进程(下载了本地 SFTP 服务器 - http://www.coreftp.com/server/index.html)并确定handleFeedFile(File file)调用了该方法。

0 投票
1 回答
568 浏览

java - Spring Integration:根据创建日期/时间轮询文件

使用 Spring Integration,我需要从目录中获取输入消息。这是一个 CIFS / Samba 共享文件夹,我只有只读访问权限,所以我需要找到一种方法来只获取新文件而不需要删除它们。默认的 AcceptOnceFileListFilter 行为仅在我不重新启动容器时才有效,因此这并不理想。

所以我在想的是如何让文件轮询器只获取 X 分钟前创建的文件。我仍然会收集重复的文件,但时间跨度要短得多(我可以处理)。

我想我需要做的是实现我自己的 FileListFilter 只返回 X 分钟前创建的文件。只是想问问周围是否已经有一个实现,无论是在默认的 Spring 过滤器中还是在其他任何地方。任何更好的建议也将非常受欢迎!

谢谢黄

0 投票
1 回答
360 浏览

apache-camel - 将动态路由器 EIP 与负载均衡器 EIP 结合使用

我想根据负载均衡器 EIP 发送到的位置来重定向 DynamicRouterBean 中的消息。我试图使用 @Header(Exchange.SLIP_ENDPOINT) 访问 DynamicRouterBean 中的前一个端点,但它被设置为 null(为什么?)。即使我得到 Exchange(在 DynamicRouterBean 中),fromEndPoint 也是 direct://my-lb(但预计它是 direct://my-lb-a 或 direct://my-lb-b?? )。

后来我使用 CamelHistory 来查看消息曾经是哪些端点,但仍有问题。前一个端点(或 fromEndPoint 或 Exchange.SLIP_ENDPOINT)不是负载均衡器端点之一吗?

0 投票
2 回答
1033 浏览

rabbitmq - 确保消息传递,RabbitMq

我知道常见的方法是在发布消息之前创建消费者队列,但是这里似乎很紧密的耦合,一般我不想知道有多少队列从这个交换中消耗,每个队列有多少消息,怎么能我们在将服务器与消费者分离的同时保持可靠性?

在此处输入图像描述

在此图像上,客户端应用程序仍然需要知道是否有任何服务器队列可用于处理身份验证请求。因为如果没有队列,消息将是死信,我不相信没有人想过这个?或者我们假设这个队列总是存在的(它们是持久的)?

0 投票
0 回答
393 浏览

apache-camel - 企业集成模式 (EIP) 组件的命名约定?

我们是否有来自企业集成模式 (EIP) 组件的命名约定?

例如,集成流程中有这么多渠道,我应该如何命名渠道?

到目前为止,我发现了这个:https ://github.com/powertac/powertac-server/wiki/Naming-conventions-for-communication-channels

我们有更全面的命名指南吗?

0 投票
0 回答
34 浏览

java - 出站适配器故障后保护消息

我在出站适配器之前有一个聚合器(为了批处理请求)。

我想确保,当出站适配器发生故障时,聚合器停止发布消息,反过来,背压会向上传播集成流,直到最终出站适配器重新上线。

在我看来,这似乎是 EIP 中理想的模式,虽然我很确定它涉及队列支持的通道,但我不确定这是如何实现的,原因有几个。

A)如果适配器的失败开始是由异常引起的(实际上我@retryable在出站适配器上使用),那么重新排队消息的“正确”方法是什么?

B)我假设聚合器的收割线程将尊重下游队列的“背压”。也就是说,在这种情况下,如何告诉聚合器停止消费来自上游的消息?

0 投票
1 回答
1411 浏览

java - Apache骆驼拦截,更新所有RouteBuilders的Exchange消息,然后继续

我有一个CamelConfiguration配置 15 Routes

我想要实现的是检查路由内每个传入Messageexchange.getHeaders())的标题,如果它不存在则添加一个标题。

我可以Processor在每个RouteBuilder. 前任。

目的是在所有交换消息之间使用相同的 id,以便以后更容易关联它们。

那么,是否有一种骆驼方式可以做到这一点,CamelConfiguration#configure以便它适用于所有Routes.

我预计拦截如下。

它会被拦截,但似乎不会.to()在 each中继续RouteBuilder

参考

http://camel.apache.org/intercept.html

http://www.davsclaus.com/2009/05/on-road-to-camel-20-interceptors-round.html

0 投票
1 回答
647 浏览

mongodb - 如何使用来自 MongoDB (camel-mongodb) 的对象来丰富有效负载

我正在尝试从 MongoDb 中提取对象并将其添加到我当前的有效负载中并将其保存在另一个数据库中:

丰富从包含我的原始对象的 In.body 获取查询的问题......

那么如何将查询({"entity.id": ""})传递给丰富(mongoldb:...)并保留原始对象以将其与结果合并?

谢谢。

0 投票
1 回答
1118 浏览

rss - 如何在 Spring Integration 中动态注册 Feed Inbound Adapter?

我正在尝试在其中实现一个 RSS/Atom 提要聚合器,spring-integration并且我主要使用 Java DSL 来编写我的IntegrationFlow. 此聚合器的要求是可以在运行时添加/删除提要。也就是说,提要在设计时是未知的。

我发现使用Feed.inboundAdapter()带有测试 url 的 basic 并使用转换器从提要中提取链接然后将其传递给 anoutbound-file-adapter以将链接保存到文件很简单。inbound-file-adapter但是,当我尝试从运行文件中读取(数千个)提要 url 时,我遇到了非常困难FileSplitter,然后将每个Message<String>包含提要 url 的结果传递给然后注册一个新的Feed.inboundAdapter(). 这对 Java DSL 来说是不可能的吗?

理想情况下,如果我能做到以下几点,我会喜欢它:

尽管在多次阅读了 spring 集成 java DSL 代码(并在此过程中学习了很多东西)之后,我只是看不出有可能以这种方式做到这一点。所以... A) 是吗?B)应该是吗?C) 建议?

几乎感觉我应该能够获取输出.handle(new FileSplitter())并将其传递给.handleWithAdapter(Feed.inboundAdapter(/*stuff here*/))但 DSL 仅引用outbound-adapters 那里。入站适配器实际上只是一个子类,您可以指定其中一个的唯一AbstractMessageSource位置似乎是作为方法的参数。IntegrationFlows.from(/*stuff here*/)

我原以为可以从文件中获取输入,逐行拆分,使用该输出来注册入站提要适配器,轮询这些提要,从提要中提取新链接,并将它们附加到文件中. 看起来好像不是。

我可以做一些聪明的子类化来完成这项工作吗?

失败了...我怀疑这将是答案,我找到了spring integration Dynamic Ftp Channel Resolver Examplethis answer on how to adapt it dynamic register stuff for the inbound case...

这是要走的路吗?任何帮助/指导表示赞赏。在倾注了 DSL 代码并阅读了几天的文档之后,我想我将尝试实现动态 ftp 示例并将其调整为与 FeedEntryMessageSource 一起使用……在这种情况下,我的问题是……动态 ftp 示例有效使用 XML 配置,但是否可以使用 Java 配置或 Java DSL 来实现?

更新

我已经实现了如下解决方案:

DynamicFeedAdapter.java

如果并且仅我将其中一个url 定义为application.propertiesas时,此方法才有效feed.url=[insert url here]。否则它无法告诉我“无法解析属性 {feed.url}”。我怀疑发生的事情是所有中@Bean定义的 sDynamicFeedAdapter.java都急切地初始化了单例,所以除了在 main 方法的 for 循环中手动创建的 bean (因为它们注入了 feed.url 属性而工作正常)之外,我们还有一个已经急切初始化的流浪单例,如果在 application.properties 中没有定义 feed.url,那么它无法解析该属性,一切都会发生。现在根据我对 Spring 的了解,我知道应该可以@LazyDynamicFeedAdapter.java所以我们不会遇到这个不受欢迎的流浪单身问题孩子。现在的问题是......如果我只是标记feedAdapter() @Lazy然后bean永远不会被初始化。我如何自己初始化它们?

更新 - 问题已解决

在没有对其进行测试的情况下,我认为问题在于引导在其组件扫描期间找到了 DynamicFeedAdapter。一个简单的解决方案是将其移动到同级包中。如果 MonsterFeedApplication 在 com.acme.foo 中,则将适配器配置类放在 com.acme.bar 中。这样,引导不会将其视为应用程序的“一部分”

这确实是问题所在。实施 Gary 的建议后,一切正常。

0 投票
0 回答
695 浏览

java - Spring Integration - 使用 WatchServiceDirectoryScanner 时无法检索目录中所有文件的事件

WatchServiceDirectoryScanner/RecursiveLeafOnlyDirectoryScanner用来处理文件系统中的文件。生成文件事件并在定义的端点接收消息,但有时它会错过处理该目录中的所有文件。

例如,如果有 15 个文件,有时它会处理 10 个文件,有时会处理 5 个文件,其中 Metastore 包含所有 15 个文件的信息"metadata-store.properties"

弹簧集成配置.xml:

批处理作业调度器:

似乎我缺少一些配置或代码。

基于建议:

我已将完整spring-integration.xml的日志文件放在 git repo - https://github.com/chandaku/spring-integration-issue上。

这里创建了 5 个通道并同时工作我认为当我一次只运行一个通道时,它会成功处理目录中的所有文件,但是如果我打开所有文件通道就会出现问题。