Add support for @EnableModule, @Input and @Output

* enable the component model based on @EnableModule with existing functionality
* any field annotated with Input/Output will trigger the creation and injection of a channel
* update examples and tests
* update README
This commit is contained in:
Marius Bogoevici
2015-07-09 12:01:44 -04:00
committed by Mark Fisher
parent 2fa5724cee
commit 23e4cbc7ac
25 changed files with 299 additions and 149 deletions

View File

@@ -18,27 +18,26 @@ package config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.cloud.streams.annotation.EnableModule;
import org.springframework.cloud.streams.annotation.Input;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.MessageEndpoint;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.messaging.MessageChannel;
/**
* @author Dave Syer
* @author Marius Bogoevici
*
*/
@Configuration
@MessageEndpoint
public class ModuleDefinition {
@EnableModule
public class LoggerSink {
private static Logger logger = LoggerFactory.getLogger(ModuleDefinition.class);
private static Logger logger = LoggerFactory.getLogger(LoggerSink.class);
@Bean
public MessageChannel input() {
return new DirectChannel();
}
@Input
private MessageChannel input;
@ServiceActivator(inputChannel="input")
public void loggerSink(Object payload) {

View File

@@ -2,14 +2,13 @@ package demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.streams.EnableChannelBinding;
import org.springframework.cloud.streams.annotation.EnableModule;
import org.springframework.context.annotation.ComponentScan;
import config.ModuleDefinition;
import config.LoggerSink;
@SpringBootApplication
@EnableChannelBinding
@ComponentScan(basePackageClasses=ModuleDefinition.class)
@ComponentScan(basePackageClasses = LoggerSink.class)
public class SinkApplication {
public static void main(String[] args) throws InterruptedException {

View File

@@ -2,12 +2,12 @@ package demo;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.streams.EnableChannelBinding;
import org.springframework.cloud.streams.annotation.EnableModule;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.annotation.PropertySource;
@SpringBootApplication
@EnableChannelBinding
@EnableModule
@ImportResource("classpath:/config/ticker.xml")
@PropertySource("classpath:/config/ticker.properties")
public class ModuleApplication {

View File

@@ -20,6 +20,8 @@ import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.streams.annotation.EnableModule;
import org.springframework.cloud.streams.annotation.Output;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.InboundChannelAdapter;
@@ -31,21 +33,20 @@ import org.springframework.messaging.support.GenericMessage;
/**
* @author Dave Syer
*
* @author Marius Bogoevici
*/
@Configuration
@EnableModule
public class ModuleDefinition {
@Value("${format}")
private String format;
@Bean
public MessageChannel output() {
return new DirectChannel();
}
@Output
public MessageChannel output;
@Bean
@InboundChannelAdapter(value = "output", autoStartup = "false", poller = @Poller(fixedDelay = "${fixedDelay}", maxMessagesPerPoll = "1"))
@InboundChannelAdapter(value = "output", autoStartup = "false",
poller = @Poller(fixedDelay = "${fixedDelay}", maxMessagesPerPoll = "1"))
public MessageSource<String> timerMessageSource() {
return () -> new GenericMessage<>(new SimpleDateFormat(format).format(new Date()));
}

View File

@@ -2,13 +2,13 @@ package demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.streams.EnableChannelBinding;
import org.springframework.cloud.streams.annotation.EnableModule;
import org.springframework.context.annotation.ComponentScan;
import config.ModuleDefinition;
@SpringBootApplication
@EnableChannelBinding
@EnableModule
@ComponentScan(basePackageClasses=ModuleDefinition.class)
public class SourceApplication {

View File

@@ -18,27 +18,23 @@ package config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.MessageEndpoint;
import org.springframework.cloud.streams.annotation.EnableModule;
import org.springframework.cloud.streams.annotation.Input;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.messaging.MessageChannel;
/**
* @author Dave Syer
*
* @author Marius Bogoevici
*/
@Configuration
@MessageEndpoint
public class ModuleDefinition {
@EnableModule
public class TappingLoggingSink {
private static Logger logger = LoggerFactory.getLogger(ModuleDefinition.class);
private static Logger logger = LoggerFactory.getLogger(TappingLoggingSink.class);
@Bean
public MessageChannel input() {
return new DirectChannel();
}
@Input
public MessageChannel input;
@ServiceActivator(inputChannel="input")
public void loggerSink(Object payload) {

View File

@@ -2,14 +2,14 @@ package demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.streams.EnableChannelBinding;
import org.springframework.cloud.streams.annotation.EnableModule;
import org.springframework.context.annotation.ComponentScan;
import config.ModuleDefinition;
import config.TappingLoggingSink;
@SpringBootApplication
@EnableChannelBinding
@ComponentScan(basePackageClasses=ModuleDefinition.class)
@EnableModule
@ComponentScan(basePackageClasses= TappingLoggingSink.class)
public class TapApplication {
public static void main(String[] args) throws InterruptedException {