我要尝试使用Spring Cloud Stream(redis)

首先

我最近试用了新的Spring Cloud Stream。首先从Redis开始使用示例。由于Spring Cloud Stream的快速入门没有成功,所以我尝试使用IntelliJ的Spring Initializr。

环境

    • Mac

 

    • IntelliJ

 

    redis(適当にインストールしておく)

步骤 (bù

使用IntelliJ创建项目

利用昨天介绍的IntelliJ的Spring Initializr功能。

请打开创建项目菜单。

image

从左侧窗格中选择“Spring Initializr”,然后点击“Next”按钮。

image

随意给「Name」取个名字,然后点击「Next」按钮。

image

在「依赖关系」中选择“,然后点击“下一步”按钮。

image

请随意输入“项目名称”,然后点击“下一步”按钮。

image

当Gradle的设置界面出现后,请点击“确定”按钮。

image

项目完成了

image

试着以默认状态启动

启动Redis

image

启动由IntelliJ自动生成的”SpringCloudDemoApplication”。

image

如果启动时没有出现错误,就可以了。

image

运行示例

从Spring Cloud Stream的GitHub示例中获取可以使用的源代码。

携带Source样本来

Spring Cloud Stream的Source在输入信息方面起到了作用,简而言之就是将信息输入到Redis中。
将以下3个source示例复制到自动生成的SpringCloudDemoApplication.java所在的同一个包中。

    • DateFormat.java

 

    • TimeSource.java

 

    TimeSourceOptionsMetadata

从GitHub上克隆

cd /tmp
git clone https://github.com/spring-cloud/spring-cloud-stream.git

使用Finder工具,将三个文件复制并粘贴到IntelliJ的SpringCloudDemoApplication.java文件所在的相同包中。

image

将其复制到IntelliJ开发环境中

image

将application.properties重命名为yml。

因为样本是以yml形式提供的,所以需要将自动生成的application.properties更改为application.yml。

右键点击文件,选择「重构」或「重命名」。

image

在application.yml中将名称更改为”Refactor”,然后点击”Refactor”按钮。

image

将示例的application.yml文件内容复制并粘贴到我重命名的项目的application.yml文件中。

server:
  port: 8080
fixedDelay: 5000
spring:
  cloud:
    stream:
      bindings:
        output:
          destination: testtock
          contentType: text/plain
        # uncomment below to use the last digit of the seconds as a partition key
        # hashcode(key) % N is then applied with N being the partitionCount value
        # thus, even seconds should go to the 0 queue, odd seconds to the 1 queue
        #producerProperties:
        #  partitionKeyExpression: payload.charAt(payload.length()-1)
        #  partitionCount: 2

---
spring:
  profiles: extended
  cloud:
    stream:
      bindings:
        output: xformed

解决编译错误

当你简单地复制Source的样本时,会出现无法使用ConfigurationProperties的错误。在Intellj编辑器的顶部会显示类似于Spring Boot Configuration Annotation Processor not in classpath…的错误,同时还会显示打开文档的链接,请点击该链接。

spring-boot-configuration-processor的规定

为了使用自定义注释,configuration-processor需要来解决错误的问题。我修改了build.gradle文件,同时提供以下页面上propdeps-plugin链接的信息。

更改点

    • buildscript.repositoriesにmaven { url ‘http://repo.spring.io/plugins-release’ }を追加

 

    • buildscript.dependenciesにclasspath(“org.springframework.build.gradle:propdeps-plugin:0.0.7”)を追加

configure(allprojects)を追加

compileJava.dependsOn(processResources)を追加
dependenciesにoptional(“org.springframework.boot:spring-boot-configuration-processor”)を追加

buildscript {
    ext {
        springBootVersion = '1.3.0.RELEASE'
    }
    repositories {
        mavenCentral()
        maven { url 'http://repo.spring.io/plugins-release' }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("org.springframework.build.gradle:propdeps-plugin:0.0.7")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot' 

jar {
    baseName = 'demo'
    version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8

configure(allprojects) {
    apply plugin: 'propdeps'
    apply plugin: 'propdeps-maven'
    apply plugin: 'propdeps-idea'
    apply plugin: 'propdeps-eclipse'
}

repositories {
    mavenCentral()
    maven { url "https://repo.spring.io/snapshot" }
    maven { url "https://repo.spring.io/milestone" }
}

compileJava.dependsOn(processResources)

dependencies {
    compile('org.springframework.cloud:spring-cloud-starter-stream-redis')
    optional("org.springframework.boot:spring-boot-configuration-processor")
    testCompile('org.springframework.boot:spring-boot-starter-test')
}


dependencyManagement {
    imports { 
        mavenBom "org.springframework.cloud:spring-cloud-starter-parent:Brixton.M3" 
    }
}


eclipse {
    classpath {
         containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
         containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.7'
}

在这种情况下,重新构建gradle应该能够解决错误。

使用IntelliJ启动”SpringCloudDemoApplication”。

image

也要创建Sink侧。

使得源端将写入 Redis 的时间信息也传输给接收端进行样本处理。

重复之前的步骤,创建一个Sink项目,并复制Sink的示例,以便能够使用它。
※由于步骤相同,故不再重复解释。

image
广告
将在 10 秒后关闭
bannerAds