Does EMA handle connection failover like RFA?

Within RFA, they include a very useful feature called "Warm Standby". This is highlighted within the "Features of RFA" section that I'm presently using that will automatically failover to a standby connection if my primary connection fails. Do I get something similar if I use EMA?

Best Answer

  • No, EMA and the underlying UPA ValueAdd library do not support warm standby only cold standby.

    For EMA here is a summary:

    v3.0.1 - Fixes cold standby support.
    v3.0.0 - No standby support at all.

    Hot standby support is only implemented within TREP as part of the ADH server.

Answers

  • @Ripley79, the connection failover is listed in the new features of EMA 3.0.1.

    image

    My configuration is as follows:

    <ConsumerGroup>
    <!-- DefaultConsumer parameter defines which consumer configuration is used by OmmConsumer -->
    <!-- if application does not specify it through OmmConsumerConfig::consumerName() -->
    <!-- first consumer on the ConsumerList is a default consumer if this parameter is not specified -->
    <DefaultConsumer value="Consumer_3"/>
    <ConsumerList>
    <Consumer>
    <Name value="Consumer_1"/>


    <!-- Channel is optional: defaulted to "RSSL_SOCKET + localhost + 14002" -->
    <Channel value="Channel_1"/>


    <!-- Logger is optional: defaulted to "File + Success" -->
    <Logger value="Logger_1"/>


    <!-- Dictionary is optional: defaulted to "ChannelDictionary" -->
    <Dictionary value="Dictionary_1"/>
    </Consumer>
    <Consumer>
    <Name value="Consumer_2"/>
    <!-- ChannelSet is optional: defaulted to "RSSL_SOCKET + localhost + 14002" -->
    <ChannelSet value="Channel_1, Channel_2"/>
    <Logger value="Logger_2"/>
    <Dictionary value="Dictionary_2"/>
    </Consumer>
    <Consumer>
    <Name value="Consumer_3"/>
    <!-- ChannelSet is optional -->
    <ChannelSet value="Channel_1, Channel_2"/>
    <!-- Logger is optional: defaulted to "File + Success" -->
    <Logger value="Logger_1"/>
    <!-- Dictionary is optional: defaulted to "ChannelDictionary" -->
    <Dictionary value="Dictionary_1"/>
    </Consumer>
    </ConsumerList>
    </ConsumerGroup>
    <ChannelGroup>
    <ChannelList>
    <Channel>
    <Name value="Channel_1"/>


    <!-- ChannelType possible values are: -->
    <!-- ChannelType::RSSL_SOCKET - TCP IP connection type -->
    <!-- ChannelType::RSSL_HTTP - Http tunnel connection type -->
    <!-- ChannelType::RSSL_ENCRYPTED - Https tunnel connection type -->
    <!-- ChannelType::RSSL_RELIABLE_MCAST - Reliable multicast connection type -->
    <ChannelType value="ChannelType::RSSL_SOCKET"/>


    <!-- CompressionType is optional: defaulted to None -->
    <!-- possible values: None, ZLib, LZ4 -->
    <CompressionType value="CompressionType::None"/>
    <GuaranteedOutputBuffers value="5000"/>


    <!-- ConnectionPingTimeout is optional: defaulted to 30000 -->
    <ConnectionPingTimeout value="30000"/>
    <!-- TcpNodelay is optional: defaulted to 1 -->
    <!-- possible values: 1 (tcp_nodelay option set), 0 (tcp_nodelay not set) -->
    <TcpNodelay value="1"/>
    <Host value="apis23"/>
    <Port value="14002"/>
    <XmlTraceToFile value="1"/>
    </Channel>
    <Channel>
    <Name value="Channel_2"/>
    <ChannelType value="ChannelType::RSSL_SOCKET"/>
    <CompressionType value="CompressionType::None"/>
    <GuaranteedOutputBuffers value="5000"/>
    <Host value="localhost"/>
    <Port value="14002"/>
    </Channel>

    The DefaultConsumer was set to Consumer_3, so my EMA consumer app connected to the host listed in Channel_1. When the ADS in Channel_1 went down, my app switched to another provider running on localhost as expected.

  • That is cold standby, not warm standby.