Exemplo n.º 1
0
 public Consumer(string id, ConsumerSetting setting, string groupName)
 {
     Id = id;
     Setting = setting ?? new ConsumerSetting();
     GroupName = groupName;
     _remotingClient = new SocketRemotingClient(Setting.BrokerAddress, Setting.BrokerPort);
     _binarySerializer = ObjectContainer.Resolve<IBinarySerializer>();
     _scheduleService = ObjectContainer.Resolve<IScheduleService>();
     _offsetStore = Setting.MessageModel == MessageModel.Clustering ? ObjectContainer.Resolve<IRemoteBrokerOffsetStore>() as IOffsetStore : ObjectContainer.Resolve<ILocalOffsetStore>() as IOffsetStore;
     _allocateMessageQueueStragegy = ObjectContainer.Resolve<IAllocateMessageQueueStrategy>();
     _logger = ObjectContainer.Resolve<ILoggerFactory>().Create(GetType().Name);
 }
Exemplo n.º 2
0
 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
                                        )
                                    ));
 }
Exemplo n.º 3
0
        public PullRequest(
            string consumerId,
            string groupName,
            MessageQueue messageQueue,
            SocketRemotingClient remotingClient,
            MessageHandleMode messageHandleMode,
            IMessageHandler messageHandler,
            IOffsetStore offsetStore,
            PullRequestSetting setting)
        {
            ConsumerId = consumerId;
            GroupName = groupName;
            MessageQueue = messageQueue;
            ProcessQueue = new ProcessQueue();

            _queueOffset = -1;
            _remotingClient = remotingClient;
            _setting = setting;
            _messageHandleMode = messageHandleMode;
            _messageHandler = messageHandler;
            _offsetStore = offsetStore;
            _messageQueue = new BlockingCollection<WrappedMessage>(new ConcurrentQueue<WrappedMessage>());
            _handlingMessageDict = new ConcurrentDictionary<long, WrappedMessage>();
            _pullMessageWorker = new Worker(() =>
            {
                try
                {
                    PullMessage();
                }
                catch (Exception ex)
                {
                    if (!_stoped)
                    {
                        _logger.Error(string.Format("[{0}]: PullMessage has unknown exception. PullRequest: {1}.", ConsumerId, this), ex);
                    }
                }
            });
            _handleMessageWorker = new Worker(HandleMessage);
            _binarySerializer = ObjectContainer.Resolve<IBinarySerializer>();
            _logger = ObjectContainer.Resolve<ILoggerFactory>().Create(GetType().Name);
        }
Exemplo n.º 4
0
    /// <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)
            );
    }
Exemplo n.º 5
0
 public OffsetStoreExactlyOnceStrategyImplementation(IOffsetStore offsetStore)
 {
     _offsetStore = offsetStore;
 }