3

我正在使用骆驼快速修复组件来消耗不同货币对的市场价格。我订阅了大约 G20 货币对,所以我们得到了很多更新,而我们的端点无法处理这样的负载,所以开始拒绝消息并记录错误。

Sending time accuracy problem

我认为它可以制作多线程,这样一个线程就可以处理更新的价格。我试图搜索很多,但没有找到任何令人满意的答案。

你能帮我解决这个问题吗?

4

3 回答 3

2

使用 Camel 进行多线程有 3 种方法:

  • SEDA route : 在新线程中启动路由
  • 用于并行处理的 JMS/ActiveMQ
  • JPA:使用数据库作为消息代理

一个带有 activemq 解决方案的示例:

<route> // quikfix endpoint route
  <from uri="quickfix-server:META-INF/quickfix/server.cfg"/> // QuickFix engine who will receive the message from FIX gateway
  <to uri="uri="activemq:queue:fix"/>"
</route>

<route> // parralize route
  <from uri="activemq:queue:fix"/>
  <bean ref="fixService" method="treatment"/> // do your stuff
</route>
于 2016-04-25T16:01:17.757 回答
2

问题:SendingTime 准确性问题

根本原因分析:

上述错误消息通常后跟会话注销。这是由于客户端计算机中的日期和时间设置不正确造成的。


解决方案:

验证日期、时间和时区都设置​​为正确的日期和时间设置。由于您可以独立设置时区和时间,我建议您仔细检查时区(UTC 时差),与设置的时间相匹配。

有一个 CheckLatency 和 MaxLatency 配置选项,请参阅http://www.quickfixengine.org/quickfix/doc/html/configuration.html#Validation

您可以使用两个配置选项来修改与时间同步问题相关的行为:

此选项打开或关闭延迟检查:

检查延迟=[Y|N]

此选项调整最大延迟差异(默认为 120 秒):MaxLatency=120 或 >120

还有另外两种解决问题的方法。

首先,这个问题可以通过

  1. 在重置会话之前注销客户端,
  2. 从日课改为周课

其次,这个问题可以通过清理排队的消息来解决。

资源链接:

  1. https://github.com/connamara/quickfixn/issues/262
  2. QuickFix : SendingTime 准确性问题
于 2016-04-27T18:52:26.193 回答
1

您可以使用Threads DSL(“使用 Threads DSL”)。例子:

<bean id="threadPool" class="java.util.concurrent.Executors" factory-method="newFixedThreadPool">       
    <constructor-arg index="0" value="20"/>
</bean>

<camelContext id="myContext" xmlns="http://camel.apache.org/schema/spring">

    <route> 
      <from uri="quickfix-server:META-INF/quickfix/server.cfg"/>
      <threads executorServiceRef="threadPool">
         <process ref="someProcessor"/>"
         ....
         other logic that should be run in concurrent environment
         .... 
     </threads> 
    </route>

</camelContext>

如您所见,您可以使用 java.util.concurrent 包中的线程池。另一种选择是您可以直接设置线程数:

    <route> 
      <from uri="quickfix-server:META-INF/quickfix/server.cfg"/>
      <threads maxPoolSize="20">
         <process ref="someProcessor"/>"
         ....
         other logic that should be run in concurrent environment
     </threads> 
    </route>

</camelContext> 
于 2016-04-27T09:06:29.887 回答