Apache camel 将apache camel消息类型更改为InOut

Apache camel 将apache camel消息类型更改为InOut,apache-camel,Apache Camel,据我所知,InOut消息是可以从目的地接收响应的消息 但是,我还没有找到任何关于如何将消息转换为InOut类型以及如何从目的地访问响应的示例 例如,给定如下路线: from("direct:start").to("smtps://smtp.gmail.com:465?username=user@gmail.com&password=usrpw&to=address@gmail.com") 如何将路由到smtps组件的消息转换为InOut类型 我是否可以期待smtp组件的响应,

据我所知,InOut消息是可以从目的地接收响应的消息

但是,我还没有找到任何关于如何将消息转换为InOut类型以及如何从目的地访问响应的示例

例如,给定如下路线:

from("direct:start").to("smtps://smtp.gmail.com:465?username=user@gmail.com&password=usrpw&to=address@gmail.com")
  • 如何将路由到smtps组件的消息转换为InOut类型
  • 我是否可以期待smtp组件的响应,例如,指示邮件已成功发送
  • 如何访问此响应
默认情况下,每个“.to(uri)”都在InOut中。下一步中的主体将替换为InOut目标的响应。例如,在HTTP组件中,如果您有以下路由:

from(direct:start)
  .to(http://...)
  .log(INFO, "${body}")
将记录对http调用的响应

如果您在文档中没有找到好的信息,我强烈建议您检查相关制作人的代码,以了解返回的或可以使用的内容

例如,对于SMTP,我没有发现文档说明正文发生了什么,但代码非常清楚:

    public void process(final Exchange exchange) {
    ClassLoader tccl = Thread.currentThread().getContextClassLoader();
    try {
        ClassLoader applicationClassLoader = getEndpoint().getCamelContext().getApplicationContextClassLoader();
        if (applicationClassLoader != null) {
            Thread.currentThread().setContextClassLoader(applicationClassLoader);
        }

        MimeMessage mimeMessage;

        final Object body = exchange.getIn().getBody();
        if (body instanceof MimeMessage) {
            // Body is directly a MimeMessage
            mimeMessage = (MimeMessage) body;
        } else {
            // Create a message with exchange data
            mimeMessage = new MimeMessage(sender.getSession());
            getEndpoint().getBinding().populateMailMessage(getEndpoint(), mimeMessage, exchange);
        }
        if (LOG.isDebugEnabled()) {
            LOG.debug("Sending MimeMessage: {}", MailUtils.dumpMessage(mimeMessage));
        }
        sender.send(mimeMessage);
        // set the message ID for further processing
        exchange.getIn().setHeader(MailConstants.MAIL_MESSAGE_ID, mimeMessage.getMessageID());
    } catch (MessagingException e) {
        exchange.setException(e);
    } catch (IOException e) {
        exchange.setException(e);
    } finally {
        Thread.currentThread().setContextClassLoader(tccl);
    }
}

您的exchange将有一个带有邮件ID(“CamelMailMessageId”)的标头,如果出现任何消息传递异常,将传播该异常。身体似乎没有被触碰过,即使它没有被触碰。

谢谢你的解释