apache.camel 中交易所的 getIn() 与 getMessage()

getIn() vs getMessage() of an Exchange in apache.camel

我试图了解 apache.camel Exchange 的 getIn() 和 getMessage() 之间的区别。在文档中它说 getIn() return 是入站消息,而 getMessage() return 是当前消息。我的问题是:当入站消息在当前处理器中没有改变时,getIn() 和 getMessage() return 是同一条消息吗?

如果使用 InOnly MEP,方法 getIn()getMessage() return 是 Message 的相同实例。

getMesage()的逻辑很简单。如果交换有关联 out 消息,return out。否则 return in.

在大多数情况下,out 消息不会与 Exchange 关联。在 Apache Camel 3 中 getOut() 已弃用,保留用于边缘情况和组件开发人员的内部使用。鼓励最终用户更喜欢 getMessage() 而不是 getIn()getOut().

Exchange.getIn() 将包含路由的初始消息(例如 Consumer 创建的消息),而 Exchange.getMessage() 将随着消息的转换而随时间变化。

Exchange.getOut()Exchange.setOut(...)Exchange.hasOut() 已被弃用。在它们被弃用之前,我们需要编写如下代码

Message message = exchange.hasOut() ? exchange.getOut() : exchange.getIn();
doStuff(message)

“out”概念已被弃用,取而代之的是 get/set“message”,因此我们现在可以编写类似

的代码
Message message = exchange.getMessage();
doStuff(message)

如果您查看 AbstractExchange.java,您会发现 getMessage() 正在调用旧的已弃用方法

class AbstractExchange implements ExtendedExchange {
    ...
    @Override
    public Message getMessage() {
        return hasOut() ? getOut() : getIn();
    }
    ...
}