Versions Compared

Key

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

...

  1. Install FIXEdge for Windows (use "tar xvf" commands for Linux/Solaris)

  2. Add path to appropriate activemq*.jar to java classpath in FIXEdge1/conf/jms-ta-distribution/etc/JVM_Options.jvmopts file e.g.:

    Code Block
    titleJVM_Options.jvmopts
    Windows: -Djava.class.path=(...);FixEdge1/conf/jms-ta-distribution/tool/lib/activemq-all-5.3.2.jar;
    Linux: -Djava.class.path=(...);../FixEdge1/conf/jms-ta-distribution/tool/lib/activemq-all-5.3.2.jar;
    Note
    titleNote

    The ActiveMQ library could be found at activemq.apache.org
    Download original package and extract "activemq-all-x.x.x.jar" into ../FixEdge1/conf/jms-ta-distribution/tool/lib/

  3. Configure paths to logs in FIXEdge1/conf/jms-ta-distribution/etc/log4j.properties. Paths to logs directory must be absolute.

  4. Configure JMS adapter in FIXEdge.properties.
    Add TransportLayer.JMSTA to TransportLayer.TransportAdapters, so as a result you should get "TransportLayer.TransportAdapters = TransportLayer.JMSTA"
    And add JMS session parameters, for example:

    Code Block
    languagepy
    titleFIXEdge.properties
    # Transport Layer Section
    TransportLayer.TransportAdapters = TransportLayer.JMSTA
    TransportLayer.JMSTA.Description = JMS Transport Adaptor
    TransportLayer.JMSTA.DllName = bin/jmsTADll-vc10-MD-x64.dll     // Use libJMSTA.so for Linux
    TransportLayer.JMSTA.JVMOptionsFile = FixEdge1/conf/JVM_Options.jvmopts     // Use ../FixEdge1/conf/JVM_Options.jvmopts for Linux
    TransportLayer.JMSTA.ConnectionNames = Connection1
    TransportLayer.JMSTA.ClientNames = ProducerSession, ConsumerSession
    
    TransportLayer.JMSTA.Connection.Connection1.InitialContextFactory = org.apache.activemq.jndi.ActiveMQInitialContextFactory
    TransportLayer.JMSTA.Connection.Connection1.ProviderURI = tcp://10.17.12.244:61616
    TransportLayer.JMSTA.Connection.Connection1.User = test
    TransportLayer.JMSTA.Connection.Connection1.Password = test
    TransportLayer.JMSTA.Connection.Connection1.ConnectionFactory = queueConnectionFactory
    TransportLayer.JMSTA.Connection.Connection1.Reconnect = false
    TransportLayer.JMSTA.Connection.Connection1.ReconnectTries = 3
    TransportLayer.JMSTA.Connection.Connection1.ReconnectInterval = 500
    
    TransportLayer.JMSTA.Client.ProducerSession.ConnectionName = Connection1
    TransportLayer.JMSTA.Client.ProducerSession.StorageDir = ../FixEdge1/log
    TransportLayer.JMSTA.Client.ProducerSession.SessionType = Producer
    TransportLayer.JMSTA.Client.ProducerSession.MessagingMode = Queue
    TransportLayer.JMSTA.Client.ProducerSession.DestinationURI = MyQueue 
    TransportLayer.JMSTA.Client.ProducerSession.DeliveryMode = NoPersist
    TransportLayer.JMSTA.Client.ProducerSession.TimeToLive = 100000
    TransportLayer.JMSTA.Client.ProducerSession.SessionAckMode = Auto
    TransportLayer.JMSTA.Client.ProducerSession.MessageType = Text
    TransportLayer.JMSTA.Client.ProducerSession.Transacted = true
    TransportLayer.JMSTA.Client.ProducerSession.DurableSubscription = false
    TransportLayer.JMSTA.Client.ProducerSession.DurableSubscriptionName = DurableTest
     
    TransportLayer.JMSTA.Client.ConsumerSession.ConnectionName = Connection1
    TransportLayer.JMSTA.Client.ConsumerSession.StorageDir = ../FixEdge1/log
    TransportLayer.JMSTA.Client.ConsumerSession.SessionType = Consumer
    TransportLayer.JMSTA.Client.ConsumerSession.MessagingMode = Queue
    TransportLayer.JMSTA.Client.ConsumerSession.DestinationURI = MyQueue
    TransportLayer.JMSTA.Client.ConsumerSession.DeliveryMode = NoPersist
    TransportLayer.JMSTA.Client.ConsumerSession.TimeToLive = 100000
    TransportLayer.JMSTA.Client.ConsumerSession.SessionAckMode = Auto
    TransportLayer.JMSTA.Client.ConsumerSession.MessageType = Text
    TransportLayer.JMSTA.Client.ConsumerSession.Transacted = false
    TransportLayer.JMSTA.Client.ConsumerSession.DurableSubscription = false
    TransportLayer.JMSTA.Client.ConsumerSession.DurableSubscriptionName = DurableTest
    

    Note: TransportLayer.JMSTA.Connection.Connection1.ProviderURI = tcp://10.17.12.244:61616 - host:port of Apache ActiveMQ Message Broker.

    According to this configuration, FIXEdge will establish connection (Connection1) with ActiveMQ on 10.17.12.244:61616. This connection will be used by two JMS sessions: ProducerSession will receive FIX messages and send converted messages into MyQueue queue of ActiveMQ (producer session), ConsumerSession will receive JMS messages from MyQueue queue of ActiveMQ and convert them into FIX (consumer session).

  5. Use FixEdge1/conf/BL_Config.xml as Business Layer Rules configuration file.
    According to that BL rule and to JMS adapter configuration: FIX messages from FIXCLIENT1 will be converted into JMS and sent to ActiveMQ using producer session JMSPTestSession, then consumers session JMSPTestSession2 will get these JMS messages from ActiveMQ, convert it back to FIX and send messages to FIXCLIENT2.

  6. ActiveMQ configuration (You can get it from official site).
    1. In conf/activemq.xml add <destination> to <broker> section:

      Code Block
      languagexml
      titleconf/activemq.xml
      <destinations>
      	<queue physicalName="MyQueue" />
      </destinations>
    2. Start ActiveMQ using bin/activemq.bat

  7. Enable UnregisteredAcceptors in  FixEdge1/conf/engine.properties (UnregisteredAcceptor.CreateSession = true)

  8. Start FIXEdge

  9. Start, for example, SimpleClient (or HSBC tool) and establish FIXCLIENT1-FIXEDGE, FIXCLIENT2-FIXEDGE sessions with FIXEdge

  10. Send FIX messages to FIXCLIENT1-FIXEDGE session

  11. Messages from FIXCLIENT1-FIXEDGE session should be received in FIXCLIENT2-FIXEDGE Session

  12. Open ActiveMQ admin console. Messages Enqueued and Messages Dequeued counters on Queues and Topics page should be changing with each sent message.

