问题标签 [integration-patterns]

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 投票
0 回答
235 浏览

apache-camel - Apache Camel 有什么好的轮询策略吗?

我是 Apache Camel 的新手,目前正在阅读 Camel in Action。我正在构建一个系统,它将通过restful webservices接收json消息,我计划将它们转换为acsii文件并通过SFTP将它们传输到另一个系统。问题是响应文件需要 10 多分钟才能返回每个请求,因此我需要提出一个轮询/监控策略来跟踪请求状态。

如果有特定的 EIP 可以处理此类问题,谁能指出我正确的方向?

0 投票
0 回答
41 浏览

service - 连接一个服务的两个版本

生意让我发疯。他们希望我们将一个应用程序连接到同一服务的两个版本。两个版本的服务在某些属性上有所不同。在理想的世界中,使用服务的一个或另一个版本应该只是配置更改

有人知道可以使用什么的好模式吗?或者我应该考虑什么?

0 投票
1 回答
757 浏览

rabbitmq - 消息类型:消息应该包含多少信息?

我们目前开始将事件从一个中央应用程序广播到其他可能感兴趣的消费者应用程序,并且我们团队成员之间对于我们应该在发布的消息中放置多少有不同的选择。

总体思路/架构如下:

  • 生产者应用程序中:
    • 用户与可以创建/修改/删除的一些实体(DDD 意义上的聚合根)交互
    • 根据正在发生的事情,引发域事件(例如:EntityXCreated、EntityYDeleted、EntityZTransferred 等......即不仅是 CRUD,而且主要是)
    • 引发的事件被翻译/转换成我们发送到 RabbitMQ Exchange 的消息
  • RabbitMQ中 (我们使用的是 RabbitMQ,但我相信这个问题实际上与技术无关)
    • 我们为每个消费应用程序定义一个队列
    • 绑定将交换连接到消费者队列(可能使用消息过滤)
  • 消费应用程序中
    • 应用程序使用并处理其队列中的消息

基于企业集成模式,我们正在尝试为我们发布的消息定义规范格式,并且在两种方法之间犹豫不决:

  1. Minimalist messages / event-store-ish:对于领域模型发布的每个事件,生成一条仅包含聚合根的相关部分的消息(例如,当更新完成时,仅发布有关更新部分的信息聚合根,或多或少与最终用户在使用我们的应用程序时所经历的过程相匹配)

    • 优点

      • 小消息大小
      • 非常专业的消息类型
      • 接近“领域事件”
    • 缺点

      • 如果无法保证交货顺序(即如果在创建消息之前收到更新消息怎么办?)
      • 消费者需要知道订阅哪些消息类型(可能需要大列表/领域知识)
      • 如果消费者状态和生产者状态不同步怎么办?
      • 如何处理将来注册但不了解所有过去事件的新消费者
  2. 完全包含的幂等消息:对于域模型发布的每个事件,生成一条包含该时间点聚合根的完整快照的消息,因此实际上只处理两种消息“创建或更新”和“删除”(+元数据,如有必要,提供更具体的信息)

    • 优点

      • 幂等(声明性消息说明“事实就是这样,尽可能同步自己”)
      • 要维护/处理的消息格式数量较少
      • 允许逐步纠正消费者的同步错误
      • 只要结果消息遵循规范数据模型,消费者就会自动处理新的领域事件
    • 缺点

      • 更大的消息负载
      • 不太

你会推荐一种方法吗?

我们应该考虑另一种方法吗?

0 投票
3 回答
196 浏览

java - 集成模式:如何同步从多个系统接收到的处理消息

我正在构建一个系统,它将通过消息代理(当前为 JMS)接收来自不同系统的消息。来自所有发送者系统的所有消息都有一个 deviceId,并且消息的接收没有顺序。例如,系统 A 可以发送 deviceId=1 的消息,系统 b 可以发送 deviceId=2 的消息。

