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

在Apache Camel中,如果一个endpoint不存在,我如何接收一个错误?

杨凌
2023-03-14

我们使用Camel fluent构建器来设置一系列复杂的路由,其中我们使用RecipientList功能使用动态路由。

我们遇到过这样的问题:在某些情况下,收件人列表包含不存在的消息传递endpoint(例如,seda: not有之类的东西)。

一个简单的例子是这样的:

from("seda:SomeSource")....to("seda:notThere");

我如何配置路由,以便如果交换机尝试路由到一个不存在的endpoint,就会抛出错误?

我正在使用Camel 2.9. x,并且我已经尝试了死信通道和各种错误处理程序实现,(似乎)没有记录错误或警告。

我看到的唯一日志表明Camel正在(试图)向不存在的endpoint发送:

2013-07-03 16:07:08,030|main|DEBUG|o.a.c.p.SendProcessor|>>>> Endpoint[seda://notThere] Exchange[Message: x.y.Z@293b9fae]

提前感谢!

共有1个答案

游高杰
2023-03-14

在这种情况下,所有终结点的行为都不同。

如果您尝试写入不存在的ftp服务器,您肯定会收到错误(连接被拒绝或以其他方式)。

许多endpoint也是如此。

如果 不存在,则会创建 SEDA 队列,并且消息将保留在那里。因此,您的路由实际上发送到“notThere”,并且消息仍将存在,直到应用程序重新启动或有人开始使用来自seda:notThere的消息。这就是 seda 队列的设计方式。如果将 seda 队列的大小设置为 to(“seda:notThere?size=100”),那么如果没有人读取(或读取缓慢),您将在消息 101 和转发时收到异常。

如果你需要确定某个路由正在消耗你的消息,使用“direct”而不是“seda”。你甚至可以有一些中间层来使用seda关于staging的特性和直接知道有一个活跃的消费者的特性(如果从接收者列表发送,可能有用户输入(上帝禁止)。

from("whatever").recipentList( ... ); // "direct:ep1" work, "direct:ep2" throws exception

from("direct:ep1").to("seda:ep1");
from("seda:ep1").doRealStagedStuffHere();
 类似资料:
  • 我正在学习使用Python和Flask的API,我目前正在使用Spotify API,我想从一位艺术家那里获得具有此endpoint的热门曲目:https://api.spotify.com/v1/artists/{id}/Top-tracks,如您所见,我需要艺术家的id来获取他们的Top-tracks,为此我使用了搜索endpointhttps://api.spotify.com/v1/sea

  • 我是JasperReports新手,我已经将插件添加到netbeans IDE中,试图使用表创建报表,我还在iReport设计器中设计了一个表,并将其连接到sql数据库,当我单击预览按钮时,会收到以下警告 Blockquote net.sf.jasperreports.engine.design.jrvalidationexception: 报告 ;design ;not ;valid ;  · 

  • 我正在为未来的公共API编写一个招摇过市的规范,它需要非常详细和干净的文档。是否有方法在swagger中的其他位置引用/链接/指向另一个endpoint。yml文件? 例如,这是我正在努力实现的目标: 我发现没有帮助,因为它只是用引用的内容替换自己。 斯威格能做这种事吗?

  • 问题内容: 在Session类的JavaDoc中,delete方法的描述为: 从数据存储中删除 持久性实例 。该自变量可以是与接收会话相关联的实例,也可以是具有与现有持久状态相关联的标识符的瞬时实例。 我的问题是: 我想删除一个分离对象,可以使用这种方法吗?AFAIK会话首先使对象从分离中持久化,然后执行其操作。我对吗? 如果不确定数据库中是否存在该对象,是否应该使用Session.get()检查

  • 我如何设置文本一段时间,当一个文本将完成然后自动我想在一个活动中显示另一个文本!我可以在Android Studio做吗?如果是,那怎么做? 显示文本 3/4 秒,然后另一个文本将在一个活动中显示

  • 好吧,我遇到了一个错误,我不太清楚为什么,希望您能提供帮助。当我尝试运行它时,会遇到以下问题。 线程“main”java中出现异常。util。java中的NoSuchElementException。util。扫描仪。java上的throwFor(Scanner.java:907)。util。扫描仪。下一步(Scanner.java:1530)在java。util。扫描仪。nextInt(Scan