实现客户端向服务器下单,服务器回应

客户端
目录结构

log4j.properties

#file name: log4j.properties
app.log.home=/wls/apache/applogs/Pagi_qer
app.name=PAGI-QERlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%d{yyyy-MM-dd HH\:mm\:ss\:SSS} [%p]][${app.name}] %X{module}-%X{random}: %m%nlog4j.appender.PRODUCT=org.apache.log4j.DailyRollingFileAppender
log4j.appender.PRODUCT.Append=true
log4j.appender.PRODUCT.DatePattern='.'yyyy-MM-dd
log4j.appender.PRODUCT.File=${app.log.home}/info.log
log4j.appender.PRODUCT.Threshold=INFO
log4j.appender.PRODUCT.Encoding=UTF-8
log4j.appender.PRODUCT.layout=org.apache.log4j.PatternLayout
log4j.appender.PRODUCT.layout.ConversionPattern=[%d{yyyy-MM-dd HH\:mm\:ss\:SSS} [%p]][${app.name}] %X{module}-%X{random}: %m%nlog4j.appender.PRODUCT-ERROR=org.apache.log4j.DailyRollingFileAppender
log4j.appender.PRODUCT-ERROR.Append=true
log4j.appender.PRODUCT-ERROR.DatePattern='.'yyyy-MM-dd
log4j.appender.PRODUCT-ERROR.File=${app.log.home}/error.log
log4j.appender.PRODUCT-ERROR.Threshold=ERROR
log4j.appender.PRODUCT-ERROR.Encoding=UTF-8
log4j.appender.PRODUCT-ERROR.layout=org.apache.log4j.PatternLayout
log4j.appender.PRODUCT-ERROR.layout.ConversionPattern=[%d{yyyy-MM-dd HH\:mm\:ss\:SSS} [%p]][${app.name}] %X{module}-%X{random}: %m%nlog4j.category.org.hibernate.type=trace
log4j.logger.org.springframework=INFO
log4j.rootLogger=INFO, CONSOLE ,PRODUCT,PRODUCT-ERROR

quickfix.properties

#quickfix-server.properties
[default]
ConnectionType=initiator
HeartBtInt=30
ReconnectInterval=0
FileStorePath=F:\quantization_01\temp
FileLogPath=log
UseDataDictionary=N
SocketConnectHost=127.0.0.1
DataDictionary=src/resources/properties/fix42-jp.xml
ContinueInitializationOnError=Y[session]
BeginString=FIX.4.2
SenderCompID=CLIENT1
TargetCompID=FixServer
SocketConnectHost=127.0.0.1
SocketConnectPort=10003
StartTime=00:00:00
EndTime=23:00:00
ResetOnLogon=Y
ResetSeqNumFlag=Y

fixInitialtor.java

