如何配置 Spring 集成?

How to configure Spring Integration?

我有spring-整合-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/integration" //etc. >

<channel id="inputChannel"/>

<channel id="outputChannel">
    <queue capacity="10"/>
</channel>

<service-activator input-channel="inputChannel"
                   output-channel="outputChannel"
                   ref="gmailWorker"
                   method="getGmailMessage"/>

<beans:bean id="gmailWorker" class="GmailWorker"/>

配置:

@Configuration
@ImportResource("classpath:spring-integration-config.xml")
public class PropertiesConfig {
}

GmailWorker:

public class GmailWorker{
public static Message getGmailMessage(Gmail service,String messageId) throws IOException {
    Message gmailMessage = service.users().messages().get("me", messageId).execute();
    return gmailMessage;
}
}

现在我不使用 InputChannel bean。但是我的应用程序没有部署在 tomcat 上,日志为:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.integration.config.ConsumerEndpointFactoryBean#0': 
Cannot resolve reference to bean 'org.springframework.integration.config.ServiceActivatorFactoryBean#0' while setting bean property 'handler'; 
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.integration.config.ServiceActivatorFactoryBean#0':
FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: 
Target object of type [class GmailWorker] has no eligible methods for handling Messages.

如何配置Spring集成?以及如何在应用程序中使用inputChannel

您的 POJO 方法看起来不适合 Spring 集成运行时方法调用引擎。

任何 Spring 集成组件处理 Message object,它具有 headerspayload 属性。

当它调用 POJO 方法时,它期望该方法有一些受限制的参数集:

  • 整个Message
  • 任何其他可以被视为 payload 的类型,如果在这件事上有一些适当的 converter
  • @Header 作为 MessageHeaders
  • 中某些 header 的请求
  • Map<String, Object> as whole set ofMessageHeaders`
  • 如果你想处理 payload 和一些 header,你可以用 @Payload@Headers 等标记参数。

更多信息是 here