我使用camel quickfix组件来消费不同货币对的市场价格。我正在订购大约G20货币对,所以我们得到了很多更新,我们的恩赐点无法处理这样的负载,所以开始拒绝消息和日志错误。
Sending time accuracy problem
我正在考虑制作多线程,以便一个线程可以处理更新的价格。我试图搜索很多,但没有找到任何满意的答案。
你能帮帮我吗?
答案 0 :(得分:2)
使用Camel进行多线程有3种方法:
使用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>
答案 1 :(得分:1)
上面的错误消息通常后面是会话注销。这是由于客户端计算机中的日期和时间设置不正确引起的。
验证日期,时间和时区都设置为正确的日期和时间设置。 由于您可以单独设置时区和时间,我建议仔细检查时区(UTC小时差异),与设置的时间相匹配。
有一个CheckLatency和MaxLatency配置选项,请参阅http://www.quickfixengine.org/quickfix/doc/html/configuration.html#Validation
您可以使用两个配置选项来修改与之相关的行为 时间同步问题:
此选项可打开或关闭延迟检查:
CheckLatency = [Y | N]
此选项调整最大延迟差异(120秒是 默认):MaxLatency = 120或&gt; 120
首先,
可以避免此问题其次,这个问题可以通过清除排队的消息来解决。
答案 2 :(得分:0)
您可以使用Threads DSL(&#34;使用线程DSL&#34;)。 例如:
<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>