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());
Copy to Clipboard Toggle word wrap

271.7.2. 为 Producers 实施 InOut Exchange

对于制作者,发送消息将阻止,直到收到回复或发生超时为止。在 FIX 中没有关联回复消息的标准方法。因此,必须为每种 InOut 交换定义关联标准。可以使用 Exchange 属性来指定关联条件和超时。

Expand
描述键字符串Key Constantdefault

关联标准

"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)));
Copy to Clipboard Toggle word wrap

271.7.3. 示例

源代码包含一个名为 RequestReplyExample 的示例,它演示了使用者和制作者的 InOut 交换。这个示例创建一个简单的 HTTP 服务器端点,该端点接受订购状态请求。HTTP 请求转换为 FIX OrderStatusRequestMessage,使用关联条件增强,然后路由到快速修复端点。然后,响应将转换为 JSON 格式的字符串,并发回到要作为 Web 响应提供的 HTTP 服务器端点。

Spring 配置已从 Camel 2.9 开始更改。例如,请参阅以下。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat