问题标签 [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 投票
1 回答
1377 浏览

java - 在 Apache Camel 中,如果端点不存在,我如何收到错误消息?

我们正在使用 Camel fluent 构建器来设置一系列复杂的路由,其中​​我们使用RecipientList功能使用动态路由。

我们遇到了一些问题,在某些情况下,收件人列表包含一个不存在的消息传递端点(例如,类似seda:notThere)。

一个简单的例子是这样的:

如何配置路由,以便如果交换尝试路由到尚不存在的端点,则会引发错误?

我正在使用 Camel 2.9.x,并且我已经尝试过死信通道和各种错误处理程序实现,(似乎)没有记录错误或警告。

我看到的唯一日志表明 Camel 正在(试图)发送到不存在的端点:

提前致谢!

0 投票
1 回答
2853 浏览

java - 在构建后触发的 Spring 集成入站通道适配器?

假设我有这个类:

我想要的是当我的应用程序启动时,将myMethod()返回的结果发送到 Spring Integration 中的某个通道。我试过的:

现在我可以在 poller 中配置的是myMethod()在某个时间调用,在某个调度上定期调用,但我希望在应用程序启动后准确运行(类似于@PostConstruct)。有没有一种简单的方法来实现这一点,而不需要复杂的 AOP 技术?

0 投票
0 回答
2815 浏览

rabbitmq - Pentaho Kettle ETL + RabbitMQ 插件(输入和输出)

我正在使用 Kettle 同步在多台客户端 PC 上运行的旧关系数据库。在浏览了《企业集成模式》这本书之后,我确信我应该使用消息队列 (MQ) 作为云和本地 PC 之间的通信通道。我选择 RabbitMQ 是因为它使用开放标准 (AMQP),而且看起来很受欢迎。

无论如何,在没有 MQ 的情况下进行测试时,我的水壶转换似乎工作正常。我现在如何整合两者?我做了一些研究,发现其他人正在做同样的事情的提示(见链接),但我没有找到适合我的开箱即用的解决方案(考虑到我对 Java 一无所知)。

笔记:

  1. 本地数据库在 PC (Windows) 上运行,云服务器在 Linux(Amazon Linux 或 Ubuntu)上运行。我想让水壶在 PC 中作为 Windows 服务运行,这样客户端就不会意外关闭它;
  2. 我对 Java 一无所知,但我对 shell 脚本、批处理文件、python、ruby 和一点 javascript 都很好。
0 投票
1 回答
1202 浏览

java - 使用 Apache Camel 处理不同优先级的 JMS 消息

我正在解决处理具有不同优先级的 JMS 消息的问题。我使用 Apache Camel 框架作为 EIP 实现者。我有两个必须使用的队列。第一个包含优先级较高的消息,第二个包含优先级较低的消息。

现在我想创建一个包含循环的特殊组件“混合器”,执行以下步骤:

  1. 查看优先级队列
    • 如果它包含一条消息,它将把它发送到输出队列并进入一个循环的开始(如果它包含很多消息,它将处理前10条消息,然后转到步骤2)
    • 如果它不包含任何消息,请转到步骤 2
  2. 看第二个队列
    • 如果它包含一条消息,则将其发送到输出队列(但只有一条消息)并重复循环
    • 如果它不包含任何消息,则重复循环

如您所见,如果有很多消息(优先队列中的 10 条/第二条中的 1 条),我想保持一个特殊的比例。如果优先队列中没有消息,我们可以立即处理第二个队列中的消息。我想要像 EIP Resequencer 这样的东西,它将从多个输入队列中消耗。

我寻找了一条骆驼路线,我将从两个队列中消费,在那里我将拥有上面描述的组件“Mixer”。我想要这样的东西:

但我没有找到如何做到这一点的方法。一条路线只能有一个输入。如果它有更多的输入,Camel 将在内部复制路线(我们将有两条独立的路线)并且行为将如下:

如此处所述。这不是我想要的:-(。你有什么想法可以解决我的问题吗?提前谢谢!

0 投票
1 回答
59 浏览

spring - 服务激活器 EIP 的异步变体?

我们的应用程序中有以下骆驼路线:

我们希望“webServiceRoute”在处理器验证数据并将消息转发到“importUri”后立即返回响应用户。但现在看来,在“importUri”交换完成之前,响应不会返回给调用者。所以我的问题是将接收到的请求异步转发到另一个队列的“正确”方法是什么?“importUri”交换将不会有任何回复(即它应该是 InOnly)。

0 投票
1 回答
1736 浏览

java - 我是否正确使用 Apache Camel 聚合器?

我对路由的理解(在 Apache Camel 术语中)是它表示从一个端点到另一个端点的数据流,并且它会在对数据执行 EIP 类型操作的过程中停止在各个处理器处。

如果这是对路线的正确/公平评估,那么我正在建模一个我认为需要在同一条路线内有几条路线的问题CamelContext(我使用的是 Spring):

  1. 路线 1:从 Source-1 中提取数据,对其进行处理,将其转换为 a List<SomePOJO>,然后将其发送到聚合器
  2. 路线 2:从 Source-2 中提取数据,对其进行处理,还将其转换为 a List<SomePOJO>,然后将其发送到聚合器
  3. Route 3:包含一个聚合器,等待它List<SomePOJO>从Route 1 和 Route 2 接收到 a 然后继续处理聚合列表

事情是这样的:两个List<SomePOJO>s 需要同时到达聚合器,或者更确切地说,聚合器 bean 必须等到它从两个路由接收到数据之前,它才能将 2 个列表聚合为一个List<SomePOJO>列表并将聚合列表发送到3号公路的其余部分。

到目前为止,我有以下伪编码<camelContext>

然后在Java中:

我的问题

  1. 我的基本设置正确吗?换句话说,我direct:aggregator是否正确使用端点将数据从聚合器发送出去route-1和发送route-2route-3聚合器?
  2. 我的聚合器会按照我期望的方式工作吗?假设extractor1bean inroute-1只需要 5 秒运行,但extractor2bean inroute-2需要 2 分钟运行。在 t=5 时,聚合器应该从那里接收数据extractor1并开始等待(2 分钟)直到extractor2完成,然后将其余数据提供给聚合器。是的?
0 投票
2 回答
499 浏览

variables - Camel:如何在ErrorHandler中使用日志

我已经定义了一个错误处理程序,它适用于多个路由,即

当特定处理器类之一中发生异常时,将记录以下内容:

现在我想打印一些有用的东西来帮助确定异常是否发生在 route1 或 route2 中,即:

我怎样才能做到这一点?

我尝试过 .log(${routeId}) 之类的东西,但它不起作用。

非常感谢!

0 投票
2 回答
1514 浏览

java - Camel AggregationStrategy 产生 NULL 正文消息

我目前有以下骆驼路线:

现在,我并没有真正聚合任何有意义的东西(completionSize=1),我只是在测试AggregationStrategy。这是我的策略:

还有我的postProcessor豆子:

当我运行此代码时,我看到来自我的preProcessorbean 的日志消息表明它正在正确执行。而且我还看到这MyAggregationStrategy是正确地“聚合”消息,然后让它postProcessor在第一条消息到达后传递(再次,因为completionSize=1)。但是,我得到以下输出postProcessor

谁能看到为什么payload会是NULL?它不应该已经在里面初始化了MyAggregationStrategy吗?!?我很高兴发布更多代码,但我相信这源于我AggregationStrategy错误地使用了 API。

0 投票
1 回答
79 浏览

java - Apache Camel 是否适合以下集成组件?

我正在开发一个组件(我们称之为 X),它将 3 个服务(我们称之为 A、B、C)相互集成。它嵌入了一个消息队列。流程如下所示:

  1. 服务 A 为 X 中的队列生成一条消息。
  2. X 使用一条消息,根据其中的数据进行一些计算,结果调用服务 B(基于肥皂的 Web 服务),然后根据响应数据调用服务 C(基于休息的 Web 服务)2.1。根据其中的数据调用服务 B (SOAP WS)。2.2. 基于 2.1 的响应。它调用服务 C (REST WS)
  3. 在 C 中进行一些计算之后,C 回调 X (REST WS),然后 X 调用 A (REST WS)

途中有可能会再提供一项服务。

将组件 X 基于 Apache Camel 是否有利可图?如果是,Camel 的哪些功能会有用?

0 投票
1 回答
350 浏览

java - CAMEL 或其他企业集成框架是否更适合此用例?

我的应用程序需要作为中间件(MW)工作,它从各种客户那里获得订单(以 XML 形式),其中包含 --------------Priority 1 供应商 ID,客户可以在其中发送XML 到这些组件之一

此 MW 将首先验证传入请求并将确认发送给通过首选渠道请求订单的客户。通道和客户端点信息存在于传入的 XML 中。

一旦它得到订单,它需要通过他们的首选渠道以 xml 的形式向不同的供应商发送订单请求。我的数据库中有供应商及其首选渠道信息。

所以它是一个企业集成用例。

我打算使用核心 Java 技术来实现它。这是我计划的方法。

对于每种类型的传入请求(JMS 队列、文件系统、HTTP、Web 服务请求(rest/soap)),将有四个侦听器/入口端点。这些侦听器会将 xml 字符串放入 jms 队列中。这将作为接待员工作并使流程异步。

现在我将拥有 jms 消费者,它将在队列上侦听。(消费者可以在同一系统上或与生产者不同,具体取决于生产者机器上的负载)。这个消费者会将 xml 字符串解析为 java 对象。执行验证。向客户发送确认(确认需要根据客户偏好发送。我将使用确认处理器工厂,它将根据偏好发送确认)。验证完成后,将此 pojo 转换为另一种 pojo 格式,以便 xstream/jaxb 进一步将其编组为 xml 格式并通过他们的首选渠道(供应商偏好存储在 db 中)发送给供应商,例如通过 soap、jms、文件请求等。

有些我遇到了这个 CAMEL 链接http://java.dzone.com/articles/open-source-integration-apache,看起来它提供了完美的解决方案,发现这是企业集成用例。

请专家建议,Camel 是解决此问题的正确方法。或者像 Spring 集成这样的其他一些企业集成框架,ESB 在这种情况下会更有利。如果有人可以指出 ESB 解决这种用例的资源。这真的很有帮助。

由于时间限制,我无法探索所有解决方案,因此寻找专家建议以便可以专注于一个。