271.7. 使用 InOut 消息交换模式
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
属性来指定关联条件和超时。
描述 | 键字符串 | 关键的 Constant | default |
---|---|---|---|
关联标准 | "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 开始。请参阅以下示例。