Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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 NameDefault ValueDescription

TransportLayer.MQAdaptor.Description

MQ Transport Adaptor DLLDescription of the transport adaptor

TransportLayer.MQAdaptor.DllName

bin/MQTAAddin.dllPath to the transport adaptor module

TransportLayer.MQAdaptor.TimeIntervalBeforeReconnect

1000Time interval in milliseconds between reconnect attempts

TransportLayer.MQAdaptor.StorageDirectory

FixEdge1/logLogging directory for storage of outgoing messages. Required.

TransportLayer.MQAdaptor.BufferSizeForMessage

65536Message buffer size. Max value is 4194304. 0 means a default value 64 * 1024

TransportLayer.MQAdaptor.MQ_HOSTNAME

localhostMS Series Server host name

TransportLayer.MQAdaptor.MQ_PORT

1414MS Series Server port

TransportLayer.MQAdaptor.MQ_MANAGER_NAME

TestMQMS Series manager name

TransportLayer.MQAdaptor.MQ_CHANNEL_NAME

TestConnectionMS Series Channel name

TransportLayer.MQAdaptor.MQ_CCSID

437MS Series Server CCSID. The coded character set identifier to use with the WebSphere MQ queue

TransportLayer.MQAdaptor.SslKeyRepository

/var/mqm/ssl/keyPath 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_USSSL CipherSpec name (SSLCIPH), required to use SSL, e.g. TRIPLE_DES_SHA_US

TransportLayer.MQAdaptor.SslClientAuthentication

falseRemote peer authentication (SSLCAUTH)

TransportLayer.MQAdaptor.SslPeerName

CN=QMGR.*, OU=IBM, OU=WEBSPHERERemote peer DN filter(SSLPEER)

TransportLayer.MQAdaptor.WaitIntervalForGet

1000Time interval in milliseconds to wait between polling message on MQ Series Server

TransportLayer.MQAdaptor.NumAttemptReconnect

10Number of reconnect attempts to MQ Series Server

TransportLayer.MQAdaptor.SessionNumber

1Number of sessions with MQ Series. Each session is a set of MQ Series queues.

TransportLayer.MQAdaptor.Session.1.ClientID

MQClientMQ session ID.

TransportLayer.MQAdaptor.Session.1.SmartXMLProcessor

trueEnables mode of processing XML/FIXML messages:
  • For outgoing FIX XML message (MsgType = n) adaptor extracts XML data then sends data to MQ client.
  • For incoming XML/FIXML raw data adaptor wraps data into FIX XML message (MsgType = n) then routes message to FIX Edge.

TransportLayer.MQAdaptor.Session.1.ToClientQueue

MQClient_toThe name for Queue, dedicated for message coming from client to MQ via FIX Edge

TransportLayer.MQAdaptor.Session.1.FromClientQueue

MQClient_fromThe name for Queue, dedicated for message coming from MQ to client via FIX Edge

TransportLayer.MQAdaptor.Session.1.ErrorQueue

MQClient_errorThe 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.*"

...

  1. Configure sessions in FIXEdge.properties

    Code Block
    titleFIXEdge.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
  2. Configure MQ Adaptor

    Code Block
    titleFIXEdge.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
  3. Configure BL 

    Code Block
    languagexml
    <?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

  4. Configure Queues Managers on IBM Websphere server



...

  1. Use a single MQ TA library with several sessions 

    Code Block
    languageperl
    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 
  2. Use several MQ TA with own library

    Code Block
    languageperl
    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
titleFixEdge.log
<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

...

  1. Configure FE using the following sample properties:

    Code Block
    titleFIXEdge.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
  2. Check if Queues are accessible:

    Code Block
    titleFixEdge.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().
  3. Route message to MQ and check FE logs:

    Code Block
    titleFixEdge.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:

...

  1. Login to the remote server where MQ Instance is running

  2. Open cmd

  3. Run 'runmqsc'. Check if connected to correct QM:

  4. Execute 'ALTER QMGR CHLAUTH(DISABLED)':

  5. Try to reestablish connection by clicking 'No' in the dialog:

  6. And Finish in the dialog:

  7. If the error is still here, look at Channel authentication records and make sure that your account is not in the Block User List:



  8. Try again steps 5-6.

Also you can find how tdisable IBM MQ authentication on the official site.