搜索

271.7. 使用 InOut 消息交换模式

download PDF

Camel 2.8+

虽然 FIX 协议是事件驱动的和异步的,但有代表请求回复消息交换的特定对消息。要使用 InOut Exchange 模式,应该有一个请求消息,以及对请求的单一回复消息。示例包括 OrderStatusRequest message 和 UserRequest。

271.7.1. 为消费者实施 InOut Exchanges

将 "exchangePattern=InOut" 添加到 QuickFIX/J enpoint URI。以下示例中的 MessageOrderStatusService 是带有同步服务方法的 bean。该方法返回响应请求(本例中为 ExecutionReport),然后发回到 requestor 会话。

    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. 为生成实施 InOut Exchanges

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

描述键字符串关键的 Constantdefault

关联标准

"CorrelationCriteria"

QuickfixjProducer.CORRELATION_CRITERIA_KEY

None

在 Milliseconds 中关联超时

"CorrelationTimeout"

QuickfixjProducer.CORRELATION_TIMEOUT_KEY

1000

关联条件与 MessagePredicate 对象定义。以下示例将处理指定会话中的 FIX ExecutionReport,其中事务类型是 STATUS,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)));

271.7.3. Example

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

Spring 配置已从 Camel 2.9 开始。请参阅以下示例。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.