quickfix协议实例
生活随笔
收集整理的這篇文章主要介紹了
quickfix协议实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實現客戶端向服務器下單,服務器回應
客戶端
目錄結構
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-ERRORquickfix.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=YfixInitialtor.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:00fixServer.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协议实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搜狗输入法 android 历史版本,搜
- 下一篇: java作业 温度换算,温度换算-温度