Skip to content

Frequently Asked Questions

Richard Warburton edited this page May 22, 2017 · 13 revisions

How do I easily see the internal messages and debug things?

You can switch on debug logging by passing the following commandline parameter: -Dfix.core.debug=true. Different types of debug logging can be enabled through different tags. The available options are in the LogTag class.

You control the Aeron client in the , so how do I alter its configuration options?

If you want to configure the channel through which the Library and Engine talk to each other then you can set the aeronChannel configuration property, if you want more detailed configuration then both the Library and Engine have an aeronContext configuration property.

What are these Engine, Library and Media Driver processes that you refer to?

See the Key Concepts page.

How can I control the replication of messages in a cluster?

In a cluster by default all messages are replicated throughout the cluster. This replication system is a derivative of Raft and provides a linearizable log of the messages.

You can implement a custom SessionReplicationStrategy in order to determine on a session-by-session basis whether the messages of a given session are replicated. If a session's messages isn't replicated they will only be sent out by a node that considers itself to be the leader. However because we don't wait for an acknowledgement before reading or writing the non-replicated messages there is no guarantee that a quorum of cluster members consider this node to be the leader.

How do I know what the leader of the cluster is?

You can register an implementation of the RoleHandler interface on the FixEngine. This will receive callbacks when a node transitions to a leader, follower or candidate. A node that used to be the leader but which has been netsplit can believe that it is still the leader until it re-establishes contact with the rest of the cluster. So the node that is the leader is the one that has the most recent onTransitionToLeader callback invoked. Ordering is defined by the leadershipTerm. If you are communicating with an external system from several nodes (for example updating a virtual IP address that is pointing at the leader) then this ordering can be used to disambiguate out of order messages.

Do you make any assumptions about the hardware that you're running on?

We don't checksum in flight messages, which means that any non-ECC memory is vulnerable to message corruption.

How do I generate custom FIX protocols to use with the Gateway?

The gateway ships with uk.co.real_logic.fix_gateway.dictionary.CodecGenerationTool which generates codecs in the appropriate style for use with the FIX Gateway. By default the gateway depends upon a minimal FIX protocol that just includes the session codecs. If practice you want to exclude these session codecs from the build in order to use a real FIX protocol that a venue has provided, in order to do this simply exclude the project fix-gateway-session-codecs from your dependency graph. An example of this can be seen in the FIX Integration project that generates full FIX 4.2 and 4.4 codecs for the purpose of integration testing.

Clone this wiki locally