问题标签 [spring-integration-dsl]
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.
spring - Spring 集成使用和方法验证
目前,我正在测试使用 Spring Integration 将同一个 Spring-Boot 应用程序中的分散模块和服务连接到一个统一的流中,从一个单一入口点开始。
如果可能的话,我正在寻找有关 Spring Integration 的以下说明:
- 下面的代码是使用 DSL 构建流的正确方法吗?
- 在下面的“C”中,我可以将结果冒泡到“B”流吗?
- 使用 DSL 与 XML 是更好的方法吗?
- 我对如何正确“终止”流程感到困惑?
流程概述
在下面的代码中,我只是将一个页面发布到一个目的地。整体流程是这样的。
- 发布者流侦听有效负载并将其拆分为多个部分。
- 内容流过滤掉页面并将它们分成几部分。
- AWS 流订阅并处理该部分。
- 文件流订阅和处理部分。
最终,发布者流程中可能会有其他非常不同类型的消费者,它们不是内容,这就是我将发布者与内容分开的原因。
A)发布流程(publisher.jar):
这是我通过网关发起的“主要”流程。目的是作为开始触发所有发布流程的入口点。
- 接收消息
- 预处理消息并保存。
- 将有效负载拆分为其中包含的各个条目。
- 用其余数据丰富每个条目
- 将每个条目放在输出通道上。
下面是代码:
B) 内容流 (content.jar)
该模块的职责是处理传入的“内容”有效负载(即本例中的页面)并将它们拆分/路由到适当的订阅者。
- 监听发布者输出通道
- 仅按页面类型过滤条目
- 将原始有效负载添加到标头以供以后使用
- 将有效负载转换为实际类型
- 将页面拆分为各个元素(块)
- 将每个元素路由到适当的 PubSub 频道。
至少目前,订阅的流不会返回任何响应——它们应该只是触发并忘记,但我想知道在使用 pub-sub 通道时如何使结果冒泡。
下面是代码:
C) AWS 内容 (aws-content.jar)
该模块是内容特定流的众多潜在订阅者之一。它根据上面发布的路由通道单独处理每个元素。
- 订阅相应的频道。
- 适当地处理动作。
可以有多个具有订阅上述路由输出通道的流的模块,这只是其中之一。
例如,“contentPageChannel”可以调用下面的 flowPageToS3(在 aws 模块中)以及一个 flowPageToFile(在另一个模块中)。
下面是代码:
rest - Spring集成:REST到JMS集成给出超时错误
您好我正在尝试使用 Spring Integration 实现以下流程。公开 REST 服务、操作负载、将更改的负载写入 JMS 并响应 REST 服务。
请求有效负载正在到达队列。但是,REST 服务超时,没有回复。我需要将转换后的有效负载放入队列中,并将其发送到其余服务的响应中。我找不到任何可用的示例。
任何帮助表示赞赏。
spring - 尝试将 JMS 配置重新设计为 Spring Integration:重新交付策略
我的旧配置公开了一个ConnectionFactory
@Bean 类型ActiveMQConnectionFactory
,并通过 activeMQConnectionFactory.setRedeliveryPolicy(..)
.
我发现 Spring Integration DSL 也允许通过 重新传递句柄操作RequestHandlerRetryAdvice
,例如可以使用ExponentialBackOffPolicy
.
我想知道他们是否在较低级别触发相同的代码(不确定它是客户端的东西还是代理的信号东西),如果不是,它们是否等效以及我是否可以安全地替换抽象版本而不会丢失任何可配置性
spring-integration - Spring集成错误的主机头
我们一直在将请求 Host 标头设置为应用程序的 URL 时遇到这个奇怪的问题。这导致外部系统无法处理我们的请求。
这是Spring Integration application
托管在apache 上的调试日志localhost:8082
。现在不要介意内容,但 Content-Type 随后将成为问题:
这是使用 curl 完成的请求:
所以使用 Spring 集成
org.apache.http.wire - http-outgoing-0 >> "host: localhost:8082[\r][\n]"
和卷曲
> Host: localhost:9292
我们可以host
通过设置 outgate 的 header mapper 轻松解决 Spring Integration 中的问题:
handler.setHeaderMapper(new DefaultHttpHeaderMapper());
所以我们能够解决Host
标题的问题,不幸的是,似乎Content-Type
通过浓缩器设置的设置已被忽略并设置为text/plain
而不是application/xml
.
这里似乎有什么问题?我假设这与使用基本的 DefaultHttpHeaderMapper 有关。
这是流程配置片段:
spring - 使用 Java DSL 的 Spring 集成 HTTP 出站网关发布请求
我正在尝试使用休息服务并接收 json 并将其转换为对象列表。但我收到以下错误。我是 EIP 的新手,在 java dsl 中没有很多教程可以做到这一点。我已经配置了 2 个通道,一个用于发送请求,一个用于接收有效负载。
我正在使用带有 Spring Boot 的 SI
网关
申请开始
java - Spring Integration java.lang.IllegalArgumentException:发现不明确的参数类型
尝试向 http 出站网关发送请求时收到以下错误。得到响应后,我将 json 有效负载转换为我读过的其他帖子中的对象列表,这可能是服务激活器或转换器的问题。我仍在尝试处理 EIP 和 SI。
我的配置
我的网关
我试图将有效负载转换为的对象
样本负载响应
spring-integration - spring集成dsl异常处理
我如何处理我们在 .handle 中使用的方法的异常?在下面的代码片段中, processMessage 方法在声明中抛出 Exception (public void processMessage(Message message) throws Exception ) 并且不确定在链接的情况下如何在 dsl 中处理它?在 XML 的情况下,它很容易,因为 XML 不会检查异常,而 IDE 不允许您在 DSL 的情况下进行编译。您能否告知以下代码片段显示异常?
spring-integration - 在 JDK 7 下通过 Java DSL 配置 Spring Integration Aggregator
这是我第一次在 Java 7 下通过 DSL 配置 Spring Integration。我们知道 Lambda 表达式只能在 Java 8 下工作。所以我参考了Spring Integration Java DSL和Spring Integration Java DSL (pre Java 8) 示例:逐行教程使我的配置如下,以收集相同资源的每 100 条消息以发送到远程 RESTful 服务。
但是,配置对我不起作用,它会引发如下异常。
根本原因在 osiuMessagingMethodInvokerHelper$HandlerMethod 方法 generateExpression 中,annotationType 为 NULL 且 parameterType osisMessageGroup 既不是 的子接口Collection
,Collection<Message<?>>
也不是数组,所以表达式会被设置为 '#target.processMessageGroup(payload)'。我想必须添加额外的逻辑块才能正确处理 MessageGroup 类型(不确定)。
由于我的聚合逻辑非常简单,我通过指定 outputExpression 找到了解决方案,如下所示。
到目前为止,变通解决方案对我有用,但我的问题是如果聚合逻辑很复杂,如何配置处理器。
spring-integration - Spring Integration DSL 变压器
我可以在以下问题上获得一些帮助吗:调用转换器将输入对象转换为映射对象并调用处理程序,处理程序缺少之前添加的标头值。为什么将有效负载转换为 Map 对象会丢失所有标头?
如果转换不是映射,则标题中没有问题。
谢谢,湿婆
java - Spring Integration DSL 中的路由
我正在使用以下 IntegrationFlow 表单,我通过以下方式按标题值过滤主题消息:
..或任何一个
但是现在,一个新类型的期望流加入了话题,所以判别器头有一个新的值 Y。所以一个新的过滤器filter(Message.class, filterByHeaderPropertySelector(Y_HEADER, Y_VALUE)
,目标为YMessageHandler
。
我的问题是如何以最小的影响重用基础设施。将过滤器与路由一起使用是理想的,但route
操作似乎并没有以相同的方式内联。也许有更简单/明显的方法?
另外,我应该为每个消息选择器复制适配器吗?将消息选择器放在容器设置中或将其作为集成流程的一部分有什么区别。是否有任何性能损失或集成构建器是否巧妙地优化了它?我的意思是,很可能将选择器放在流上并不能避免解析消息等,而在容器的定义上它只是从头开始过滤它。解决这个问题的最佳方法是什么?