我的目标是不开始处理有关同一 deviceId 的消息,除非我从所有具有相同 deviceId 的发件人那里收到所有消息。

例如,如果我有 3 个系统 A、B 和 C 向我的系统发送消息:

这个问题是否应该通过在我的系统中使用一些同步机制、消息代理或像 spring-integration/apache camel 这样的集成框架来解决?

0 投票
1 回答
227 浏览

spring - 在服务激活器中选择重载方法(Spring Integration)

我定义了一个 serviceActivator :

在 SampleImpl 中,remove 有两种重载方法:

在方法属性中,我想选择不带参数的删除方法( remove() )。在某些情况下,我想选择带参数的删除方法( remove(Object payload) )。我发现总是将有效负载作为参数传递给 remove 方法,那么我怎样才能只选择 remove() ?

0 投票
1 回答
788 浏览

camera - Camel ftp 按需从 ftp 位置获取文件

您好我有一个场景,我通过soap服务调用从远程ftp位置选择文件得到通知。ftp服务器详细信息将相同,但文件夹名称和文件将动态发送,我如何使用apache骆驼实现它。 ? 任何建议或想法可能会有所帮助。

0 投票
1 回答
540 浏览

java - Spring 集成文件支持

在 Spring Integration 中如何防止两台不同的机器在同一个文件中工作?我知道nio library(javaSE) 提供了一种锁定 File FileLocker的机制,但是我如何使用 Spring Integration 来实现它?一个具体的例子将不胜感激。

0 投票
2 回答
216 浏览

java - WatchEventType.DELETE 似乎不起作用

我想做的是跟踪删除的文件并应用某些逻辑(获取 id 并更新实体)。我发现我们可以在通道适配器中传递一个监视事件列表,包括

FileReadingMessageSource.WatchEventType.DELETE

但是当我从文件夹中删除文件时,我看不到任何触发的事件,并且从未应用过转换器

0 投票
2 回答
7003 浏览

java - 如何在 Java 中以同步方式处理异步回调?

我有一个与架构相关的问题。这是一个与语言无关的问题,但由于我来自 Java 背景,如果有人以 Java 方式指导我,对我来说会更容易。

基本上,我正在编写的中间件与基于 SOAP 的第三方服务进行通信。调用是异步的 - 以某种方式,当调用服务时,它会返回响应 01 - 处理;表示第三方已成功收到请求。在原始SOAP请求中,每次都必须提交一个回调URL,由第三方实际发送结果。因此,调用特定服务实际上并不会立即返回结果。结果在中间件中的一个单独的 HTTP 端点中接收。

现在在我们的前端,我们不想让用户体验复杂化。我们希望我们的用户调用一个中间件函数(通过菜单项/按钮),并立即得到结果;并将肮脏的工作留给中间件。

请注意,从前端调用的中间件函数(比如说 X())和第三方推送结果的中间件端点 URL(我们称之为 Y)是完全分开的。X() 必须等待然后获取在 Y 中抓取的结果,然后将结果返回到前端。

在此处输入图像描述

如何构建一个强大的解决方案来实现上述行为?图片完美地描绘了我的情况。任何建议将不胜感激。

0 投票
1 回答
426 浏览

java - Camel Splitters 执行后是否保留交换体?

Java 8 和 Apache Camel 2.19.5 在这里。我有以下 bean 处理器:

以及以下骆驼路线:

如您所见,反序列化的Fizzbuzz实例被发送到FoobarResolverbean 处理器,后者将该实例转换为 a List<Foobar>,然后将每个实例一个接一个地发送Foobaranalyze队列中。至少这就是我设计的意图!

我很好奇的是:分裂之后,交换体变成了什么?它是否“恢复”回Fizzbuzz(这就是我想要的),还是交换体现在List<Foobar>是由FoobarResolver(这不是我想要的)产生的?如果身体现在是List<Foobar>,我怎么能重新配置东西以便FizzbuzzProcessor接收 aFizzbuzz呢?