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

0 投票
1 回答
145 浏览

spring - 在 Spring Intgegration DSL 中连接两个由 JDBC Store 支持的队列通道

我正在尝试连接两个队列通道(由 JDBC 存储支持)。

我试图在这两个通道之间放置不同的结构,但仍然出现如下错误:

原因:java.lang.IllegalArgumentException:发现方法匹配的参数类型不明确 [class java.lang.Void]:[public boolean org.springframework.integration.channel.AbstractPollableChannel.removeInterceptor(org.springframework.messaging.support.ChannelInterceptor) , public org.springframework.messaging.Message org.springframework.integration.channel.AbstractPollableChannel.receive(long), public final void org.springframework.integration.context.IntegrationObjectSupport.setPrimaryExpression(org.springframework.expression.Expression), public void org.springframework.integration.channel.AbstractMessageChannel.setStatsEnabled(boolean),公共无效 org.springframework.integration.channel.AbstractMessageChannel.setMessageConverter(org.springframework.messaging.converter.MessageConverter),公共无效组织。springframework.integration.channel.AbstractMessageChannel.setDatatypes(java.lang.Class ...),公共无效组织org.springframework.integration.channel.AbstractMessageChannel.configureMetrics(org.springframework.integration.support.management.AbstractMessageChannelMetrics) .springframework.integration.context.IntegrationObjectSupport.setComponentName(java.lang.String), public org.springframework.messaging.support.ChannelInterceptor org.springframework.integration.channel.AbstractPollableChannel.removeInterceptor(int), public void org.springframework.integration .context.IntegrationObjectSupport.setMessageBuilderFactory(org.springframework.integration.support.MessageBuilderFactory), public java.util.List> org.springframework.integration.channel.QueueChannel.purge(org.springframework.integration.core.MessageSelector),公共无效 org.springframework.integration.context.IntegrationObjectSupport.setApplicationContext(org.springframework.context.ApplicationContext) 抛出 org.springframework.beans.BeansException,公共无效 org.springframework.integration.context.IntegrationObjectSupport.setBeanFactory(org.springframework.beans .factory.BeanFactory), public org.springframework.expression.Expression org.springframework.integration.context.IntegrationObjectSupport.getExpression(), public void org.springframework.integration.channel.AbstractPollableChannel.setInterceptors(java.util.List), public无效 org.springframework.integration.context.IntegrationObjectSupport.setChannelResolver(org.springframework.messaging.core.DestinationResolver)] 在 org.springframework.util.Assert.isNull(Assert.java:155) ~[spring-core-5.0.1 .RELEASE.jar:5.0.1。发布] 在 org.springframework.integration.util.MessagingMethodInvokerHelper.findHandlerMethodsForTarget(MessagingMethodInvokerHelper.java:776) ~[spring-integration-core-5.0.0.RC1.jar:5.0.0.RC1] 在 org.springframework.integration。 util.MessagingMethodInvokerHelper.(MessagingMethodInvokerHelper.java:379) ~[spring-integration-core-5.0.0.RC1.jar:5.0.0.RC1] at org.springframework.integration.util.MessagingMethodInvokerHelper.(MessagingMethodInvokerHelper.java:225 ) ~[spring-integration-core-5.0.0.RC1.jar:5.0.0.RC1] at org.springframework.integration.util.MessagingMethodInvokerHelper.(MessagingMethodInvokerHelper.java:220) ~[spring-integration-core-5.0 .0.RC1.jar:5.0.0.RC1] 在 org.springframework.integration.handler.MethodInvokingMessageProcessor.(MethodInvokingMessageProcessor.java:60) ~[spring-integration-core-5.0.0.RC1.jar:5.0.0.RC1] 在 org.springframework.integration.handler.ServiceActivatingHandler.(ServiceActivatingHandler.java:38) ~[spring-integration-core-5.0.0.RC1.jar:5.0.0.RC1]在 org.springframework.integration.dsl.IntegrationFlowDefinition.handle(IntegrationFlowDefinition.java:924) ~[spring-integration-core-5.0.0.RC1.jar:5.0.0.RC1] 在 org.springframework.integration.dsl。 IntegrationFlowDefinition.handle(IntegrationFlowDefinition.java:904) ~[spring-integration-core-5.0.0.RC1.jar:5.0.0.RC1] at org.springframework.integration.dsl.IntegrationFlowDefinition.handle(IntegrationFlowDefinition.java:891 ) ~[spring-integration-core-5.0.0.RC1.jar:5.0.0.RC1] at name.karwowski.blazej.integrationdemo2.DemoIntegration.flow(DemoIntegration.java:16) ~[classes/:na] at名称.karwowski.blazej.integrationdemo2。DemoIntegration$$EnhancerBySpringCGLIB$$$f82aadc3.CGLIB$flow$0() ~[classes/:na] at name.karwowski.blazej.integrationdemo2.DemoIntegration$$EnhancerBySpringCGLIB$$f82aadc3$$FastClassBySpringCGLIB$$$ef9b4b0c.invoke() ~[classes /:na] 在 org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-5.0.1.RELEASE.jar:5.0.1.RELEASE] 在 org.springframework.context。 annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:361) ~[spring-context-5.0.1.RELEASE.jar:5.0.1.RELEASE] at name.karwowski.blazej.integrationdemo2.DemoIntegration$$EnhancerBySpringCGLIB$$$f82aadc3 .flow() ~[classes/:na] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_151] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_151] 在 java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_151] 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:155) ~[spring-beans-5.0.1.RELEASE.jar:5.0.1.RELEASE] 。 .. 19个常用框架省略

