当前位置: 首页 > 知识库问答 >
问题:

Spring集成-Java DSL中的服务激活器

阙弘博
2023-03-14

我在一个简单的POJO中配置了一个服务激活器,我想将其转换为Java DSL。

现在,我的Java DSL如下所示,

public IntegrationFlow inputFlow() {
    return IntegrationFlows.from(inputChannel())
            .log(LoggingHandler.Level.DEBUG, "com.dash.messages")
            .transform(Transformers.fromJson(MessageWrapper.class, customObjectMapper()))
            .channel(theOtherChannel()))
            .get();
  }

有一个带有服务激活器的POJO,

public class MessageProcessor {

  private static final Logger logger = LoggerFactory.getLogger(MessageProcessor.class);

  ....

  @ServiceActivator
  public void handle(MessageWrapper message, @Headers Map<String, Object> headers) {
    logger.debug("Message received: " + message);
    
    // Send message to another system
    ....
  }

}

在XML中,相应的配置如下所示,

<int:service-activator input-channel="theOtherChannel"
        ref="MessageProcessor" output-channel="nullChannel" />
  1. 如何在Java DSL中调用ServiceActivator方法?我正在考虑使用。handle(),但参数应该是什么
  2. 在使用Java DSL时,是否有空通道的概念?如果是,我们如何指定

共有1个答案

万俟玉书
2023-03-14

此变量:

/**
 * Populate a {@link ServiceActivatingHandler} for the
 * {@link org.springframework.integration.handler.MethodInvokingMessageProcessor}
 * to invoke the discovered {@code method} for provided {@code service} at runtime.
 * @param service the service object to use.
 * @return the current {@link BaseIntegrationFlowDefinition}.
 */
public B handle(Object service) {

因此,您只需将消息处理器自动连接到具有该集成流定义的类中,或直接连接到该inputFlow()bean定义。然后您只需执行以下操作:

.channel(theOtherChannel()))
.handle(messageProcessor)
.get();

对于返回类型为void的service activator,无需在nullChannel中使用。不管怎样,当流遇到void或null应答时,它将在该点停止。

查看文档中的更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/dsl.html#java-dsl句柄

 类似资料:
  • 我有一个队列通道和一个带有轮询器的服务激活器,轮询器从该队列中读取数据。我希望配置为“我希望50个线程轮询该队列,每次轮询并返回消息时,在此线程上调用服务激活器指向的服务。” 该服务没有异步注释,但无状态,可以以并发方式安全运行。 下面的方法能做到吗?有没有其他首选的方法来实现这一点?

  • 我有一个Web服务,每个版本将有多个版本和多个类。我想在启动时动态创建服务激活器,这样我就可以减少配置量,从而更容易维护。开发人员可以放入一个新类,SI会自动拾取它。 我编码了一个Application Listener: 稍后在路由器中,我有以下代码: 但当路由器尝试路由时,我会出现以下错误: 我该怎么做?我需要动态创建服务激活器,并在以后将消息路由到这些激活器。 没有办法在ServiceAct

  • 我有一个非常简单的集成流程: 服务激活器调用的方法尝试将消息中的数据与数据库中的某些数据相匹配。如果是,则返回匹配的数据。如果没有,它将返回。 如果我没有设置必需回复为真,那么回复似乎会从集成流中消失,导致服务接口永远不会返回,从而导致应用程序挂起。如果我设置了必需回复为真,我至少会得到一个异常,但是应用程序仍然挂起,因为网关的服务接口永远不会返回: spring集成参考资料中似乎没有记录这种行为

  • 我试图从Spring集成示例中转换“Hello World示例”(https://github.com/spring-projects/spring-integration-samples/tree/master/basic/helloworld)从XML到Java配置(使用注释也是如此)。 配置类如下所示: 为了测试它,我使用示例项目提供的: 我在控制台中看到“Message payload:t

  • 在spring integration (Java DSL)中,如何定义一个完整流程的事务? 通过Spring集成,我们可以定义一个示例流程: 我需要一个跨度整个流程的交易。目前,当我使用“aMessage转换器”访问数据库时,事务将在处理完此消息转换器后关闭。但是我需要一个在处理“另一个消息转换器”时仍未提交的事务? 我希望只需添加一个“@Transactional”(或@Transaction

  • 带有服务工作者的网站,托管https://121eddie.github.io/并在Chrome 66.0中运行。3359.181 /索引。html在每次加载时正确跟踪以下注册 }); 第一次运行时,/serviceWorker。js执行“激活”事件,正确获取缓存名称并缓存文件 在第二次运行时,不会触发“激活”(没有日志跟踪,没有获取)。 在第三次运行中,甚至不再触发“抓取”。这意味着脱机请求不被