【问题标题】:Design question on dynamic Apache camel routes/context关于动态 Apache 骆驼路线/上下文的设计问题
【发布时间】:2011-06-13 21:58:54
【问题描述】:

我们有 ActiveMQ,系统中发生的事件会发布到它上面。该项目涉及用户将实体添加到他们的监视列表中,每当这些实体发生事件时,我希望向感兴趣的参与者发送一封电子邮件。

该用例大致可以转化为某人对目录上的产品信息页面表示兴趣,并且每当该产品发生任何活动时都会发送一封电子邮件(价格下降,有正面评价等)。我将这种交互建模为骆驼路线。

因此,例如,如果用户在此产品的评分等于 5 时向我发送电子邮件,则以下路由将添加到骆驼上下文中:

from("activemq:topic:events.product.save").filter().xpath("/object[<object id>]/rating").isEqualTo("5").to("email:<user's email>")

类似地,如果用户希望在产品有新评论时收到通知,则会创建另一条路线,依此类推。当每个用户开始添加他们感兴趣的手表时,这最终可能会创建数千条路线。

我的一些问题是:

  • 这是一种可接受的创建动态路由的方式吗?我正在考虑的一种选择是使用收件人列表。但是我还没有想出一个解决方案,它可以优雅地将消息路由到将返回收件人列表的 bean。例如,对于上面解释的情况,bean 是否会有一堆 if-else 来查看要返回哪个收件人列表?

  • camelcontext 具有从 xml 文件加载路由的方法,但没有持久化现有路由的方法。保持这些动态创建的路由最简单(和有效)的方法是什么? camel-users list 中的这个帖子总结了我的要求。

【问题讨论】:

    标签: apache-camel eip


    【解决方案1】:

    鉴于订阅要求的动态特性,您应该使用数据库来存储信息,而不是尝试创建动态路由。这是一种更具可扩展性/更合适的技术使用......

    那么您只需要一个静态路由或一个POJO consumer(见下文)就可以使用简单的 POJO bean 处理产品更新消息(bean-binding 可以提供帮助等)。然后 POJO bean 将负责查询数据库以查找所有“感兴趣的”用户并使用 camel-mail 发送电子邮件

    public class NotificationBean {
    
        @Consume(uri="activemq:topic:events.product.save")
        public void onUpdate(@XPath("/object/id") String id, 
                             @XPath("/object/rating") String rating) {
            //query database for subscriptions for this product ID/rating, etc.
            //for each interested subscriber
                //send email (camel-mail, etc)
        }
    
        public void addSubscription(String productID, Integer rating, String email) {
            //create/update subscription entry in database, etc...
        }
    }
    

    【讨论】:

    • 谢谢。你给了我一些信息和指导。欣赏它。
    猜你喜欢
    • 1970-01-01
    • 2018-09-05
    • 2017-11-19
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    相关资源
    最近更新 更多