Table of Contents
Overview
...
Info |
---|
Starting FixEdge version 6.10.0 it is recommended to use IBM MQ Client library version 8.x. The older and newer versions may lead to MQ adapters failures |
...
Property Name | Default Value | Description |
TransportLayer.MQAdaptor.Description | MQ Transport Adaptor DLL | Description of the transport adaptor |
TransportLayer.MQAdaptor.DllName | bin/MQTAAddin.dll | Path to the transport adaptor module |
TransportLayer.MQAdaptor.TimeIntervalBeforeReconnect | 1000 | Time interval in milliseconds between reconnect attempts |
TransportLayer.MQAdaptor.StorageDirectory | FixEdge1/log | Logging directory for storage of outgoing messages. Required. |
TransportLayer.MQAdaptor.BufferSizeForMessage | 65536 | Message buffer size. Max value is 4194304. 0 means a default value 64 * 1024 |
TransportLayer.MQAdaptor.MQ_HOSTNAME | localhost | MS Series Server host name |
TransportLayer.MQAdaptor.MQ_PORT | 1414 | MS Series Server port |
TransportLayer.MQAdaptor.MQ_MANAGER_NAME | TestMQ | MS Series manager name |
TransportLayer.MQAdaptor.MQ_CHANNEL_NAME | TestConnection | MS Series Channel name |
TransportLayer.MQAdaptor.MQ_CCSID | 437 | MS Series Server CCSID. The coded character set identifier to use with the WebSphere MQ queue |
TransportLayer.MQAdaptor.SslKeyRepository | /var/mqm/ssl/key | Path to SSL certificate storage file without extension (SCKR,MQSSLKEYR) e.g. /var/mqm/ssl/key or C:\\Program Files\\IBM\\WebSphere MQ\\ssl\\key |
TransportLayer.MQAdaptor.SslCipherSpecification | TRIPLE_DES_SHA_US | SSL CipherSpec name (SSLCIPH), required to use SSL, e.g. TRIPLE_DES_SHA_US |
TransportLayer.MQAdaptor.SslClientAuthentication | false | Remote peer authentication (SSLCAUTH) |
TransportLayer.MQAdaptor.SslPeerName | CN=QMGR.*, OU=IBM, OU=WEBSPHERE | Remote peer DN filter(SSLPEER) |
TransportLayer.MQAdaptor.WaitIntervalForGet | 1000 | Time interval in milliseconds to wait between polling message on MQ Series Server |
TransportLayer.MQAdaptor.NumAttemptReconnect | 10 | Number of reconnect attempts to MQ Series Server |
TransportLayer.MQAdaptor.SessionNumber | 1 | Number of sessions with MQ Series. Each session is a set of MQ Series queues. |
TransportLayer.MQAdaptor.Session.1.ClientID | MQClient | MQ session ID. |
TransportLayer.MQAdaptor.Session.1.SmartXMLProcessor | true | Enables mode of processing XML/FIXML messages:
|
TransportLayer.MQAdaptor.Session.1.ToClientQueue | MQClient_to | The name for Queue, dedicated for message coming from client to MQ via FIX Edge |
TransportLayer.MQAdaptor.Session.1.FromClientQueue | MQClient_from | The name for Queue, dedicated for message coming from MQ to client via FIX Edge |
TransportLayer.MQAdaptor.Session.1.ErrorQueue | MQClient_error | The name for Queue dedicated for message, which cannot be handled because of error. |
TransportLayer.MQAdaptor.Session.1.SenderID | - | Not required. SenderCompID (Tag = 49) in the received message is set to the property value. |
TransportLayer.MQAdaptor.Session.1.TargetID | - | Not required. TargetCompID (Tag = 56) in the received message is set to the property value. |
TransportLayer.MQAdaptor.Session.1.FromClientDropMessageFilter | - | Not required. Defines a regular expression (perl syntax) to drop matched messages coming from MQ. |
TransportLayer.MQAdaptor.Session.1.SmartXMLProcessorFromClientMessageFilter | - | Not required. Defines a regular expression (perl syntax) to apply SmartXMLProcessor to matched messages coming from MQ. Overrides default filter: case insensitive "<\?xml version.*|<FIXML.*" |
...
Configure sessions in FIXEdge.properties
Code Block title FIXEdge.properties #------------------------------------------------------------ # FIX Layer Section #------------------------------------------------------------ FixLayer.FixEngine.Sessions = SENDER, RECEIVER FixLayer.FixEngine.Session.SENDER.Version = FIX44 FixLayer.FixEngine.Session.SENDER.StorageType = persistentMM FixLayer.FixEngine.Session.SENDER.Role = Acceptor FixLayer.FixEngine.Session.SENDER.SenderCompID = FIXEDGE FixLayer.FixEngine.Session.SENDER.TargetCompID = SENDER FixLayer.FixEngine.Session.SENDER.EncryptMethod = 0 FixLayer.FixEngine.Session.SENDER.InSeqNum = 0 FixLayer.FixEngine.Session.SENDER.OutSeqNum = 0 FixLayer.FixEngine.Session.SENDER.Description = FIX session for test mq sender FixLayer.FixEngine.Session.SENDER.StartTime = 08:00 FixLayer.FixEngine.Session.SENDER.TerminateTime = 23:59 FixLayer.FixEngine.Session.SENDER.RecreateOnLogout = true FixLayer.FixEngine.Session.SENDER.IntradayLogoutTolerance = true FixLayer.FixEngine.Session.SENDER.ForceSeqNumReset = false FixLayer.FixEngine.Session.SENDER.SocketPriority = EVEN FixLayer.FixEngine.Session.SENDER.HandleSeqNumAtLogon = false FixLayer.FixEngine.Session.RECEIVER.Version = FIX44 FixLayer.FixEngine.Session.RECEIVER.StorageType = persistentMM FixLayer.FixEngine.Session.RECEIVER.Role = Acceptor FixLayer.FixEngine.Session.RECEIVER.SenderCompID = FIXEDGE FixLayer.FixEngine.Session.RECEIVER.TargetCompID = RECEIVER FixLayer.FixEngine.Session.RECEIVER.EncryptMethod = 0 FixLayer.FixEngine.Session.RECEIVER.InSeqNum = 0 FixLayer.FixEngine.Session.RECEIVER.OutSeqNum = 0 FixLayer.FixEngine.Session.RECEIVER.Description = FIX session for test mq receiver FixLayer.FixEngine.Session.RECEIVER.StartTime = 08:00 FixLayer.FixEngine.Session.RECEIVER.TerminateTime = 23:59 FixLayer.FixEngine.Session.RECEIVER.RecreateOnLogout = true FixLayer.FixEngine.Session.RECEIVER.IntradayLogoutTolerance = true FixLayer.FixEngine.Session.RECEIVER.ForceSeqNumReset = false FixLayer.FixEngine.Session.RECEIVER.SocketPriority = EVEN FixLayer.FixEngine.Session.RECEIVER.HandleSeqNumAtLogon = false
Configure MQ Adaptor
Code Block title FIXEdge.properties #------------------------------------------------------------ # Transport Layer Section #------------------------------------------------------------ #Comma separated list of identifiers of Transport Adapters should be loaded. TransportLayer.TransportAdapters = TransportLayer.MQAdaptor #------------------------------------------------------------------------- # MQ Adaptor configuration #------------------------------------------------------------------------- TransportLayer.MQAdaptor.Description = MQ Transport Adaptor DLL TransportLayer.MQAdaptor.Type = DLL TransportLayer.MQAdaptor.DllName = bin/MQTAAddin-vc10-MD-x64.dll TransportLayer.MQAdaptor.TimeIntervalBeforeReconnect = 1000 TransportLayer.MQAdaptor.BufferSizeForMessage = 65536 TransportLayer.MQAdaptor.MQ_HOSTNAME = ecsa00400539.epam.com TransportLayer.MQAdaptor.MQ_MANAGER_NAME = FIXEdge TransportLayer.MQAdaptor.MQ_PORT = 1414 TransportLayer.MQAdaptor.MQ_CCSID = 437 TransportLayer.MQAdaptor.MQ_CHANNEL_NAME = TestConnection TransportLayer.MQAdaptor.WaitIntervalForGet = 1000 TransportLayer.MQAdaptor.NumAttemptReconnect = 10 TransportLayer.MQAdaptor.StorageDirectory = FIXEdge1/log TransportLayer.MQAdaptor.UseTransactions = true TransportLayer.MQAdaptor.SessionNumber = 2 # MQ QA session TransportLayer.MQAdaptor.SessionNumber = 1 TransportLayer.MQAdaptor.Session.1.ClientID = MQHub1 TransportLayer.MQAdaptor.Session.1.ToClientQueue = MQClient_test TransportLayer.MQAdaptor.Session.1.FromClientQueue = TransportLayer.MQAdaptor.Session.1.ErrorQueue = MQClient_error TransportLayer.MQAdaptor.Session.1.SmartXMLProcessor = true TransportLayer.MQAdaptor.Session.1.SendTransactionSize = 300 TransportLayer.MQAdaptor.Session.1.ReceiveTransactionSize = 1 TransportLayer.MQAdaptor.SessionNumber = 2 TransportLayer.MQAdaptor.Session.2.ClientID = MQHub2 TransportLayer.MQAdaptor.Session.2.ToClientQueue = TransportLayer.MQAdaptor.Session.2.FromClientQueue = MQClient_test TransportLayer.MQAdaptor.Session.2.ErrorQueue = MQClient_error TransportLayer.MQAdaptor.Session.2.SmartXMLProcessor = true TransportLayer.MQAdaptor.Session.2.SendTransactionSize = 300 TransportLayer.MQAdaptor.Session.2.ReceiveTransactionSize = 1
Configure BL
Code Block language xml <?xml version="1.0" encoding="UTF-8"?> <FIXEdge> <BusinessLayer> <Rule Description="Convert ExecutionReport from FIX44FIX.4.4 to FIXML.4.4"> <Source Name="SENDER" /> <Action> <Convert SourceProtocol="FIX44FIX.4.4" TargetProtocol="FIXML.4.4"/> <Send Name="MQHub1"/> </Action> </Rule> <Rule Description="Route MQ messages back to receiver and convert from FIXML.4.4 to FIX44FIX.4.4"> <Source Name="MQHub2" /> <Action> <Convert SourceProtocol="FIXML.4.4" TargetProtocol="FIX44FIX.4.4"/> <Send Name="RECEIVER"/> </Action> </Rule> <DefaultRule> <Action> <DoNothing/> </Action> </DefaultRule> </BusinessLayer> </FIXEdge>
Note: full list of possible versions to convert can be found in Convert
- Configure Queues Managers on IBM Websphere server
...
Use a single MQ TA library with several sessions
Code Block language perl TransportLayer.TransportAdapters = TransportLayer.MQAdaptor TransportLayer.MQAdaptor.DllName = bin/MQTAAddin-vc10-MD-x64.dll #... TransportLayer.MQAdaptor.SessionNumber = 2 TransportLayer.MQAdaptor.Session.1.ClientID = MQTA_ID_1 TransportLayer.MQAdaptor.Session.1.ToClientQueue = MQClient_to_1 TransportLayer.MQAdaptor.Session.1.FromClientQueue = TransportLayer.MQAdaptor.Session.1.ErrorQueue = TransportLayer.MQAdaptor.Session.1.ReceiveTransactionSize=10 TransportLayer.MQAdaptor.Session.1.SendTransactionSize=10 TransportLayer.MQAdaptor.Session.2.ClientID = MQTA_ID_2 TransportLayer.MQAdaptor.Session.2.ToClientQueue = MQClient_to_2 TransportLayer.MQAdaptor.Session.2.FromClientQueue = TransportLayer.MQAdaptor.Session.2.ErrorQueue = TransportLayer.MQAdaptor.Session.2.ReceiveTransactionSize=10 TransportLayer.MQAdaptor.Session.2.SendTransactionSize=10
Use several MQ TA with own library
Code Block language perl TransportAdapters = TransportLayer.MQAdaptor, TransportLayer.MQAdaptor2 TransportLayer.MQAdaptor.DllName = bin/MQTAAddin-vc10-MD-x64.dll #... TransportLayer.MQAdaptor2.DllName = bin/MQTAAddin-vc10-MD-x64_2.dll #...
IBM MQ Error codes
...
Code Block | ||
---|---|---|
| ||
<timestamp> Russia TZ 2 Standard Time ERROR [TransportLayer] <thread> Transport Adaptor 'MQAdaptor' has failed to initialize: Error loading DLL 'C:\B2BITS\FIXEdge\bin\MQTAAddin-vc10-MD-x64.dll'.
Dependencies list:
MSVCP140.dll => C:\Windows\SYSTEM32\MSVCP140.dll
USER32.dll => C:\Windows\system32\USER32.dll
V12-vc14-MD-x64.dll => C:\B2BITS\FIXEdge\bin\V12-vc14-MD-x64.dll
VCRUNTIME140.dll => C:\Windows\SYSTEM32\VCRUNTIME140.dll
api-ms-win-crt-filesystem-l1-1-0.dll => C:\Windows\SYSTEM32\api-ms-win-crt-filesystem-l1-1-0.dll
api-ms-win-crt-heap-l1-1-0.dll => C:\Windows\SYSTEM32\api-ms-win-crt-heap-l1-1-0.dll
api-ms-win-crt-runtime-l1-1-0.dll => C:\Windows\SYSTEM32\api-ms-win-crt-runtime-l1-1-0.dll
api-ms-win-crt-stdio-l1-1-0.dll => C:\Windows\SYSTEM32\api-ms-win-crt-stdio-l1-1-0.dll
api-ms-win-crt-utility-l1-1-0.dll => C:\Windows\SYSTEM32\api-ms-win-crt-utility-l1-1-0.dll
imqb23vn.dll => not found
imqc23vn.dll => not found |
...
Configure FE using the following sample properties:
Code Block title FIXEdge.properties TransportLayer.TransportAdapters = TransportLayer.MQAdaptor #------------------------------------------------------------------------- # MQ Adaptor Settings #------------------------------------------------------------------------- TransportLayer.MQAdaptor.Description = MQ Transport Adaptor DLL TransportLayer.MQAdaptor.TimeIntervalBeforeReconnect = 1000 TransportLayer.MQAdaptor.DllName = bin/MQTAAddin-vc10-MD-x64.dll TransportLayer.MQAdaptor.StorageDirectory = FixEdge1/log TransportLayer.MQAdaptor.NumAttemptReconnect = -1 TransportLayer.MQAdaptor.WaitIntervalForGet = 10000 TransportLayer.MQAdaptor.BufferSizeForMessage = 65536 TransportLayer.MQAdaptor.MQ_HOSTNAME = EVUAKYISD0223.kyiv.epam.com TransportLayer.MQAdaptor.MQ_MANAGER_NAME = TestMQ TransportLayer.MQAdaptor.MQ_PORT = 1414 TransportLayer.MQAdaptor.MQ_CCSID = 437 TransportLayer.MQAdaptor.MQ_CHANNEL_NAME = TestConnection TransportLayer.MQAdaptor.SessionNumber = 1 TransportLayer.MQAdaptor.Session.1.ClientID = MQClient TransportLayer.MQAdaptor.Session.1.FromClientQueue = MQClient_from TransportLayer.MQAdaptor.Session.1.ToClientQueue = MQClient_to TransportLayer.MQAdaptor.Session.1.ErrorQueue = MQClient_error TransportLayer.MQAdaptor.Session.1.SmartXMLProcessor = false
Check if Queues are accessible:
Code Block title FixEdge.log [DEBUG] 20120718-11:41:33.609 [2840] [MQEngine] - Was created queue 'MQClient_from' [DEBUG] 20120718-11:41:33.609 [2840] [MQQueuesReader_Debug] - createClientQueue() finished [DEBUG] 20120718-11:41:33.609 [2840] [MQQueuesReader_Debug] - ClientQueue created. [DEBUG] 20120718-11:41:33.609 [2840] [MQQueuesReader_Debug] - MQQueuesReader::readFromQueuesAndPassToTL(). [DEBUG] 20120718-11:41:33.609 [2840] [MQQueuesReader_Debug] - fromClientQueue->getFirst(). [DEBUG] 20120718-11:41:38.039 [12692] [MQEngine] - Was created queue 'MQClient_to' [DEBUG] 20120718-11:41:38.251 [12692] [MQEngine] - Was created queue 'MQClient_error' [DEBUG] 20120718-11:41:38.251 [12692] [MQQueueWriter] - Queues were created for client 'MQClient' [NOTE] 20120718-11:41:38.251 [12692] [MQQueueWriter] - Restore messages for out queue 'MQClient'. [NOTE] 20120718-11:41:38.251 [12692] [MQQueueWriter] - Create storage for the: MQClient [DEBUG] 20120718-11:41:38.251 [12692] [MQQueueWriter] - Load storage. [DEBUG] 20120718-11:41:38.251 [12692] [MQQueueWriter] - Persistance storage use file: D:\Program Files\B2Bits\FIX Edge\v.5.4.1.40091\FixEdge1\log\MQ-MQClient_07180941382511.out [NOTE] 20120718-11:41:38.251 [12692] [MQQueueWriter] - Restore messages for error queue 'MQClient'. [NOTE] 20120718-11:41:38.251 [12692] [MQQueueWriter] - Create storage for the: MQClient-Errors [DEBUG] 20120718-11:41:38.251 [12692] [MQQueueWriter] - Load storage. [DEBUG] 20120718-11:41:38.252 [12692] [MQQueueWriter] - Persistance storage use file: D:\Program Files\B2Bits\FIX Edge\v.5.4.1.40091\FixEdge1\log\MQ-MQClient -Errors_07180941382511.out [DEBUG] 20120718-11:41:43.678 [2840] [MQQueueRead] - Was performed get operation on queue 'MQClient_from' with reason code :2033 [DEBUG] 20120718-11:41:43.678 [2840] [MQQueueRead] - MQQueueRead::getFirst failed to get message '' [DEBUG] 20120718-11:41:43.678 [2840] [MQQueuesReader_Debug] - MQQueuesReader::readFromQueuesAndPassToTL(). [DEBUG] 20120718-11:41:43.678 [2840] [MQQueuesReader_Debug] - fromClientQueue->getFirst().
Route message to MQ and check FE logs:
Code Block title FixEdge.log [DEBUG] 20120718-11:48:16.389 [7968] [FL_MsgTrace] - New message FIX was received from session with ID 'TROIKALSE'. Message: '8=FIX.4.49=16535=D49=LSE56=TROIKA34=250=3073757=ECL_TURQ97=Y52=20120718-09:48:16.38811=900010081=1003000321=255=TESTA54=160=20000809-18:20:3238=400040=244=3059=010=224'. [DEBUG] 20120718-11:48:16.389 [7968] [BL_Layer] - Process incoming message. [DEBUG] 20120718-11:48:16.389 [7968] [BL_RoutingTable] - There are no suitable rules were found for message with Source ID 'LSE', executing DefaultRule. [DEBUG] 20120718-11:48:16.389 [7968] [CC_Layer] - BL has processed a message. Number of client IDs for delivery :0. Number or FIX sessions for delivery :0.. Number or sources identifiers for delivery :1. Source IDs: 1. 'MQClient' [DEBUG] 20120718-11:48:16.389 [7968] [TransportLayer] - Sending message '8=FIX.4.49=16535=D49=LSE56=TROIKA34=250=3073757=ECL_TURQ97=Y52=20120718-09:48:16.38811=900010081=1003000321=255=TESTA54=160=20000809-18:20:3238=400040=244=3059=010=224' to client MQClient [DEBUG] 20120718-11:48:16.389 [7968] [MQQueueWriter] - Was put message to messageQueue. Message = (ToClientQueue, MQClient, 8=FIX.4.49=16535=D49=LSE56=TROIKA34=250=3073757=ECL_TURQ97=Y52=20120718-09:48:16.38811=900010081=1003000321=255=TESTA54=160=20000809-18:20:3238=400040=244=3059=010=224) [DEBUG] 20120718-11:48:16.389 [7968] [MQQueueWriter] - Store into the Persistance storage. [DEBUG] 20120718-11:48:16.389 [12228] [MQQueueWriter] - Was get message from MessageQueue. Message: ( toClientQueue,MQClient, 8=FIX.4.49=16535=D49=LSE56=TROIKA34=250=3073757=ECL_TURQ97=Y52=20120718-09:48:16.38811=900010081=1003000321=255=TESTA54=160=20000809-18:20:3238=400040=244=3059=010=224) [DEBUG] 20120718-11:48:16.460 [12228] [MQQueueWrite] - Was performed put operation on queue 'MQClient_to' with reason code :0. Message = '8=FIX.4.49=16535=D49=LSE56=TROIKA34=250=3073757=ECL_TURQ97=Y52=20120718-09:48:16.38811=900010081=1003000321=255=TESTA54=160=20000809-18:20:3238=400040=244=3059=010=224' [DEBUG] 20120718-11:48:16.460 [12228] [MQQueueWrite] - message was successfully sent to to queue 'MQClient_to' with reason code :0 [DEBUG] 20120718-11:48:16.460 [12228] [MQQueueWriter] - message was put to ToClient queue.Client 'MQClient'. MEssage '8=FIX.4.49=16535=D49=LSE56=TROIKA34=250=3073757=ECL_TURQ97=Y52=20120718-09:48:16.38811=900010081=1003000321=255=TESTA54=160=20000809-18:20:3238=400040=244=3059=010=224'
...
MQ TA has not supported the authentication in IBM MQ Server.
It can lead to failure in MQ TA initialization with the error records in the log:
...
Login to the remote server where MQ Instance is running
Open cmd
Run 'runmqsc'. Check if connected to correct QM:
Execute 'ALTER QMGR CHLAUTH(DISABLED)':
Try to reestablish connection by clicking 'No' in the dialog:
And Finish in the dialog:
- If the error is still here, look at Channel authentication records and make sure that your account is not in the Block User List:
- Try again steps 5-6.
Also you can find how to disable IBM MQ authentication on the official site.