spring-cloud-stream - 将 Spring 云流应用程序 - Chelsea 迁移到 Horsham
问题描述
我正在尝试将 Spring Cloud Stream 应用程序 Chelsea.SR1 迁移到 Horsham。该项目没有 binder,但使用 spring 消息传递和集成来集成自定义源和接收器。
看起来AggregateApplicationBuilder
不再可用了。如何在没有 的情况下绑定源、变压器和接收器AggregateApplicationBuilder
?
或者有没有更好的方法在 Horsham 中实现这一点?我唯一的限制是,我需要使用可轮询的源/消费者。
提前致谢!
pom.xml
<modelVersion>4.0.0</modelVersion>
<artifactId>example-info-processor</artifactId>
<groupId>com.example.streams</groupId>
<version>1.2-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath />
</parent>
<properties>
<spring-cloud.version>Chelsea.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>4.3.17.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.15.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.20.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.24.RELEASE</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
应用
@SpringBootApplication
@ComponentScan(basePackages = {
"com.example.streams",
})
public class ExampleInfoProcessorApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
new AggregateApplicationBuilder(ExampleInfoProcessor.class, args)
.from(ExampleInfoConsumer.class).via(ExampleInfoTransformer.class)
.to(ExampleInfoSink.class).run(args);
}
}
资源
@EnableBinding(Source.class)
public class ExampleInfoConsumer {
@Autowired
private MyConsumer customConsumer;
@InboundChannelAdapter(value = Source.OUTPUT, poller = @Poller(fixedDelay = "30"))
public List<ExampleRecord> consume() {
//Read the available chunk from the source location
.....
return exampleRecordsList;
}
}
变压器
@EnableBinding(Processor.class)
public class ExampleInfoTransformer {
@Transformer(inputChannel = Processor.INPUT, outputChannel = Processor.OUTPUT)
public Map<String, List<ExampleInfo>> transform(List<ExampleRecord> exampleRecords) {
//transform the consumer records, store the list of ExampleInfo objects in a map using ExampleInfo key
return map;
}
}
下沉
@EnableBinding(Sink.class)
public class ExampleInfoSink {
@ServiceActivator(inputChannel = Sink.INPUT)
public void sink(Map<String, List<ExampleInfo>> exampleInfoMap) {
//Read from map and write to destination.
}
}
解决方案
如果你只使用 spring-integration 和 spring-messaging 为什么你有 spring-cloud-stream 作为依赖而不是 spring-integration 这是一个顶级框架?如何在没有的情况下绑定源、变压器和接收器。. . - 源有输出通道,变压器有输入通道。只要输出和输入是相同的通道,您的组件就会连接。但这与 spring-cloud-stream 无关。那是纯粹的弹簧集成。
Chelsea 是一个非常旧的版本(1.x)。我们已AggregateApplicationBuilder
在 2.x 中弃用并在 3.x 中将其删除,以支持功能组合。我们也不再提倡 spring-cloud-stream 的基于注释的配置模型,而是支持基于函数的编程模型。
请阅读我们最近发布的以下帖子:
- https://spring.io/blog/2019/10/14/spring-cloud-stream-demystified-and-simplified
- https://spring.io/blog/2019/10/17/spring-cloud-stream-functional-and-reactive
- https://spring.io/blog/2019/10/25/spring-cloud-stream-and-spring-integration
- https://spring.io/blog/2019/10/31/spring-cloud-stream-event-routing
推荐阅读
- json - SQL Server 插入带有其他外部参数的 JSON 数据
- javascript - 在 HTML 中切换图像隐藏/可见
- android-studio - 如何配置 Android Studio 以识别带有 SystemApi 注释的方法
- javascript - 物化日期选择器仅在单击完成按钮时更新
- omnet++ - 构建venes_inet 失败
- java - 从 Java 中的字符串中过滤非 MySQL Latin1 字符
- sql - 包含重复项的多个字符串
- kubernetes - Apache Camel 与 Kubernetes
- python - Python按最后一个字母和扩展名选择文件
- php - 多个 PHP 标记中的一个 PHP 变量