问题标签 [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 回答
1720 浏览

java - 使用 CAMEL 处理确认?

我有客户通过不同的方式发送请求,例如 web 请求、http 请求、soap 请求或通过其他渠道。

在骆驼中,我从各自的端点接收到 jms 队列。从队列处理器拿起消息。现在处理器需要根据他们的偏好(他们在传入请求中发送的)将确认发送给客户端。偏好可以是他们希望通过 web 服务或 jms 或文件系统接收确认。

我认为它可以通过http://camel.apache.org/request-reply.html位来完成,我无法继续进行。基本上我不确定我应该如何使用 CAMEL 内置功能处理从处理器到各个客户端的确认。任何方向都会有帮助吗?

更新:-客户端首选项存储在来自客户端的传入请求消息中。您还可以假设它存储在系统中的某个位置(数据库或属性文件)

0 投票
1 回答
83 浏览

java - 发送对文件请求的响应?

我的一位客户在 CAMEL 中使用以下配置将文件请求放在目录 placeorder 下

从incomingOrders 完成处理后,我想向发起文件请求的客户发送一些响应。我如何使用 CAMEL 实现它(可能使用请求回复或返回地址模式)。有任何想法吗?

0 投票
3 回答
4409 浏览

rest - Hub、Spoke 和 ESB 之间的区别

我知道这已经是一个很好的问题,但它并没有真正回答我正在寻找的东西。

据我了解:

1.两者都用作应用程序之间的中心焦点2.两者
都可以在服务/应用程序之间使用路由/中介/转换等

但我真正看到的唯一区别是集线器和辐条通常有许多不同的格式进入集线器(SOAP/REST/XML/JSON ...),而 ESB 通常有标准格式(通常只是 SOAP。)

此外,我一直在阅读该集线器和辐条与 ESB 相比引入了单点故障。那么物理部署是这里的区别吗?一个集线器有所有可能的端点,而 ESB 有跨多个集线器部署的端点?所以 ESB 只是多个集线器(因为需要更好的词)?

任何人都可以帮我解决这个问题吗?

0 投票
1 回答
2208 浏览

sql - Apache Camel 的幂等消费者模式是否可扩展?

我正在使用 Apache Camel 2.13.1 来轮询一个数据库表,其中包含超过 300k 行。我正在寻找使用幂等消费者 EIP来过滤已处理的行。

不过,我想知道该实现是否真的可扩展。我的骆驼背景是: -

似乎每 10 秒(通过 consumer.delay 参数)处理完整的 300k 行,这似乎非常低效。我希望某种反馈循环作为模式的一部分,以便提供过滤器的查询可以利用已处理的行集。

但是,CAMEL_MESSAGEPROCESSED 表中的 messageid 列的模式为

其中 1908988 是 request.body.ID 我已将 EIP 设置为 key on,因此这不容易合并到我的查询中。

有没有更好的方法使用 CAMEL_MESSAGEPROCESSED 表作为我的 select 语句的反馈循环,以便 SQL 服务器执行大部分负载?

更新:

所以,我后来发现是我的 ognl 代码导致了奇怪的消息 id 列值。将其更改为

已修复它。所以,既然我有一个可用的 messageId 列,我现在可以将我的“来自”SQL 查询更改为

但我仍然认为我正在破坏 Idempotent Consumer EIP。

还有其他人这样做吗?有什么理由不这样做?

0 投票
0 回答
114 浏览

java - OnRedelivery 状态清理

所以我有两个类可以在 Camel 错误处理程序中调用重新传递。我已经将这两个包裹Processors在一个单曲中Processor,因此我可以将单曲设置ProcessoronRedeliveryHandler.

我的问题是,如果onRedeliveryHandler设置了一个需要在路线成功完成后清理的状态,那么有什么好方法呢?

我的路线很复杂,因为成功案例中的消息可能有许多不同的路线。现在我让这些路由中的每一个都调用一个cleanup让处理程序知道成功的路由。这可行,但似乎应该有更好的方法,因为我有两个问题。

首先,如果 redelivery 从未进入,我不需要清理 onRedelivery 状态。

其次,我必须从我的每个成功端点路由手动添加对清理路由的调用。

有没有更好/更标准的方法来做到这一点?

0 投票
1 回答
1190 浏览

java - 骆驼保证交货

我正在使用带有 ActiveMQ 的 Apache Camel,并希望实现有保证的消息传递。

我一直在阅读 Camel in Action 这本书以及 Apache Camel Developer's Cookbook。

我希望这里有人可以在我的方法中为我提供建议。我不是要代码示例。

我设想的实现方式如下:

听起来很容易。但是,我一直在阅读 Camel 中的“死信通道”模式。

我的理解是使用这种模式的实现意味着不是自动将每个(保证的)消息放到我的“GuaranteedMessages”队列中,而是放弃这种方法,而是设置重新传递选项(最大尝试、指数延迟、重新传递延迟等) . 然后,我依靠 Camel 尝试重新交付,如果它永远无法通过,我只需将其放入死信通道延迟中即可。

然后,我将有一个单独的路由,使用这个死信队列作为它的源。同样,这将是相同的模式。如果无法成功,则将消息发送回死信队列。

这听起来像是生产系统的现实实现吗?

相反,如果我决定将每条传入消息(需要保证)放在我自己的“GuaranteeMessage”队列中,那么相信我以后可以手动从队列中删除该特定消息是否现实?我的理解是我必须手动浏览队列,遍历任意数量的消息,然后手动使用该消息。我不确定这种架构的可扩展性到底有多大。

0 投票
1 回答
206 浏览

java - 哪种企业集成模式可用于两个应用程序之间的可扩展集成?

我们有两个应用程序 - 一个是开放给消费者浏览和购买产品。该产品是在线课程,为了响应客户订单,他们会获得一个帐户来登录其他应用程序的凭据,他们可以在其中登录并使用该课程。

现代,当消费者下订单时,应用程序向另一个应用程序 Web 服务提交 SOAP,该应用程序 Web 服务为客户创建所需的凭证,并作为响应告诉另一个人订单“已成功处理”,并且打印收据,其中总是有指向的链接无缝登录到其他系统。

这种集成存在一些问题:

  1. 如果维护通过 Web 服务接收订单并创建凭据的其他系统,直到所有销售停止
  2. 无容错 - 假设所有系统节点不可用,或者由于一些间歇性网络问题,两个系统都无法通信或 Web 服务无法与数据库服务器通信,然后订单开始失败
  3. 需要改进交易管理
  4. 需要改进异常管理

并且,改进的愿望:

  1. 具有订单网络服务的门户网站的维护期不影响订单。相反,订单开始排队,一旦门户恢复运行,所有排队的订单都开始处理
  2. 创建客户凭证的(门户)Web 服务中的订单交易应围绕明确定义的交易(设计)模式构建
  3. 良好的异常处理,可以改善两个系统之间的通信

最后,两个系统集成都得到了改进,最重要的问题是订单失败完全得到解决。

我对 EIP 或消息服务或面向服务的架构不太熟悉。我也没有太多时间来构建我的概念,然后准备解决问题​​的解决方案。我已经开始阅读所有这些主题,但我需要一些快速的帮助,或者更好地提出一个架构解决方案来解决这个问题,并使这种集成更具可扩展性和可靠性。

谢谢。

0 投票
1 回答
915 浏览

spring - 入站文件适配器 + 集群环境

我在集群中的两个节点上部署了一个 spring 集成应用程序。他们轮询单个目录(入站文件适配器)上的传入文件。如果一个文件被一个节点拾取并处理,有时另一个节点会抛出以下异常,通过尝试拾取相同的文件。

错误 org.springframework.integration.handler.LoggingHandler - org.springframework.integration.MessageHandlingException:无法将消息有效负载写入文件.....原因:java.io.FileNotFoundException:/somedir/dir/file.txt(否这样的文件或目录)

我知道轮询/聚类等已在各处进行了很多讨论。确实在任何地方都找到了准确的解释。我正在尝试清理它并保持日志更清洁。提前谢谢。入站文件适配器中是否有任何简单的配置来防止这种情况。

0 投票
1 回答
193 浏览

java - 什么 Camel DSL 适合消息处理模式?

我有一种情况,我需要应用程序将消息发送到消息代理。然后,另一个监听代理的客户端必须使用队列中的消息,确定它们是什么类型的消息,并将消息传递给适当的处理程序。

例如,如果FizzPOJO 被序列化为 JSON,然后发送到代理,则其他进程必须使用它,将它从 JSON 反序列化回Fizz实例,然后知道将其传递FizzFizzHandler处理器。消息也一样Buzz:它应该被反序列化回 aBuzz并发送到BuzzHandler等。

我相信路由的伪代码应该是这样的:

相信动态路由器是解决这个问题的合适处理器,但不是 EIP 专家,我可能不适合我。

这里有两个大问题:

  • Camel-GSON 怎么知道一种类型的 JSON 代表一个Fizz对象,而另一种类型的 JSON 代表一个Buzz对象?
  • 应该使用什么 EIP/Camel DSL/处理器将反序列化消息路由到正确的处理程序?
0 投票
1 回答
106 浏览

apache-camel - 在 Apache Camel 中将更改日志转换为实际状态

我有两个系统,分别称为 A 和 B。当 A 中的某些重要对象发生变化时,A 通过 Apache Camel 将其发送给 B。但是,我遇到过一种情况,当 A 实际上具有对象的更改日志时,而 B 必须仅反映对象的实际状态。此外,A 中的更改日志可以包含“未来”记录。这意味着,该对象的状态更改被安排在未来的某个时刻。系统 A 的用户可以编辑此更改日志、删除更改记录、添加具有任何时间戳(过去和将来)的新更改记录,甚至更新现有更改。当然,A 将这些更改记录发送给 B,但 B 只需要对象的实际状态。

请注意,我可以从 A 查询对象,但 A 是一个性能关键系统,因此我不打算查询某些内容,因为它会导致额外的负载。此外,用于从 A 查询数据的 API 过于复杂,我想尽可能避免使用它。

我可以在这里看到两个问题。首先是意识到变更日志记录中的特定变化是否会导致实际状态的变化。我要将更改日志存储在中间数据库中。随着更改日志记录的到来,我将在中间数据库中添加/删除/更新它,然后计算对象的实际状态并将此状态发送给 B。

其次是跟踪变更计划。除了以固定的时间间隔(比如 15 分钟)运行定期作业之外,我什么都不能发明。此作业将扫描从上次调用到当前调用的时间间隔内的所有记录。

我喜欢 Apache Camel 的原因是它基于组件的方法,当您只需要连接端点并完成所有工作时,只需少量编码。在 Apache Camel 和 EIP 中是否有任何预先存在的原语来解决这个问题?