...

Property name
Description
RequiredDefault Value
TransportLayer.TransportAdapters

Comma delimited list of TA.

Separate configuration section for each listed client should be specified. JMSTA should be specified here.

Y
TransportLayer.JMSTA.DescriptionTA DescriptionYJMS Transport Adaptor
TransportLayer.JMSTA.DllNameTA library file name. In case this parameter is not specified, the TransportLayer.JMSTA.AdapterId is applied to define the adapter's library by IDY
TransportLayer.JMSTA.AdapterId

The parameter to define the adapter's library by ID. In case this parameter is not specified, or TransportLayer.JMSTA.DllName parameter is specified too, the TransportLayer.JMSTA.DllName is applied

Info

This parameter is applicable since FIXEdge C++ version 6.14.0

Required value: JMS

N
TransportLayer.JMSTA.JVMOptionsFileTA configuration file nameY
TransportLayer.JMSTA.AllowRejectMessagesWhen option is true, JMS rejects messages if unable to send to the MQ or error was fired. False by default.Nfalse
TransportLayer.JMSTA.AllowRepeatedStatusNotificationWhen option is true, JMS allows to call onLogout() callback if no onLogon() callback was called. False by default.Nfalse
TransportLayer.JMSTA.ConnectionNamesComma delimited list of TA connections.
Separate configuration section for each listed connection should be specified
Y
TransportLayer.JMSTA.ClientNamesComma delimited list of TA clients.
Separate configuration section for each listed client should be specified
Y
TransportLayer.JMSTA.FIXVersionIn every session, FIX messages use a particular version of the FIX protocol. Use this parameter to set the version of the FIX protocol for a given session.
 
