当前位置: 首页 > 知识库问答 >
问题:

camel:处理消息副本/保存原始消息

唐焕
2023-03-14

通常,我希望将消息发送到另一个路由来处理它,但我不希望为后续步骤修改该消息。做这件事最好的方法是什么?

<from uri="direct:sendEmail"/>
<multicast>
  <pipeline>
    <removeHeaders pattern="*" excludePattern="(?i)to|cc|bcc|from|subject"/>
    <to ref="mailServer"/>
  </pipeline>

  <transform>
    <description>noop route so that multicast returns original message</description>
    <simple>${body}</simple>
  </transform>
</multicast>

我发现的另一个选择是使用异步sedaendpoint,它将原始消息返回给生产者并处理副本,但这会引入异步行为,而异步行为可能并不总是可取的。

看来一定有更好的办法?

共有1个答案

邵阳辉
2023-03-14

您可以查看https://camel.465427.n5.nabble.com/keep-original-message-several-quot-steps-quot-back-td475187.html

基本上,您可以使用exchange.getUnitofWork().getOriginalinMessage();获取原始消息

 类似资料:
  • Storm 通过 Trident 对保证消息处理提供了不同的 level ,包括 best effort(尽力而为),at least once (至少一次)和exactly once(至少一次). 这张页面描述如何保证至少处理一次. What does it mean for a message to be "fully processed"?(一条信息被完全处理是什么意思) 一个 tuple

  • 在下面的示例中,我有两个正在处理来自kafka的消息的服务实例,但我希望确保只在之后处理。 显然,通过将一个实例配置为仅从特定分区消费,可以很容易地解决这种情况,该分区将存储带有公共标识符的消息: 现在顺序得到了保证,将永远不会在之前处理。 但是,我在想这个问题是否可以用另一种方式来解决,直接在代码中而不是依赖基础设施?这看起来可能是微服务架构中的一个标准问题,但我不确定哪种方法是解决它的首选方法

  • 在FLTK中是通过Fl_Widegt::handle(),虚拟函数来处理系统的消息。我们可以查看Fltk的源代码来分析系统是怎样处理一些系统消息的,如按钮的消息处理 /******************************************************* Fl_Button中处理消息的代码,省略了具体的处理代码 *******************************

  • 我正在尝试运行WordCount示例以保证消息处理。 有一个喷口 WSpout-使用msgID发出随机句子 还有两个螺栓 > SplitSentence-在单词中拆分句子并发出锚定 字数计数-打印字数计数。 我想用下面的代码实现的是,当一个句子中的所有单词都计算完毕时。必须确认与该句子对应的喷口。 我向收藏家表示感谢。仅在最后一次bolt WordCount时确认(元组)。奇怪的是ack()的in

  • 我已将此异常处理添加到camel路由。 当我从错误队列中读回此消息时,找不到此标头。您知道如何将错误详细信息与原始消息一起添加到错误队列吗

  • 我在处理spring集成流中的错误时遇到了一个问题。流程的工作方式如下:我的入口点是消息驱动的通道适配器->路由器->过滤器->转换器->服务激活器->数据库。我已经使用自定义消息侦听器容器编写了自己的错误处理程序,它的工作方式与预期一致,但是当我出现异常时,我需要将原始消息保存到数据库中。 问题是,当我从数据库中获得异常时,错误处理策略会重新使用一个MessageHandleException,