Class ReliableTopicConfig

java.lang.Object
com.hazelcast.config.ReliableTopicConfig
All Implemented Interfaces:
NamedConfig, UserCodeNamespaceAwareConfig<ReliableTopicConfig>, DataSerializable, IdentifiedDataSerializable, com.hazelcast.nio.serialization.impl.Versioned

public class ReliableTopicConfig extends Object implements IdentifiedDataSerializable, NamedConfig, com.hazelcast.nio.serialization.impl.Versioned, UserCodeNamespaceAwareConfig<ReliableTopicConfig>
Configuration for a reliable ITopic.

The reliable topic makes use of a Ringbuffer to store the actual messages.

To configure the ringbuffer for a reliable topic, define a ringbuffer in the config with exactly the same name. It is very unlikely that you want to run with the default settings.

When a ReliableTopic starts, it will always start from the tail+1 item from the RingBuffer. It will not chew its way through all available events, but it will wait for the next item being published.

In the reliable topic, global order is always maintained, so all listeners will observe exactly the same order of sequence of messages.

  • Field Details

    • DEFAULT_READ_BATCH_SIZE

      public static final int DEFAULT_READ_BATCH_SIZE
      The default read batch size.
      See Also:
    • DEFAULT_TOPIC_OVERLOAD_POLICY

      public static final TopicOverloadPolicy DEFAULT_TOPIC_OVERLOAD_POLICY
      The default slow consumer policy.
    • DEFAULT_STATISTICS_ENABLED

      public static final boolean DEFAULT_STATISTICS_ENABLED
      Default value for statistics enabled.
      See Also:
  • Constructor Details

    • ReliableTopicConfig

      public ReliableTopicConfig()
    • ReliableTopicConfig

      public ReliableTopicConfig(String name)
      Creates a new ReliableTopicConfig with default settings.
    • ReliableTopicConfig

      public ReliableTopicConfig(ReliableTopicConfig config)
      Creates a new ReliableTopicConfig by cloning an existing one.
      Parameters:
      config - the ReliableTopicConfig to clone
  • Method Details

    • setName

      public ReliableTopicConfig setName(String name)
      Sets the name of the reliable topic.
      Specified by:
      setName in interface NamedConfig
      Parameters:
      name - the name of the reliable topic
      Returns:
      the updated ReliableTopicConfig
      Throws:
      IllegalArgumentException - if name is null
    • getName

      public String getName()
      Gets the name of the reliable topic.
      Specified by:
      getName in interface NamedConfig
      Returns:
      the name of the reliable topic
    • getTopicOverloadPolicy

      public TopicOverloadPolicy getTopicOverloadPolicy()
      Gets the TopicOverloadPolicy for this reliable topic.
      Returns:
      the TopicOverloadPolicy
    • setTopicOverloadPolicy

      public ReliableTopicConfig setTopicOverloadPolicy(TopicOverloadPolicy topicOverloadPolicy)
      Sets the TopicOverloadPolicy for this reliable topic. Check the TopicOverloadPolicy for more details about this setting.
      Parameters:
      topicOverloadPolicy - the new TopicOverloadPolicy
      Returns:
      the updated reliable topic config
      Throws:
      IllegalArgumentException - if topicOverloadPolicy is null
    • getExecutor

      public Executor getExecutor()
      Gets the Executor that is going to process the events.

      If no Executor is selected, then the ExecutionService.ASYNC_EXECUTOR is used.

      Returns:
      the Executor used to process events
      See Also:
    • setExecutor

      public ReliableTopicConfig setExecutor(Executor executor)
      Sets the executor that is going to process the event.

      In some cases it is desirable to set a specific executor. For example, you may want to isolate a certain topic from other topics because it contains long-running messages or very high priority messages.

      A single executor can be shared between multiple Reliable topics, although it could take more time to process a message. If a single executor is not shared with other reliable topics, then the executor only needs to have a single thread.

      Parameters:
      executor - the executor. if the executor is null, the ExecutionService.ASYNC_EXECUTOR will be used to process the event
      Returns:
      the updated config
    • getReadBatchSize

      public int getReadBatchSize()
      Gets the maximum number of items to read in a batch. Returned value will always be equal or larger than 1.
      Returns:
      the read batch size
    • setReadBatchSize

      public ReliableTopicConfig setReadBatchSize(int readBatchSize)
      Sets the read batch size.

      The ReliableTopic tries to read a batch of messages from the ringbuffer. It will get at least one, but if there are more available, then it will try to get more to increase throughput. The maximum read batch size can be influenced using the read batch size.

      Apart from influencing the number of messages to retrieve, the readBatchSize also determines how many messages will be processed by the thread running the MessageListener before it returns back to the pool to look for other MessageListeners that need to be processed. The problem with returning to the pool and looking for new work is that interacting with an executor is quite expensive due to contention on the work-queue. The more work that can be done without retuning to the pool, the smaller the overhead.

      If the readBatchSize is 10 and there are 50 messages available, 10 items are retrieved and processed consecutively before the thread goes back to the pool and helps out with the processing of other messages.

      If the readBatchSize is 10 and there are 2 items available, 2 items are retrieved and processed consecutively.

      If the readBatchSize is an issue because a thread will be busy too long with processing a single MessageListener and it can't help out other MessageListeners, increase the size of the threadpool so the other MessageListeners don't need to wait for a thread, but can be processed in parallel.

      Parameters:
      readBatchSize - the maximum number of items to read in a batch
      Returns:
      the updated reliable topic config
      Throws:
      IllegalArgumentException - if the readBatchSize is smaller than 1
    • isStatisticsEnabled

      public boolean isStatisticsEnabled()
      Checks if statistics are enabled for this reliable topic.
      Returns:
      true if enabled, false otherwise
    • setStatisticsEnabled

      public ReliableTopicConfig setStatisticsEnabled(boolean statisticsEnabled)
      Enables or disables statistics for this reliable topic. Collects the creation time, total number of published and received messages for each member locally.
      Parameters:
      statisticsEnabled - true to enable statistics, false to disable
      Returns:
      the updated reliable topic config
    • setMessageListenerConfigs

      public ReliableTopicConfig setMessageListenerConfigs(List<ListenerConfig> listenerConfigs)
      Sets the list of message listeners (listens for when messages are added or removed) for this topic.
      Parameters:
      listenerConfigs - the list of message listeners for this topic
      Returns:
      this updated topic configuration
    • getMessageListenerConfigs

      public List<ListenerConfig> getMessageListenerConfigs()
      Gets the list of message listeners (listens for when messages are added or removed) for this reliable topic.
      Returns:
      list of MessageListener configurations
    • addMessageListenerConfig

      public ReliableTopicConfig addMessageListenerConfig(ListenerConfig listenerConfig)
      Adds a message listener (listens for when messages are added or removed) to this reliable topic.
      Parameters:
      listenerConfig - the ListenerConfig to add
      Returns:
      the updated config
      Throws:
      NullPointerException - if listenerConfig is null
    • getUserCodeNamespace

      @Nullable public String getUserCodeNamespace()
      Retrieve the User Code Deployment Namespace to be used for ClassLoader awareness during operations related to the structure associated with this configuration.
      Specified by:
      getUserCodeNamespace in interface UserCodeNamespaceAwareConfig<ReliableTopicConfig>
      Returns:
      Namespace Name for use with the UserCodeNamespaceService, or null if there is no User Code Namespace to associate with.
    • setUserCodeNamespace

      public ReliableTopicConfig setUserCodeNamespace(@Nullable String userCodeNamespace)
      Associates the provided Namespace Name with this structure for ClassLoader awareness.

      The behaviour of setting this to null is outlined in the documentation for UserCodeNamespaceAwareConfig.DEFAULT_NAMESPACE.

      Specified by:
      setUserCodeNamespace in interface UserCodeNamespaceAwareConfig<ReliableTopicConfig>
      Parameters:
      userCodeNamespace - The ID of the Namespace to associate with this structure.
      Returns:
      the updated ReliableTopicConfig instance
      Since:
      5.4
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getFactoryId

      public int getFactoryId()
      Description copied from interface: IdentifiedDataSerializable
      Returns DataSerializableFactory factory ID for this class.
      Specified by:
      getFactoryId in interface IdentifiedDataSerializable
      Returns:
      factory ID
    • getClassId

      public int getClassId()
      Description copied from interface: IdentifiedDataSerializable
      Returns type identifier for this class. It should be unique per DataSerializableFactory.
      Specified by:
      getClassId in interface IdentifiedDataSerializable
      Returns:
      type ID
    • writeData

      public void writeData(ObjectDataOutput out) throws IOException
      Description copied from interface: DataSerializable
      Writes object fields to output stream
      Specified by:
      writeData in interface DataSerializable
      Parameters:
      out - output
      Throws:
      IOException - if an I/O error occurs. In particular, an IOException may be thrown if the output stream has been closed.
    • readData

      public void readData(ObjectDataInput in) throws IOException
      Description copied from interface: DataSerializable
      Reads fields from the input stream
      Specified by:
      readData in interface DataSerializable
      Parameters:
      in - input
      Throws:
      IOException - if an I/O error occurs. In particular, an IOException may be thrown if the input stream has been closed.
    • equals

      public final boolean equals(Object o)
      Overrides:
      equals in class Object
    • hashCode

      public final int hashCode()
      Overrides:
      hashCode in class Object