如何正确连接两个(或更多)队列通道?我需要在它们之间进行一些处理,并允许应用程序在停止时保留消息。

完整的日志和代码示例在 github 上:https ://github.com/blazejkarwowski/integration-test

0 投票
1 回答
463 浏览

spring-integration - ExpressionEvaluatingRequestHandlerAdvice 在 SpelException 的情况下向成功和失败通道发送消息

我在这个帖子的评论部分提出了一些疑问。

在调试应用程序时,我注意到一些可能的代码错误。它们是错误还是功能?

  1. ExpressionEvaluatingRequestHandlerAdvice::evaluateSuccessExp‌​ression中,异常被AdviceMessage发送到后抛出SuccessChannel。这会导致其中的异常有效负载。如果有异常,该方法不应该首先抛出异常吗?
  2. 在同一个类中,propagateOnSuccessEvaluationFailures默认为“false”,这会导致不抛出异常。这反而否定了FailChannel. 我在外部将其设置为“true”。你能解释一下这些背后的思考过程吗?

加里回答说,

我不明白您的第 1 点。对于第 2 点,通常,错误处理程序会处理错误,调用者无需知道存在问题。如果存在,那么通常,错误处理程序流应该抛出一个新异常,以向调用者指示错误处理程序已涉及。布尔值用于您想要处理错误并将原始异常抛出给调用者的罕见实例。

我们可以在这里讨论要点,而不是使该线程混乱。

我认为第 2 点的解释适用于trapException.

为了说明我的观点,我复制了ExpressionEvaluatingRequestHandlerAdvice.

doInvoke,evaluateFailureExpression中调用 ifcallback.execute()evaluateSuccessExpressionthrows 异常。

现在evaluateSuccessExpression,如果在评估时出现任何错误SuccessExpression,则将异常存储在evalResult. SuccessChannel如果已配置,则会发送到。如果propagateOnSuccessEvaluationFailures设置为truethen 只会evaluateSuccessExpression抛出错误。由于它默认设置为“false”,evalResult因此不会被抛出,因此不会被evaluateFailureExpression.

即使propagateOnSuccessEvaluationFailures需要根据其他要求设置为“false”,也应该在将结果发送到SuccessChannel.

0 投票
2 回答
1141 浏览

spring-integration - Spring Integration Java DSL桥轮询两个不同的目录

我有设置文件轮询器/通道适配器,它使用 Java DSL 轮询目录和处理程序集成流。但我没有得到任何参考如何添加另一个目录/通道适配器并桥接到同一个处理程序。这是我的代码。

0 投票
1 回答
3805 浏览

java - 有一些方法可以为 spring 集成 dsl 流生成图表吗?

我有一个正在运行的应用程序,它定义了一些带有入站/出站网关、拆分器、聚合器、路由器等的 spring 集成流......

这些流程都是使用 spring 集成 dsl 和注释创建的……所以没有 XML。

有什么工具可以为它生成 EE 模式图吗?