Acceptable values:
FIX40, FIX41, FIX42, FIX43, FIX44, FIX50, FIX50SP1, FIX50SP2.
NFIX44
Connections parameters
TransportLayer.JMSTA.Connection.[ConnectionName].InitialContextFactory

JNDI option. The fully qualified class name of the factory class that will create the initial context. An initial context is the starting point for naming operations.

C, required if JNDI mechanism is used
TransportLayer.JMSTA.Connection.[ConnectionName].ProviderURIJMS provider URI that defines where the Connection that is created is to connect to as well as the protocol that should be used, for example TCP/IP. Additionally configuration information can be encoded in the URI.Y
TransportLayer.JMSTA.Connection.[ConnectionName].UserUser nameY
TransportLayer.JMSTA.Connection.[ConnectionName].PasswordUser PasswordY
TransportLayer.JMSTA.Connection.[ConnectionName].ConnectionFactoryJNDI option. Connection factory object name in the JNDI object store.C, required if JNDI mechanism is used
TransportLayer.JMSTA.Connection.[ConnectionName].ReconnectEnables or disables reconnect procedure for connection restoreNfalse
TransportLayer.JMSTA.Connection.[ConnectionName].ReconnectTriesNumber of reconnect tries or -1 for an infinite number of attemptsN3
TransportLayer.JMSTA.Connection.[ConnectionName].ReconnectIntervalFixed interval in milliseconds between reconnection attemptsN2000
Clients parameters
TransportLayer.JMSTA.Client.[ClientName].ConnectionNameName of primary connection used by client. Connection should be registered in ConnectionNames enumeration and has all required parametersY
TransportLayer.JMSTA.Client.[ClientName].StorageDirDirectory where persistence file is stored in case the communication problemY, if persistent mode is enabled
TransportLayer.JMSTA.Client.[ClientName].SessionType

Session type:

  • Producer - session is a message producer
  • Consumer - session is a message consumer
Y
TransportLayer.JMSTA.Client.[ClientName].MessagingMode

Session messaging mode:

Queue - Point-To-Point. Each message is addressed to a specific queue, and receiving clients extract messages from the queue(s) established to hold their messages. Queues retain all messages sent to them until the messages are consumed or until the messages expire.

Topic - Publish/Subscribe. In a pub/sub product or application, clients address messages to a topic. Publishers and subscribers are generally anonymous and may dynamically publish or subscribe to the content hierarchy. The system takes care of distributing the messages arriving from a topic’s multiple publishers to its multiple subscribers. Topics retain messages only as long as it takes to distribute them to current subscribers.
Y
TransportLayer.JMSTA.Client.[ClientName].DestinationURIURI of session destination (Queue name)Y
TransportLayer.JMSTA.Client.[ClientName].DeliveryMode

Specifies whether sent messages are lost if the JMS provider fails.

Persist - instructs the JMS provider to take extra care to ensure that a message is not lost in transit in case of a JMS provider failure. A message sent with this delivery mode is logged to stable storage when it is sent.

NoPersist - does not require the JMS provider to store the message or otherwise guarantee that it is not lost if the provider fails.

NOTE: used only for Producer sessions.

NPersist
TransportLayer.JMSTA.Client.[ClientName].TimeToLiveThis value defines a message expiration time (in milliseconds) that is the sum of the message's time-to-live and the GMT when it is sent (for transacted sends, this is the time the client sends the message, not the time the transaction is committed). Setting parameter value to "0" will lead to infinite TTL.Y3000
TransportLayer.JMSTA.Client.[ClientName].SessionAckMode

Defines mode in which the Session will acknowledge the messages that it receives and dispatches.

Auto - With this acknowledgement mode, the session automatically acknowledges a client's receipt of a message either when the session has successfully returned from a call to receive or when the message listener the session has called to process the message successfully returns.

Client - With this acknowledgement mode, the client acknowledges a consumed message by calling the message's acknowledge method. Acknowledging a consumed message acknowledges all messages that the session has consumed. When client acknowledgement mode is used, a client may build up a large number of unacknowledged messages while attempting to process them.

