【问题标题】:Dynamic dispatching messages design consultation动态调度消息设计咨询
【发布时间】:2011-12-01 15:04:20
【问题描述】:

我有一个设计问题,想提出建议。

我正在使用 Weblogic 11g,EJB3.0

我有一个系统,它的目标是检索消息并将消息发送到几个资源(数据库)。

每条消息都包含信息和目标数据库密钥。

下面是一个流程示例:

我从 Web 服务获得消息和关键目标。我解析消息并通过关键目标将其发送到正确的数据库。

消息有可能包含多个目标数据库。(例如,键“all”表示我应该分派到所有数据库。

如果插入在其中一个资源中失败,则会发生回滚,我重试将重新执行整个操作。

所以现在这是我的问题:

我应该将队列数作为我的资源数吗? (并将每个队列专用于特定资源)

(在这种情况下,我解析每条消息并将其发送到正确的队列,而 MDB 将侦听并插入正确的数据库)

如果我这样做,我将无法使其动态,这意味着每次在未来需要添加/删除新资源时,我会需要打开代码并进行正确的更改。

你们的设计师是怎么想的?我怎样才能更好地动态实现它?

感谢您的帮助 射线。

【问题讨论】:

    标签: java design-patterns jakarta-ee architecture jms


    【解决方案1】:

    我认为为每个目标资源(数据库)使用一个队列很好。只要它们是从配置文件驱动的,您就不需要更改代码来添加和删除这些端点。您的调度程序应该有一个配置,列出每个“目标数据库键”的目标队列。读取监控端点队列的进程/组件同样需要配置,例如 db connect string 或其他。

    现在,添加一个新的资源类型,这需要你修改你的代码。但这是意料之中的。

    【讨论】:

    • 所以你基本上是说配置文件会列出我正在使用的所有队列?你谈论xml/文本文件?有时我还需要在使用属性配置队列时设置不同的注释。不确定它是否可以动态编写。
    • 如果你真的不能使用配置,因为配置和写入队列的代码是完全唯一的(你能发现我的疑问吗:))那么我会将该代码推送到 QueueConfigurator 类(或而是子类)可以动态加载,加载配置器所需的信息应该存储在配置文件中。这样你就可以在不重新编译基础的情况下加入新的队列支持。
    • 我明白了。还有一件事。我知道我不能完全避免“接触”代码,因为将来添加新的目标数据库密钥时,我需要对新数据库所需的代码实现不同的插入和逻辑。您如何建议我有效地设计代码,以便添加新的“队列隧道”会很舒服。以一种可插拔的方式。谢谢。
    • 理想情况下,您的配置可以存储插入 SQL、msg 字段等,以便在接收消息时,q-to-db 处理程序只需读取 msg,查找 db 连接信息,查找要使用的基本 SQL,查找 msg 到列的映射,将它们应用于 SQL,然后执行语句。
    猜你喜欢
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多