这个问题表明 Intellij 可以为 xml 配置做到这一点......我想要与 dsl IntegrationFlow 类似的东西

0 投票
0 回答
291 浏览

java - 在 Spring 集成中使用 CachingConnectionFactory 时 JMS 本地事务不起作用

我正在使用 CachingConnectionFactory 为 IBM MQ 缓存我的 JMS 代理连接。即使我抛出显式异常,本地事务下的消息也不会回滚。但是,当我删除缓存并仅使用普通的 JMS 连接工厂时,消息会回滚,以防引发异常。@Gary Russell 指定我们可以简单地抛出异常来回滚事务中的任何消息。 加里的回答

编辑:这是设置我的 JMS 代理的方式:

这是我对 CachingConnectionFactory 的配置:

这是 CachingConnectionFactory 的删除后:

0 投票
1 回答
445 浏览

spring-integration - Spring 集成 - Java DSL 中的 AMQP 推断类型?

我一直在为使用 AMQP 在两个微服务之间设置异步消息传递“铺平道路”。我们希望促进对每个服务使用单独的域对象,这意味着每个服务必须定义自己的跨队列传递的任何对象的副本。

我们Jackson2JsonMessageConverter在生产者和消费者端都使用,并且我们使用 Java DSL 将流连接到队列/从队列连接。

我确信有一种方法可以做到这一点,但它正在逃避我:我希望消费者方忽略__TypeID__从生产者传递的标头,因为消费者可能对该事件有不同的表示形式(而且很可能是在不同的java包中)。

似乎已经完成了一些工作,如果使用注释@RabbitListener,则派生一个inferredArgumentType参数并将覆盖标题信息。这正是我想做的,但我想使用 Java DSL 来做。我还没有找到一种干净的方法来做到这一点,也许我只是错过了一些明显的东西。使用以下 DSL 时派生类型似乎相当简单:

但是,这会导致ClassNotFound异常。到目前为止,我发现解决此问题的唯一方法是设置自定义消息转换器,这需要明确定义类型。

我真的很想得到这个,所以开发人员不必真正处理这个问题。

有没有更简单的方法来做到这一点?

0 投票
1 回答
5317 浏览

spring - Spring集成错误“没有可用的输出通道或replyChannel标头”

我不知道为什么我会得到例外

它只是一个简单的 IntegrationFlow,但不确定我在下面的代码中缺少什么。

我试图接触 Spring Integration,但不知道为什么会出现这个异常。我要做的就是使用 an 从队列中读取inboundAdapter并将其记录到控制台。代码运行良好,但是当我将消息发布到队列时,我得到了这个异常。使用适配器时是否必须指定 areplyChannel或always ?output-channelAmqp

0 投票
2 回答
1291 浏览

java - Spring Integration 窃听直接 MessageChannel 进行测试

我想对两个同样使用 Spring Integration 流的 Spring Boot 应用程序进行集成测试。为了测试我的应用程序,我想检查通过myMessageChannel. 它是在其中一个应用程序的 XML 流中定义的。

如何窃听我的直接消息通道并将消息重定向到 PollableChannel,以便我可以一一阅读它们?我在网上找到的方法都不适合我。

0 投票
1 回答
691 浏览

spring - Spring Integration DSL: Disable double DEBUG logging in AbstractMessageHandler

I'm using the .log() function from Spring Integration DSL and I want to create a log at the DEBUG level. Here is an example:

This works, however, two logging messages are created: the actual logging message Input data: ... and the one from the AbstractMessageHandler:

In AbstractMessageHandler, this.loggingEnabled is set to true by default.

Is it possible to disable the logging in the AbstractMessageHandler but keep the custom log message? I've tried to set the logging level for the AbstractMessageHandler in my application.yml to ERROR, but this did not help.

0 投票
1 回答
200 浏览

java - 在 Spring Integration 中为 ContentEnricher 定义异常的回退行为

我已经用 Spring Integration 定义了一个很好的流程,在名义上它可以按照我的意愿工作。

但是我还没有想出一种方法来定义处理错误的行为(即将输​​入行标记为失败)

这是我得到的错误:

这是我的流程配置(简化):

我原以为我可以在默认的 errorChannel 上得到错误并在那里执行必要的任务,但我还没有找到方法来完成这项工作。

任何想法和帮助都非常感谢!