JavaCAPS消息关联与组件复用技术解析
立即解锁
发布时间: 2025-08-18 02:27:32 阅读量: 4 订阅数: 5 

Java CAPS 实现企业集成模式基础
### Java CAPS 消息关联与组件复用技术解析
#### 消息关联技术
消息关联在 Java CAPS 中是一项关键技术,它能帮助处理组件仅接收所需的消息。基于 eInsight 的关联利用了 eInsight 引擎的关联功能,确保处理组件只接收必要的消息。若没有 eInsight,就需要采用不同的方式来实现关联。
一般来说,关联组件会接收所有消息,然后确定哪些是感兴趣的,将不感兴趣的消息丢弃或返回给发送者,再把感兴趣的消息传递给处理组件或自行处理。但这种方法存在问题,关联组件会接收所有消息,即便只有一小部分是它感兴趣的,这会带来资源开销和延迟,甚至可能成为瓶颈,还可能导致消息不断重复传递。为解决这个问题,可以让关联组件订阅 JMS 主题,接收所有消息的副本,安全地丢弃不感兴趣的消息,但这又会引入额外的资源需求。理想情况下,关联组件应只接收感兴趣的消息。
消息关联处理包括收集和存储相关消息批次,直到满足批次完成标准,然后将完成的批次提交给处理组件进行处理。使用 eInsight 进行关联时,eInsight 引擎会执行确定消息是否相关的逻辑,eInsight 引擎和 eInsight 业务流程会实现收集、存储、确定完成标准状态和处理消息批次的逻辑。
关联所需的基本功能包括:
1. **确定消息相关性**:判断当前消息是否与已知的其他消息相关,或者隔离并提供必要的数据片段,以便组件进行判断。
2. **存储相关消息批次**:在调用完成批次处理组件之前,存储正在组装的相关消息批次。
3. **确定批次完成并交付处理**:判断批次是否完成,并交付相关消息进行处理。
4. **处理相关消息批次**:对相关消息批次进行处理。
如果不借助 eInsight 引擎的关联功能来开发消息关联解决方案,就需要自己实现必要的关联逻辑。不过,实现一个通用的基于 Java 协作定义(JCD)的关联处理器并非易事,除非开发一个复杂且庞大的 Java 协作来实现所有所需功能。但我们可以使用 JMS 消息服务器和 JCD 重新实现一种消息关系模式。
##### Items - Trailer 关联
下面我们尝试在不使用 eInsight 和其关联功能的情况下,重新实现 Items - Trailer 消息关系模式。
在这个场景中,我们需要收集相关消息,直到收到一个“特殊”的尾消息,表明一批消息已结束。收到尾消息后,我们要处理到目前为止收集的所有消息,并将它们释放给下一个组件进行进一步处理。
假设每个普通消息包含采购订单号、商品编号和要交付的数量,尾消息包含相同的采购订单号、一个虚拟的商品编号和一个用于交叉检查的商品数量。这些消息将被组装成一个包含采购订单号和重复的商品编号及数量组的采购订单。普通消息来自 JMS 目的地 qItemsIn,尾消息来自另一个 JMS 目的地 qTrailerIn。
使用 eGate 和 JMS 消息服务器,我们需要找到一种方法来收集相关商品,并在收到尾消息时触发对相关商品的处理。具体操作步骤如下:
1. **存储商品**:使用一个没有当前接收者/订阅者的 JMS 目的地,所有发送到那里的消息将一直保留,直到过期或被某个组件显式接收。
2. **收集相关商品**:使用 JMS 关联 ID 属性存储相关商品的关联 ID,并使用 JMS 选择器机制检索具有相同关联 ID 的相关商品。
3. **触发处理**:创建一个 Java 协作,由包含关联 ID 的尾消息触发,使用动态构造的包含关联 ID 的选择器表达式从 JMS 队列中检索和处理相关商品。
相关的实现示意图展示了该解决方案中涉及的主要用户开发组件。任何提交到 qItemsIn 和 qTrailerIn 的商品或尾消息都将传递到添加关联 ID 协作,在那里提取采购订单值并分配给 JMS 头属性关联 ID。组装采购订单协作将由尾消息的到达触发,它使用尾消息中的关联 ID 构造动态选择器表达式,创建选择性接收器,从 qItemsInCorr 接收具有匹配关联 ID 的所有消息,将它们组合起来,最后将组合后的消息发送到 qPOOut。
在这个过程中,JMS 消息服务器用于在消息关联期间存储消息和检索相关消息。组装采购订单协作使用选择性接收器接收所有消息并构造采购订单消息,这是关联基础设施的业务部分,根据不同的业务需求对相关消息进行处理,例如组装采购订单消息、汇总商品成本、选择最高出价或最低价格等。
以下是这个过程的 mermaid 流程图:
```mermaid
graph LR
A[qItemsIn/qTrailerIn] --> B[Add Correlation ID 协作]
B --> C[qItemsInCorr]
D[尾消息到达] --> E[Assemble PO 协作]
E --> F[构造动态选择器表达式]
F --> G[创建选择性接收器]
G --> H[从 qItemsInCorr 接收消息]
H --> I[组合消息]
I --> J[qPOOut]
```
#### 常见消息关系模式
常见的需要关联实现的消息关系模式包括:
| 模式名称 | 描述 |
| ---- | ---- |
| Header - Items - Trailer | 包含头部、商品和尾消息的模式 |
| Any Order Two Items | 任意顺序的两个商品模式 |
| Any Orde
0
0
复制全文