DupsOk - This acknowledgement mode instructs the session to lazily acknowledge the delivery of messages. This is likely to result in the delivery of some duplicate messages if the JMS provider fails, so it should only be used by consumers that can tolerate duplicate messages. Use of this mode can reduce session overhead by minimizing the work the session does to prevent duplicates.

NAuto
TransportLayer.JMSTA.Client.[ClientName].MessageType

JMS Message type used for this session.

Bytes - A stream of interpreted bytes. This message type is for literally encoding a body to match an existing message format.

Text - Data is stored as a string. This message type is useful for exchanging simple text messages and for more complex character data, such as XML documents.

Custom - The ability to use your own message type. This message type is useful for adaptation to already existing systems. For this message type property TransportLayer.JMSTA.Client.[ClientName].CustomMessageType is required.

Y
TransportLayer.JMSTA.Client.[ClientName].CustomMessageType

Class of custom message type implementation. This should be the implementation of one of the interfaceinterfaces:
com.epam.fixengine.jms.client.consumer.IFromMessageConverter
com.epam.fixengine.jms.client.consumer.IToMessageConverter
com.epam.fe.converter.SimpleTextMessageWithHeaderConverter

NOTE: used only for Custom message type.

Y, if MessageType is Custom
TransportLayer.JMSTA.Client.[ClientName].Transacted

Sending/consuming of messages in the session is transacted.

true - transacted.

false - not transacted. The value is used by default.

Nfalse
TransportLayer.JMSTA.Client.[ClientName].TransactionBatchSize

Max number of message for one transaction. Take from queue the available number of message but no more than that specified in this property.

NOTE: used only if transacted is enabled.

N20
TransportLayer.JMSTA.Client.[ClientName].QueueSizeMax number of messages in queue. Message is queued until successfully sent. Waiting for space to become available if the queue is full.N100
TransportLayer.JMSTA.Client.[ClientName].QueuePersistent

Store messages in the file until

it

they are committed

. It

which allows

to restore

restoring and

send

sending messages after a sudden

cardiac

application shutdown.

true

 –

– to save messages in the file storage (persistent queue) with parallel saving in memory.

false

 – in

– to save messages in the in-memory queue.

Faster

This approach is faster but less safe

,

since some messages may be lost after restart.

Info

'QueuePersistent = true' is used to keep queued messages only in file storage, without parallel storing in memory since the JMS TA 1.3.10 version. 

Nfalse
TransportLayer.JMSTA.Client.[ClientName].QueueNormalFileSize

After reaching this size, adapter waits when the queue will be empty for to truncate file. File size in Mbytes.

NOTE: used only for persistent queue.

N10
TransportLayer.JMSTA.Client.[ClientName].QueueMaxFileSize

After reaching this size, adapter truncate the file and overwrites the messages that are queued. File size in Mbytes.

NOTE: used only for persistent queue.

N50
TransportLayer.JMSTA.Client.[ClientName].DurableSubscription

Durable topic subscriptions allows receiving messages published while the subscriber is not active. Durable subscriptions offer the reliability of queues to the publish/subscribe message domain.

true - Subscription is durable.

false - Subscription is not durable.

NOTE:

  • used only for Consumer sessions.
  • checks that Producer sends messages with Persistent delivery mode.
Nfalse
TransportLayer.JMSTA.Client.[ClientName].DurableSubscriptionNameDurable subscription name.Y, required if DurableSubscription set to true.
TransportLayer.JMSTA.Client.[ClientName].ConnectionsCount

Number of JMS connections.

Adaptor will open given amount of connections to JMS server for given session to send simultaneously.

NOTE:Please pay attention that if a number of connection is greater then 1 that there is no guaranty that messages will be placed to JMS in the same order they were received by adapter.

N1
TransportLayer.JMSTA.Client.[ClientName].ThreadsPerConnection

Number of threads per one JMS connection. Adaptor will open given amount of JMS sessions for each JMS connection to send simultaneously.

NOTE: Please pay attention that if a number of thread per connection is greater then 1 that there is no guaranty that messages will be placed to JMS in the same order they were received by adapter.

N1

...

FIXEdge C++ provides Start operation for Disconnected JMS TA sessions and Stop operation for Connecting and Running JMS TA sessions on request from the subscribed monitoring application.

Please refer to the Transport adaptor operations for FIXEdge C++ page for additional details about Start and Stop operations.

...