请考虑附图中所示的场景:
- 门户(生产者)将向总线发送一些消息,这些消息必须由多个应用程序(消费者)处理——PAYROLLAPP、HELPDESK 等。
- 消费者应用程序的多个实例可能正在运行,这些实例也可以动态添加/删除
- 现在,确保每个应用程序只处理一次消息至关重要,即如果 PAYROLLAPP -1 处理消息,则 PAYROLLAPP -2 不应该处理它;当然,在上图中,HELPDESK-1 必须对其进行处理。简而言之,在多个实例的情况下,只有一个必须处理消息,一次
- 当我搜索答案时,大部分内容都是关于创建一个“选择性消费者”——一个基于某种逻辑接受/拒绝消息的消费者——请注意,不能对显示的应用程序进行任何更改/添加/包装图表; 逻辑必须驻留在管理总线的提供程序中的某个位置
请指导一下。
在 Petter 的回答之后添加更多细节:
- 左侧虚线左侧的项目是“方法” - Pure JMS,ESB,EAI
- 右虚线右侧的项目是“实现”
现在,最重要的部分 - 查询:
- 无论解决方案如何(纯 JMS、ESB、EAI),是否需要实现水平虚线下方的部分(特定于应用程序的队列)?
- ESB(JBoss ESB 等)而不是“纯”JMS(Active MQ 等)的使用如何帮助/阻碍?ESB 是否比“仅限 java”(?)的 JMS 提供任何优势。我很困惑 - 'ESB 或 JMS',即使在引用了这样的线程之后:JMS 和 ESB - 它们是如何相关的?. 它有一个回复说:“JMS 不太适合集成 REST 服务、文件系统、S/FTP、电子邮件、Hessian、SOAP 等,最好使用原生支持这些类型的 ESB 来处理这些服务。例如,如果您有一个进程在午夜转储一个 500MB 的 CSV 文件,并且您希望另一个系统提取该文件、解析 CSV 并导入数据库,这可以通过 ESB 轻松完成 - 而只有JMS 会很糟糕。同样,使用原生支持 HTTP/S 的 ESB 可以更好地集成 REST 服务,以及到多个后端实例的负载平衡/故障转移。” 它只会增加我的困惑!
- 使用 EAI 框架(Apache Camel 等)是完全不同于纯 JMS 或 ESB 方法的方法吗?如果是,如何以及有哪些优点/缺点?
- 有人告诉我,单独使用 ESB 无济于事,需要使用 BPM(或其他什么?)来定义和存储“路由”逻辑——这是真的吗?