Apache camel IMAP 同一邮件帐户的多个消费者

Apache camel IMAP multiple consumers of same mail account

我有一个允许动态创建和启动路由的应用程序。例如,用户可以创建从 IMAP 到文件的路由并启动它。

问题:多个路由通过 IMAP 从同一邮件帐户读取。

Caused by: org.apache.camel.FailedToStartRouteException: Failed to start route c1152_route because of Multiple consumers for the same endpoint is not allowed: imap://localhost:3143?delay=1000&password=xxxxxx&searchTerm.fromSentDate=now-24h&searchTerm.unseen=false&username=user@user

我试过两种方法:

1.Creating 从 IMAP 到多个收件人路由的附加单个路由。这个有效,但我不确定这个解决方案。它需要对 starting/stopping 路线进行额外检查,因为很少有路线可能依赖于此路线。

from(imap())
   .recipientList(imapMsgToDirectChannelRouter())

2.Creating 具有唯一 uri 的 IMAP 端点。例如,每条路线都是唯一的 searchTerm.fromSentDate。这个也可以。

这个问题有没有更好的解决办法?

我肯定会选择选项#1(收件人列表)。

我不明白为什么必须停止和启动 'master' 路线(“imap”路线)。 根据您添加或删除的收件人,您将启动和停止相应的子路由,但不会触及主路由。

我正在考虑这样的事情:

from("imap:...")
  .id("master-route")
  .recipientList( simple("bean:computeRecipients") )
  .parallelProcessing();

收件人确切列表的即时计算委托给了某个 bean。 这样,您不必触及“master-route”,而只需让 bean 知道收件人