架构

交换模式

师成师成· 更新于 2026-09-28· 阅读 4 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

交换模式(Exchange Pattern)

在消息传递中,你可以使用两种消息交换模式(MEP)。

在企业集成模式中,它们是:

在 Camel 中,我们有一个 org.apache.camel.ExchangePattern 枚举,可以配置在消息交换的 exchangePattern 属性上,用于指明该消息交换是单向的事件消息(InOnly)还是请求-应答消息交换(InOut)。

交换模式的工作原理

交换模式是路由与组件端点之间的一种契约。它告诉组件调用方是否期望得到应答(InOut)还是不期望(InOnly)。

交换模式不会影响 EIP 和处理器在路由中的工作方式。诸如 setBody、transform、process 和 bean 等处理器始终作用于当前的消息体,而不受交换模式的影响。只有当交换到达对其起作用的生产者端点(即 to 步骤)时,交换模式才起作用。

大多数组件具有固定的交换模式——例如,HTTP 始终为 InOut(请求/应答),而 Kafka 始终为 InOnly(即发即忘)。对于这些组件,交换模式设置不会产生任何效果。

交换模式历来由有限的一组同时支持 InOnly 和 InOut 的组件使用,例如 JMS、SEDA 和 AMQP。这些组件使用该模式在即发即忘和请求/应答消息传递之间进行选择。例如,使用 JMS 时,InOnly 会向队列发送消息而不等待应答,而 InOut 则会设置一个临时应答队列(通过 JMSReplyTo)并等待响应。

例如,要覆盖 JMS 端点上的默认模式,可以在端点 URI 中使用 exchangePattern 参数,如下所示:

jms:myQueue?exchangePattern=InOut

评论

登录后参与评论

正在加载评论…