public static Props Props <TMessage>( TopicConfig topicConfig, string topicId, Func <string, Offset, Source <KeyValuePair <TMessage, Offset>, NotUsed> > eventStreamFactory, ISerializer serializer, IMessagePropertyExtractor extractor, IOffsetStore offsetStore ) where TMessage : class { return(Akka.Actor.Props.Create(() => new TaggedOffsetProducerActor <TMessage>( topicConfig, topicId, eventStreamFactory, serializer, extractor, offsetStore ) )); }
public void Init(ActorSystem sys, string topicId, ISerializer serializer, IMessagePropertyExtractor extractor) { var config = sys.Settings.Config; foreach (var tag in Tags) { Producer.StartTaggedOffsetProducer <TEvent>( sys, Tags, new TopicConfig(config), topicId, (string entityId, Offset o) => ReadSideStream.Invoke(tag, o), serializer, extractor, new SqlServerOffsetStore( new SqlServerProvider(config).GetconnectionProvider(), new OffsetStoreConfiguration(sys.Settings.Config) ) ); } }
/// <summary> /// Start a Tagged Offset Producer over a cluster distribution /// </summary> /// <param name="system"></param> /// <param name="tags"></param> /// <param name="topicConfig"></param> /// <param name="topicId"></param> /// <param name="Func<string"></param> /// <param name="eventStreamFactory"></param> /// <param name="offsetStore"></param> /// <typeparam name="TMessage"></typeparam> public static void StartTaggedOffsetProducer <TMessage>( ActorSystem system, ImmutableArray <AggregateEventTag> tags, TopicConfig topicConfig, string topicId, Func <string, Offset, Source <KeyValuePair <TMessage, Offset>, NotUsed> > eventStreamFactory, ISerializer serializer, IMessagePropertyExtractor extractor, IOffsetStore offsetStore ) where TMessage : class { var producerConfig = new ProducerConfig(system.Settings.Config); var publisherProps = TaggedOffsetProducerActor.Props <TMessage>( topicConfig, topicId, eventStreamFactory, serializer, extractor, offsetStore ); var backoffPublisherProps = BackoffSupervisor.PropsWithSupervisorStrategy( publisherProps, "producer", producerConfig.MinBackoff, producerConfig.MaxBackoff, producerConfig.RandomBackoffFactor, SupervisorStrategy.StoppingStrategy ); var clusterShardingSettings = ClusterShardingSettings .Create(system) .WithRole(producerConfig.Role); new ClusterDistribution(system) .Start( $"serviceBusProducer-{topicId}", backoffPublisherProps, tags.Select(x => x.Tag).ToArray(), new ClusterDistributionSettings(system, clusterShardingSettings) ); }
private static void RegisterTopic(object t, Service s, ISerializer serializer, IMessagePropertyExtractor extractor, ActorSystem sys) { var topicCall = (ITopicCall)t; if (!(topicCall.TopicHolder is MethodTopicHolder)) { throw new NotImplementedException(); } var producer = ((MethodTopicHolder)topicCall.TopicHolder).Method.Invoke(s, null); typeof(ITaggedOffsetTopicProducer <>) .MakeGenericType(producer.GetType().GetGenericArguments()[0]) .GetMethod("Init") .Invoke(producer, new object[] { sys, topicCall.TopicId.Name, serializer, extractor }); }