spring cloud data flow demo

本文详细介绍如何使用Spring Cloud Data Flow进行环境配置、构建DataFlowServer与DataFlowShell、创建并部署Streams与Tasks等关键步骤。
摘要由CSDN通过智能技术生成

一.环境准备

a)Java1.8及以上
b)关系型数据库用来存储stream task和程序的状态(默认使用内嵌的H2)
c)Redis
d)Message broker (rabbitMq,kafka)
e)Maven
f)为了方便spring组件的使用建议使用(sts),以下操作基于sts

二.Data Flow Server

Spring Cloud Data Flow 支持多种运行环境(Cloud Foundry 、Apache YARN 、Kubernetes 、Apache Mesos、Local Server for development )本例中使用spring 的 LocalServer.
    1.新建一个spring start project 
    2.输入项目信息
    3.选择spring版本及项目依赖
        Boot version : 1.4.4
        项目依赖选择 Local Data Flow server
        选下一步等待maven包及项目构建完成
    4.在 spring boot main class上添加@EnableDataFlowServer 注解
        @EnableDataFlowServer
        @SpringBootApplication
        public class DfServerApplication {

            public static void main(String[] args) {
                SpringApplication.run(DfServerApplication.class, args);
            }
        }
    5.现在Data Flow服务器就搭建好了 (需要redis的支持)
    6.然后到项目路径下边 执行 mvn spring-boot:run 服务器以端口9393启动

三.Data Flow shell

a)项目构建与Data Flow Server一致 
b)第三步选择依赖的时候选择 data flow shell
c) 修改代码添加@EnableDataFlowShell注解
    @EnableDataFlowShell
    @SpringBootApplication
    public class DfShellApplication {

        public static void main(String[] args) {
            SpringApplication.run(DfShellApplication.class, args);
        }
    }
d) 项目路径下执行 mvn spring-boot:run
dataflow config server http://localhost:9393
若server 在本地 且 已经启动则会直接连接。

四.创建streams

a)创建source
    i.项目创建与server一致
    ii.第三步选择依赖的时候选择 stream rabbit(若你使用的是kafka 择选择kafka)
    iii.修改代码
        @EnableBinding(Source.class)
        @SpringBootApplication
        public class LoggingSourceApplication {
            @Bean
            @InboundChannelAdapter(
              value = Source.OUTPUT, 
              poller = @Poller(fixedDelay = "10000", maxMessagesPerPoll =         "1")
            )
            public MessageSource<Long> timeMessageSource() {
                System.out.println(new Date() +"======================logging-source========================== execued");
                return () -> MessageBuilder.withPayload(new Date().getTime()).build();
            }

            public static void main(String[] args) {
                SpringApplication.run(LoggingSourceApplication.class, args);
            }
        }
    iv.到项目路径 执行mvn clean install
b). 创建processor
    i.所有步骤跟source一样
    ii.代码修改
            @EnableBinding(Processor.class)
            @SpringBootApplication
            public class LoggingProcessorApplication {

                @Transformer(inputChannel = Processor.INPUT, 
                          outputChannel = Processor.OUTPUT)
                        public Object transform(Long timestamp) {

                            DateFormat dateFormat = new                                             SimpleDateFormat("yyyy/MM/dd hh:mm:yy");
                            String date = dateFormat.format(timestamp);
                            System.out.println(date +                           "------------------------------logging-proccessor-------------------------------  executed");
                            return date;
                        }
                public static void main(String[] args) {
                    SpringApplication.run(LoggingProcessorApplication.class, args);
                }
            }
c). 创建sink
i.所有步骤跟source创建一样
ii.代码修改
        @EnableBinding(Sink.class)
        @SpringBootApplication
        public class LoggingSinkApplication {

            @MessageEndpoint
            public static class LoggingMessageEndpoint {
                @ServiceActivator(inputChannel = Sink.INPUT)
                public void logIncomingMessages(@Payload String msg,                    @Headers Map<String, Object> headers) {
                    System.out.println("logging-sink**************"+                        msg);
                    headers.entrySet().forEach(e ->                                 System.out.println(e.getKey() + '=' + e.getValue()));
                }
            }
            @StreamListener(Sink.INPUT)
            public void loggerSink(String date) {
                System.out.println("logging-sink Received: " + date);
            }
            public static void main(String[] args) {
                SpringApplication.run(LoggingSinkApplication.class, args);
            }
        }

五.注册Stream app

执行 app register --name “demo” --type type --uri maven://<groupId>:<artifactId>[:<extension>[:<classifier>]]:<version>
注册完毕后 可执行 app list 查看注册列表

六.创建stream并部署

1.创建stream
执行stream create --name “name”  --definiation ‘a | b | c’
然后执行 stream list 就可以看到刚才定义的stream
2.部署stream
执行命令 stream deploy --name ‘name’

七.创建Task

a)项目创建步骤同source
b)第三步选择依赖时选择 Cloud Task
c).修改相关代码
@EnableTask
@EnableBatchProcessing
@SpringBootApplication
public class MyTaskApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyTaskApplication.class, args);
    }
}
创建jobConfiguration
@Configuration
public class JobConfiguration {
    private static Log logger
    = LogFactory.getLog(JobConfiguration.class);

  @Autowired
  public JobBuilderFactory jobBuilderFactory;

  @Autowired
  public StepBuilderFactory stepBuilderFactory;

  @Bean
  public Job job() {
      return jobBuilderFactory.get("job")
        .start(stepBuilderFactory.get("jobStep1")
        .tasklet(new Tasklet() {

            @Override
            public RepeatStatus execute(StepContribution contribution, 
              ChunkContext chunkContext) throws Exception {

              logger.info("my Job was run");
              return RepeatStatus.FINISHED;
            }
      }).build()).build();
  }
}
d).到项目路径下执行 mvn spring-boot:run

八.部署task

a)注册app
    app register --name my-job --type task --uri maven://<groupId>:<artifactId>[:<extension>[:<classifier>]]:<version>
    执行app list可以看到注册的task程序
b).创建task
    task create myjob --difination ‘appname’
    task list 可以看到刚刚创建的 task
c).运行task
    task launch ‘taskname’
    然后执行 task execution list 就可以看到执行过的task

具体文档加图示 可下载文档查看

spring cloud data flow demo

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值