@@ -25,6 +25,8 @@ defmodule Mississippi.Consumer.ConsumersSupervisor do
2525
2626 queues_config = init_arg [ :queues ]
2727
28+ distribution_strategy = distribution_strategy! ( init_arg [ :cluster_distribution_strategy ] )
29+
2830 children = [
2931 { Registry , [ keys: :unique , name: DataUpdater.Registry , members: :auto ] } ,
3032 { Registry , [ keys: :unique , name: MessageTracker.Registry , members: :auto ] } ,
@@ -35,19 +37,19 @@ defmodule Mississippi.Consumer.ConsumersSupervisor do
3537 members: :auto ,
3638 process_redistribution: :active ,
3739 extra_arguments: [ message_handler: message_handler ] ,
38- distribution_strategy: Horde.UniformQuorumDistribution } ,
40+ distribution_strategy: distribution_strategy } ,
3941 { DynamicSupervisor ,
4042 strategy: :one_for_one ,
4143 name: MessageTracker.Supervisor ,
4244 members: :auto ,
4345 process_redistribution: :active ,
44- distribution_strategy: Horde.UniformQuorumDistribution } ,
46+ distribution_strategy: distribution_strategy } ,
4547 { DynamicSupervisor ,
4648 strategy: :one_for_one ,
4749 name: AMQPDataConsumer.Supervisor ,
4850 members: :auto ,
4951 process_redistribution: :active ,
50- distribution_strategy: Horde.UniformQuorumDistribution } ,
52+ distribution_strategy: distribution_strategy } ,
5153 # This will make queue listeners start after re-sharding in a multi-node cluster
5254 { NodeListener , queues_config } ,
5355 # This will make queue listeners start in a single-node cluster
@@ -64,9 +66,11 @@ defmodule Mississippi.Consumer.ConsumersSupervisor do
6466 [
6567 mississippi_config: [
6668 type: :keyword_list ,
69+ default: [ ] ,
6770 keys: [
6871 queues: [
6972 type: :keyword_list ,
73+ default: [ ] ,
7074 keys: [
7175 events_exchange_name: [
7276 type: :string ,
@@ -115,9 +119,20 @@ defmodule Mississippi.Consumer.ConsumersSupervisor do
115119 The module that will be invoked by Mississippi to process incoming messages.
116120 It must implement the `Mississippi.Consumer.DataUpdater.Handler` behaviour.
117121 """
122+ ] ,
123+ cluster_distribution_strategy: [
124+ type: { :in , [ :uniform_quorum , :uniform_random , :uniform ] } ,
125+ default: :uniform_quorum ,
126+ doc: """
127+ The strategy to use for redistributing consumer processes within the cluster.
128+ """
118129 ]
119130 ]
120131 ]
121132 ]
122133 end
134+
135+ defp distribution_strategy! ( :uniform_quorum ) , do: Horde.UniformQuorumDistribution
136+ defp distribution_strategy! ( :uniform_random ) , do: Horde.UniformRandomDistribution
137+ defp distribution_strategy! ( :uniform ) , do: Horde.UniformDistribution
123138end
0 commit comments