S
S
Spring 实战(第五版)
搜索文档…
S
S
Spring 实战(第五版)
Spring 实战(第 5 版)
第一部分 Spring 基础
第 1 章 Spring 入门
第 2 章 开发 Web 应用程序
第 3 章 处理数据
第 4 章 Spring 安全
第 5 章 使用配置属性
第二部分 集成 Spring
第 6 章 创建 REST 服务
第 7 章 调用 REST 服务
第 8 章 发送异步消息
第 9 章 集成 Spring
9.1 声明简单的集成流
9.2 探索 Spring Integration
9.2.1 消息通道
9.2.2 过滤器
9.2.3 转换器
9.2.4 路由
9.2.5 分割器
9.2.6 服务激活器
9.2.7 网关
9.2.8 通道适配器
9.2.9 端点模块
9.3 创建 Email 集成流
9.4 总结
第三部分 响应式 Spring
第 10 章 Reactor 介绍
第 11 章 开发响应式 API
第 12 章 响应式持久化数据
第四部分 云原生 Spring
第 13 章 服务发现
第 14 章 配置管理
第 15 章 处理失败和时延
第五部分 部署Spring
第 16 章 使用 SpringBoot Actuator
第 17 章 管理 Spring
第 18 章 使用 JMX 监控 Spring
第 19 章 部署 Spring
由
GitBook
提供支持
9.2.1 消息通道
消息通道意指消息移动的集成管道移动。它们是连接 Spring Integration 所有其他部分的管道。
Spring Integration 提供了多个管道的实现,包括以下这些:
PublishSubscribeChannel —— 消息被发布到 PublishSubscribeChannel 后又被传递给一个或多个消费者。如果有多个消费者,他们都将会收到消息。
QueueChannel —— 消息被发布到 QueueChannel 后被存储到一个队列中,直到消息被消费者以先进先出(FIFO)的方式拉取。如果有多个消费者,他们中只有一个能收到消息。
PriorityChannel —— 与 QueueChannel 类似,但是与 FIFO 方式不同,消息被冠以 priority 的消费者拉取。
RendezvousChannel —— 与 QueueChannel 期望发送者阻塞通道,直到消费者接收这个消息类似,这种方式有效的同步了发送者与消费者。
DirectChannel —— 与 PublishSubscribeChannel 类似,但是是通过在与发送方相同的线程中调用消费者来将消息发送给单个消费者,此通道类型允许事务跨越通道。
ExecutorChannel —— 与 DirectChannel 类似,但是消息分派是通过 TaskExecutor 进行的,在与发送方不同的线程中进行,此通道类型不支持事务跨通道。
FluxMessageChannel —— Reactive Streams Publisher 基于 Project Reactor Flux 的消息通道。(我们将会在第 10 章讨论 Reactive Streams、Reactor 和 Flux)
在 Java 配置和 Java DSL 样式中,输入通道都是自动创建的,默认是 DirectChannel。但是,如果希望使用不同的通道实现,则需要显式地将通道声明为 bean 并在集成流中引用它。例如,要声明 PublishSubscribeChannel,需要声明以下 @Bean 方法:
@Bean
public
MessageChannel
orderChannel
()
{
return
new
PublishSubscribeChannel
();
}
然后在集成流定义中通过名称引用这个通道。例如,如果一个服务 activator bean 正在使用这个通道,那么可以在 @ServiceActivator 的 inputChannel 属性中引用它:
@ServiceActovator
(
inputChannel
=
"orderChannel"
)
或者,如果使用 Java DSL 配置方式,需要通过调用 channel() 方法引用它:
@Bean
public
IntegrationFlow
orderFlow
()
{
return
IntegrationFlows
...
.
channel
(
"orderChannel"
)
...
.
get
();
}
需要注意的是,如果使用 QueueChannel,则必须为使用者配置一个轮询器。例如,假设已经声明了一个这样的 QueueChannel bean:
@Bean
public
MessageChannel
orderChannel
()
{
return
new
QueueChannel
();
}
需要确保将使用者配置为轮询消息通道。在服务激活器的情况下,@ServiceActivator 注解可能是这样的:
@ServiceActivator
(
inputChannel
=
"orderChannel"
,
poller
=
@Poller
(
fixedRate
=
"1000"
))
在本例中,服务激活器每秒(或 1,000 ms)从名为 orderChannel 的通道轮询一次。
以前
9.2 探索 Spring Integration
下一个
9.2.2 过滤器
最近更新
2yr ago
复制链接