Versions Compared

Key

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

Table of Contents

...

Property NameDefault ValueDescription
TransportLayer.MQAdaptor.DescriptionMQ Transport Adaptor DLLDescription of the transport adaptor
TransportLayer.MQAdaptor.DllNamebin/MQTAAddin.dllPath to the transport adaptor module
TransportLayer.MQAdaptor.TimeIntervalBeforeReconnect1000Time interval in milliseconds between reconnect attempts
TransportLayer.MQAdaptor.StorageDirectoryFixEdge1/logLogging directory for storage of outgoing messages. Required.
TransportLayer.MQAdaptor.BufferSizeForMessage65536Message buffer size. Max value is 4194304. 0 means a default value 64 * 1024
TransportLayer.MQAdaptor.MQ_HOSTNAMElocalhostMS Series Server host name
TransportLayer.MQAdaptor.MQ_PORT1414MS Series Server port
TransportLayer.MQAdaptor.MQ_MANAGER_NAMETestMQMS Series manager name
TransportLayer.MQAdaptor.MQ_CHANNEL_NAMETestConnectionMS Series Channel name
TransportLayer.MQAdaptor.MQ_CCSID437MS 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.SslCipherSpecificationTRIPLE_DES_SHA_USSSL CipherSpec name (SSLCIPH), required to use SSL, e.g. TRIPLE_DES_SHA_US
TransportLayer.MQAdaptor.SslClientAuthenticationfalseRemote peer authentication (SSLCAUTH)
TransportLayer.MQAdaptor.SslPeerNameCN=QMGR.*, OU=IBM, OU=WEBSPHERERemote peer DN filter(SSLPEER)
TransportLayer.MQAdaptor.WaitIntervalForGet1000Time interval in milliseconds to wait between polling message on MQ Series Server
TransportLayer.MQAdaptor.NumAttemptReconnect10Number of reconnect attempts to MQ Series Server
TransportLayer.MQAdaptor.SessionNumber1Number of sessions with MQ Series. Each session is a set of MQ Series queues.
TransportLayer.MQAdaptor.Session.1.ClientIDMQClientMQ session ID.
TransportLayer.MQAdaptor.Session.1.SmartXMLProcessortrueEnables 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.ToClientQueueMQClient_toThe name for Queue, dedicated for message coming from client to MQ via FIX Edge
TransportLayer.MQAdaptor.Session.1.FromClientQueueMQClient_fromThe name for Queue, dedicated for message coming from MQ to client via FIX Edge
TransportLayer.MQAdaptor.Session.1.ErrorQueueMQClient_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.

...

  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'

Configuring SSL in IBM MQ Server

This instruction assumes that non-SSL configuration works OK

1. On IBM MQ server start IBM Key Management tool

2. Create new Key Database File
- Key database type: CMS
- File name: key.kdb
- Location: use same location as specified in "SSL Key Repository" parameter of your Queue Manager (for example, if SSL Key Repository is "C:\Program Files (x86)\IBM\WebSphere MQ\Qmgrs\FIXEdge\ssl\key", then set Location: C:\Program Files (x86)\IBM\WebSphere MQ\Qmgrs\FIXEdge\ssl\)

3. Create Password and set "Stash password to a file" checkbox

4. Click on "New Self-Signed..." button to create self-signed certificate

- Key Label: set it as "ibmwebspheremq<QM_name>", here QM_name - name of your Queue Manager in lower case
- Common Name: set any
- Organization: set any
- Organization Unit: set any

5. Close IBM Key Management using menu Key Database File -> Close and then Key Database File -> Exit

6. Go to SSL Key Repository folder and make sure that only SYSTEM and your MQ user have full access to key.kdb, key.rdb and key.sth files. All other user may have only "Read" permissions

7. In Websphere MQ Explorer go to Channels

8. Open Properties of your channel and on SSL tab select SSL Cipher Spec. For example, TRIPLE_DES_SHA_US.

    Select SSL Authentication = Optional if you don't plan to use SSL client authentication.

    Apply your changes

9. From SSL Key Repository folder (see step 2) copy three files: key.kdb, key.rdb and key.sth files somewhere on FIXEdge's server (for example, FixEdge1/conf)

10. Configure FIXEdge.properties to use SSL connection with MQ:

TransportLayer.MQAdaptor.SslKeyRepository = C:\\B2BITS\\FIXEdge\\FixEdge1\\conf\\key
TransportLayer.MQAdaptor.SslCipherSpecification = TRIPLE_DES_SHA_US
TransportLayer.MQAdaptor.SslClientAuthentication = false
TransportLayer.MQAdaptor.SslPeerName =

 

Troubleshootting

If MQ TA fails to initialize with record in log "Failed to set character set. Code: some code": make sure QueueManager on server side is running and you are trying to set right code character set.

...