271.7. 使用 InOut 消息交换模式
Camel 2.8+
虽然 FIX 协议是事件驱动的和异步的,但有特定的消息对代表请求回复消息交换。要使用 InOut 交换模式,应有一个请求消息,以及对请求的单一回复消息。示例包括 OrderStatusRequest 消息和 UserRequest。
271.7.1. 为消费者实施 InOut Exchanges 复制链接链接已复制到粘贴板!
将 "exchangePattern=InOut" 添加到 QuickFIX/J enpoint URI。以下示例中的 MessageOrderStatusService 是一个带有同步服务方法的 bean。该方法返回对请求的响应(本例中为 ExecutionReport),然后发回到请求器会话。
from("quickfix:examples/inprocess.cfg?sessionID=FIX.4.2:MARKET->TRADER&exchangePattern=InOut")
.filter(header(QuickfixjEndpoint.MESSAGE_TYPE_KEY).isEqualTo(MsgType.ORDER_STATUS_REQUEST))
.bean(new MarketOrderStatusService());
from("quickfix:examples/inprocess.cfg?sessionID=FIX.4.2:MARKET->TRADER&exchangePattern=InOut")
.filter(header(QuickfixjEndpoint.MESSAGE_TYPE_KEY).isEqualTo(MsgType.ORDER_STATUS_REQUEST))
.bean(new MarketOrderStatusService());
271.7.2. 为 Producers 实施 InOut Exchange 复制链接链接已复制到粘贴板!
对于制作者,发送消息将阻止,直到收到回复或发生超时为止。在 FIX 中没有关联回复消息的标准方法。因此,必须为每种 InOut 交换定义关联标准。可以使用 Exchange 属性来指定关联条件和超时。
| 描述 | 键字符串 | Key Constant | default |
|---|---|---|---|
| 关联标准 | "CorrelationCriteria" | QuickfixjProducer.CORRELATION_CRITERIA_KEY | None |
| Milliseconds 中的关联超时 | "CorrelationTimeout" | QuickfixjProducer.CORRELATION_TIMEOUT_KEY | 1000 |
关联条件通过 MessagePredicate 对象定义。以下示例将从事务类型为 STATUS 的指定会话中处理 FIX ExecutionReport,Order ID 与我们的请求匹配。会话 ID 应用于 请求者,在查找回复时,发件人和目标 CompID 字段将被撤销。
exchange.setProperty(QuickfixjProducer.CORRELATION_CRITERIA_KEY,
new MessagePredicate(new SessionID(sessionID), MsgType.EXECUTION_REPORT)
.withField(ExecTransType.FIELD, Integer.toString(ExecTransType.STATUS))
.withField(OrderID.FIELD, request.getString(OrderID.FIELD)));
exchange.setProperty(QuickfixjProducer.CORRELATION_CRITERIA_KEY,
new MessagePredicate(new SessionID(sessionID), MsgType.EXECUTION_REPORT)
.withField(ExecTransType.FIELD, Integer.toString(ExecTransType.STATUS))
.withField(OrderID.FIELD, request.getString(OrderID.FIELD)));
271.7.3. 示例 复制链接链接已复制到粘贴板!
源代码包含一个名为 RequestReplyExample 的示例,它演示了使用者和制作者的 InOut 交换。这个示例创建一个简单的 HTTP 服务器端点,该端点接受订购状态请求。HTTP 请求转换为 FIX OrderStatusRequestMessage,使用关联条件增强,然后路由到快速修复端点。然后,响应将转换为 JSON 格式的字符串,并发回到要作为 Web 响应提供的 HTTP 服务器端点。
Spring 配置已从 Camel 2.9 开始更改。例如,请参阅以下。