package quickfixInititor.quickfixInititor;import java.time.LocalDateTime;import org.apache.log4j.PropertyConfigurator;import quickfix.Application;
import quickfix.ConfigError;
import quickfix.DefaultMessageFactory;
import quickfix.FieldConvertError;
import quickfix.FileLogFactory;
import quickfix.FileStoreFactory;
import quickfix.LogFactory;
import quickfix.MessageFactory;
import quickfix.MessageStoreFactory;
import quickfix.RuntimeError;
import quickfix.Session;
import quickfix.SessionID;
import quickfix.SessionNotFound;
import quickfix.SessionSettings;
import quickfix.SocketInitiator;
import quickfix.field.Account;
import quickfix.field.ClOrdID;
import quickfix.field.HandlInst;
import quickfix.field.OrdType;
import quickfix.field.OrderQty;
import quickfix.field.Price;
import quickfix.field.Side;
import quickfix.field.Symbol;
import quickfix.field.TransactTime;
import quickfix.fix42.NewOrderSingle;public class FixInitialtor {private static SocketInitiator initiator = null;public static SocketInitiator getInitiator() {return initiator;}private static SessionSettings settings;/** 指定配置文件启动* * @param proFile* @throws ConfigError* @throws FieldConverError*/public FixInitialtor(String propFile) throws ConfigError, FieldConvertError {// 设置配置文件settings = new SessionSettings(propFile);// 设置一个APPlicationApplication application = new FixInitialtorApplication();/*** * quickfix.MessageStore 有2种实现。 quickfix.JdbcStore,quickfix.FileStore .* JdbcStoreFactory 负责创建JdbcStore , FileStoreFactory 负责创建FileStorequickfix* 默认用文件存储,因为文件存储效率高。*/MessageStoreFactory storeFactory = new FileStoreFactory(settings);LogFactory logFactory = new FileLogFactory(settings);MessageFactory messageFactory = new DefaultMessageFactory();initiator = new SocketInitiator(application, storeFactory, settings, logFactory, messageFactory);}private void startServer() throws RuntimeError,ConfigError {initiator.start();}private void stop(){initiator.stop();}/*** 被调用的start方法* * @throws ConfigError* @throws FieldConvertError*/public static void start() throws ConfigError, FieldConvertError {FixInitialtor servercom = new FixInitialtor("quickfix-server.properties");servercom.startServer();}/*** 测试本地使用的main方法* * @param args* @throws FieldConvertError* @throws ConfigError* @throws InterruptedException * @throws ProxoolException*/public static void main(String[] args) throws ConfigError, FieldConvertError, InterruptedException {// 配置LOG日记PropertyConfigurator.configure("src/resources/properties/log4j.properties");FixInitialtor fixInitialtor = new FixInitialtor("src/resources/properties/quickfix-server.properties");fixInitialtor.startServer();SessionID sessionID = new SessionID("FIX.4.2", "CLIENT1", "FixServer");while(true){NewOrderSingle order = new NewOrderSingle();LocalDateTime date = LocalDateTime.now();order.set(new ClOrdID("5678"));order.set(new Account("100"));order.set(new HandlInst('1'));order.set(new OrderQty(45.00));order.set(new Price(25.40));order.set(new Symbol("USD/EUR"));order.set(new Side(Side.BUY));order.set( new TransactTime(date));order.set(new OrdType(OrdType.LIMIT));try {//35=D – New Order SingleSession.sendToTarget(order, sessionID);Thread.sleep(3000);} catch (SessionNotFound e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
}

fixInitialtorApplication.java

package quickfixInititor.quickfixInititor;import quickfix.Application;
import quickfix.DoNotSend;
import quickfix.FieldNotFound;
import quickfix.IncorrectDataFormat;
import quickfix.IncorrectTagValue;
import quickfix.Message;
import quickfix.RejectLogon;
import quickfix.SessionID;
import quickfix.UnsupportedMessageType;/*** * MessageCracker是一个工具类,通过继承MessageCracker可以覆盖onMessage方法* 通过调用crack回调onMessage中的业务逻辑。所以所有的业务逻辑可以直接写在onMessage 方法中。* *    * *      onCreate –>当一个Fix Session建立是调用* *      onLogon –>当一个Fix Session登录成功时候调用*      *      onLogout –>当一个Fix Session退出时候调用*      *      fromAdmin–>当收到一个消息,经过一系列检查,合格后,属于Admin 类型时候调用*      *      fromApp–>当收到一个消息,经过一系列检查,合格后,不属于Admin 类型时候调用*      *      toAdmin–>当发送一个admin类型消息调用toApp—>当发送一个非admin(业务类型)消息调用**/public class FixInitialtorApplication implements Application{@Overridepublic void fromAdmin(Message arg0, SessionID arg1) throws FieldNotFound,IncorrectDataFormat, IncorrectTagValue, RejectLogon {// TODO Auto-generated method stubSystem.out.println("From Admin: " + arg0.toString());}@Overridepublic void fromApp(Message arg0, SessionID arg1) throws FieldNotFound,IncorrectDataFormat, IncorrectTagValue, UnsupportedMessageType {System.out.println("From App: " + arg0.toString());}@Overridepublic void onCreate(SessionID arg0) {// TODO Auto-generated method stub}@Overridepublic void onLogon(SessionID arg0) {}@Overridepublic void onLogout(SessionID arg0) {// TODO Auto-generated method stub}@Overridepublic void toAdmin(Message arg0, SessionID arg1) {// TODO Auto-generated method stubSystem.out.println("Sender toApp: " + arg0.toString());}@Overridepublic void toApp(Message msg, SessionID sessionId) throws DoNotSend {System.out.println("Sender toApp: " + msg.toString());}}

服务器端
文件目录

quickfix-service.properties

#quickfix-server.properties
[default]
ConnectionType=acceptor
SocketAcceptAddress=127.0.0.1
SocketAcceptPort=10003
SocketReuseAddress=Y
FileLogPath=log
FileStorePath=F:/quantization_02/temp
DataDictionary=src/resources/properties/fix42-jp.xml[session]
BeginString=FIX.4.2
SenderCompID=FixServer
TargetCompID=CLIENT1
HeartBtInt=180
ResetOnLogon=Y
ResetSeqNumFlag=Y
StartTime=00:00:00
EndTime=23:00:00

fixServer.java

package quickfix01.quickfix01;import java.util.Scanner;import org.apache.log4j.PropertyConfigurator;import quickfix.Application;
import quickfix.ConfigError;
import quickfix.DefaultMessageFactory;
import quickfix.FieldConvertError;
import quickfix.FileLogFactory;
import quickfix.FileStoreFactory;
import quickfix.LogFactory;
import quickfix.MessageFactory;
import quickfix.MessageStoreFactory;
import quickfix.RuntimeError;
import quickfix.SessionSettings;
import quickfix.ThreadedSocketAcceptor;public class FixServer {private static ThreadedSocketAcceptor acceptor = null;public static ThreadedSocketAcceptor getAcceptor() {return acceptor;}/** 指定配置文件启动* * @param proFile* @throws ConfigError* @throws FieldConverError*/public FixServer(String propFile) throws ConfigError, FieldConvertError {// 设置配置文件SessionSettings settings = new SessionSettings(propFile);// 设置一个APPlicationApplication application = new FixServerApplication();/*** * quickfix.MessageStore 有2种实现。 quickfix.JdbcStore,quickfix.FileStore .* JdbcStoreFactory 负责创建JdbcStore , FileStoreFactory 负责创建FileStorequickfix* 默认用文件存储,因为文件存储效率高。*/MessageStoreFactory storeFactory = new FileStoreFactory(settings);LogFactory logFactory = new FileLogFactory(settings);MessageFactory messageFactory = new DefaultMessageFactory();acceptor = new ThreadedSocketAcceptor(application, storeFactory, settings, logFactory, messageFactory);}private void startServer() throws RuntimeError,ConfigError {acceptor.start();}private void stop(){acceptor.stop();}/*** 被调用的start方法* * @throws ConfigError* @throws FieldConvertError*/public static void start() throws ConfigError, FieldConvertError {FixServer servercom = new FixServer("quickfix-server.properties");servercom.startServer();}/*** 测试本地使用的main方法* * @param args* @throws FieldConvertError* @throws ConfigError* @throws ProxoolException*/public static void main(String[] args) throws ConfigError, FieldConvertError {// 配置LOG日记PropertyConfigurator.configure("src/resources/properties/log4j.properties");FixServer fixServer = new FixServer("src/resources/properties/quickfix-server.properties");//SessionID sessionID = new SessionID("FIX.4.2", "FixServer", "CLIENT1");fixServer.startServer();Scanner reader = new Scanner(System.in);System.out.println("press <enter> to quit");reader.nextLine();fixServer.stop();System.out.println("quit success");}}

FixServerApplication.java

package quickfix01.quickfix01;import quickfix.Application;
import quickfix.DoNotSend;
import quickfix.FieldNotFound;
import quickfix.IncorrectDataFormat;
import quickfix.IncorrectTagValue;
import quickfix.Message;
import quickfix.RejectLogon;
import quickfix.Session;
import quickfix.SessionID;
import quickfix.SessionNotFound;
import quickfix.UnsupportedMessageType;
import quickfix.field.ClOrdID;
import quickfix.field.ExecID;
import quickfix.field.ExecTransType;
import quickfix.field.ExecType;
import quickfix.field.OrdStatus;
import quickfix.field.OrderID;
import quickfix.field.Side;
import quickfix.field.Symbol;
import quickfix.fix42.ExecutionReport;
import quickfix.fix42.MessageCracker;
import quickfix.fix42.NewOrderSingle;/*** * MessageCracker是一个工具类,通过继承MessageCracker可以覆盖onMessage方法* 通过调用crack回调onMessage中的业务逻辑。所以所有的业务逻辑可以直接写在onMessage 方法中。* *      onCreate –>当一个Fix Session建立是调用* *      onLogon –>当一个Fix Session登录成功时候调用*      *      onLogout –>当一个Fix Session退出时候调用*      *      fromAdmin–>当收到一个消息,经过一系列检查,合格后,属于Admin 类型时候调用*      *      fromApp–>当收到一个消息,经过一系列检查,合格后,不属于Admin 类型时候调用*      *      toAdmin–>当发送一个admin类型消息调用toApp—>当发送一个非admin(业务类型)消息调用**/public class FixServerApplication extends MessageCracker implements Application{@Overridepublic void onMessage(NewOrderSingle order, SessionID sessionID) {System.out.println("Receiver onMessage..  " + order);}@Overridepublic void fromAdmin(Message arg0, SessionID arg1) throws FieldNotFound,IncorrectDataFormat, IncorrectTagValue, RejectLogon {// TODO Auto-generated method stubSystem.out.println("Receiver fromAdmin..  " + arg0);}@Overridepublic void fromApp(Message arg0, SessionID arg1) throws FieldNotFound,IncorrectDataFormat, IncorrectTagValue, UnsupportedMessageType {System.out.println("Receiver fromApp..  " + arg0);ExecutionReport exeReport = new ExecutionReport();exeReport.set(new OrderID("1234"));exeReport.set(new ClOrdID("5678"));exeReport.set(new ExecID("2233"));exeReport.set(new ExecTransType('0'));exeReport.set(new ExecType('2'));exeReport.set(new OrdStatus('2'));exeReport.set(new Symbol("USD/EUR"));exeReport.set(new Side(Side.BUY));System.out.println("send exeReport infomation to client " + arg1);try {Session.sendToTarget(exeReport, arg1);} catch (SessionNotFound e) {e.printStackTrace();}}@Overridepublic void onCreate(SessionID arg0) {// TODO Auto-generated method stub}@Overridepublic void onLogon(SessionID arg0) {// TODO Auto-generated method stub}@Overridepublic void onLogout(SessionID arg0) {// TODO Auto-generated method stub}@Overridepublic void toAdmin(Message arg0, SessionID arg1) {// TODO Auto-generated method stub}@Overridepublic void toApp(Message arg0, SessionID arg1) throws DoNotSend {// TODO Auto-generated method stub}}

pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>quickfix01</groupId><artifactId>quickfix01</artifactId><version>0.0.1-SNAPSHOT</version><name>quickfix01</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/org.quickfixj/quickfixj-core --><dependency><groupId>org.quickfixj</groupId><artifactId>quickfixj-core</artifactId><version>2.0.0</version></dependency><!-- https://mvnrepository.com/artifact/org.quickfixj/quickfixj-messages-all --><dependency><groupId>org.quickfixj</groupId><artifactId>quickfixj-messages-all</artifactId><version>2.0.0</version></dependency><!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency><!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.10.0</version>
</dependency></dependencies><build><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>3.0.0</version></plugin><!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.7.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.20.1</version></plugin><plugin><artifactId>maven-jar-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></pluginManagement></build>
</project>

quickfix协议实例相关推荐

  1. PHP 必须勾选用户协议,javascript实现用户必须勾选协议实例讲解

    在js中设置用户必须阅读完某项协议 才能勾选登陆或注册 (disabled的使用技巧) 仔细观看两张图片画圈部分是不一样的 当滚轮在上面时下面的表单是不可选中的 第二张在底部表单是可选中的 其中方法为 ...

  2. MODBUS TCP协议实例数据帧详细分析

    MODBUS TCP协议实例数据帧详细分析 1.简介 2.ModbusTCP数据帧 2.1.报文头MBAP 2.2.帧结构PDU 3.ADU详细结构 3.1. 0x01:读线圈 3.2. 0x02:读 ...

  3. RTSP协议实例分析

    1. 前言 互联网上关于RTSP的文章很多,但是大多数都是抽象的理论介绍,本文将从实际例子解说RTSP协议,不求面面俱到,但求简单易懂.RTSP(Real-Time Streaming Protoco ...

  4. AMF3通讯协议实例

    为什么80%的码农都做不了架构师?>>>    服务端: import java.io.BufferedOutputStream; import java.io.BufferedRe ...

  5. 【科普贴】I2C通讯协议详解——偏软件分析和逻辑分析仪实例分析

    一. I2C标准协议流程 1. I2C协议--规定命令 开始:当SCL为高电平时,SDA从高电平向低电平切换 停止:当SCL为高电平时,SDA从低电平向高电平切换 应答(ACK):发送侧发送完8bit ...

  6. 《网络安全协议》课程实验大纲

    <网络安全协议>课程实验大纲  <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:offi ...

  7. NR 5G 用户平面协议

    基本概述 1.NR用户平面协议位于无线网络层的用户平面上,位于Xn或X2或F1接口上. 2.NR用户平面协议用于传达与数据无线承载的用户数据流管理有关的控制信息. 3.每个NR用户平面协议实例仅与一个 ...

  8. HoneyBadgerBFT:一个网络环境无关的Byzantine容错的分布式共识协议

    2017-01-04 Jin Gao HoneyBadgerBFT:一个网络环境无关的Byzantine容错的分布式共识协议 作者介绍: 夏雨,麻省理工学院电子工程与计算作者机科学系博士一年级在读,本 ...

  9. 回退n帧协议c语言代码,[计算机网络]Ch.3 数据链路层

    数据链路层 1.DLL层设计问题 1.1 DLL层·功能 数据链路层使用物理层提供的服务在通信信道上发送和接收比特. (1) 向网络层提供一个定义良好的接口 (2) 处理传输错误 (3) 调节数据流, ...

最新文章

  1. 服务器ip 计算机名,服务器计算机名称或者ip地址
  2. vue 分享微信传参_vue 中使用微信分享接口(简单实用)
  3. 如何基于Spark进行用户画像?
  4. 【测试点三、四、五分析】1032 Sharing (25 分)_28行代码AC
  5. macpro台式计算机,Mac Pro正式上架 真的可以用来刨土豆丝
  6. VLSM(可变长子网掩码)图表
  7. 100个灯泡python编程_算法题:一个圆环上有100个灯泡,灯泡有打...
  8. B - 小希的迷宫 (并查集判断是否存在环)
  9. IOS学习笔记-UINavgationController
  10. 10个免费图片站点(2020年最新)
  11. 2022-2027年中国智能服务机器人行业发展监测及投资战略研究报告
  12. xcode7的那些坑-“Your binary is not optimized for iPhone 5” (ITMS-90096) when submitting
  13. The Servers project is closed(Tomcate )
  14. python之路(1)_重要函数使用
  15. 如何在IntelliJ IDEA 中新建一个项目Project
  16. (八)空气质量指数计算7.0-----beautifulsoup4解析处理html、获取所有城市空气质量
  17. html简易幻灯片,web从零单排,做一个简单的幻灯片
  18. Linux-环境变量配置
  19. PPTP 配置PNS 的基本
  20. zookeeper 实现分布式锁

热门文章

  1. 【LaTex】3.2 数据结构(TikZ)
  2. [刷题]leetcode\189_轮转数组
  3. DW 简单效果代码整理
  4. linux火狐弹出框乱码,Linux系统下火狐浏览器页面出现乱码怎么办?
  5. FBTFT driver St7789v LCD 移植简介
  6. aoc usb显示器 linux,AOC首款USB连接云显示器
  7. 计算机怎么模拟对弈,剑网3指尖对弈怎么在电脑上玩 用模拟器玩剑网3指尖对弈电脑版...
  8. 淘宝喵果总动员自动做任务脚本
  9. QuickBooks profitandloss report 获取Not Specified 详情
  10. SCT2601TVBR、LMR16006XDDCR、MP2456GJ-Z参数