/// <summary>
        ///     Initializes a new instance of the <see cref="DurableClientFactory"/> class.
        /// </summary>
        /// <param name="defaultDurableClientOptions">Default Options to Build Durable Clients.</param>
        /// <param name="orchestrationServiceFactory">The factory used to create orchestration service based on the configured storage provider.</param>
        /// <param name="loggerFactory">The logger factory used for extension-specific logging and orchestration tracking.</param>
        /// <param name="durableTaskOptions">The configuration options for this extension.</param>
        /// <param name="messageSerializerSettingsFactory">The factory used to create <see cref="JsonSerializerSettings"/> for message settings.</param>
        public DurableClientFactory(
            IOptions <DurableClientOptions> defaultDurableClientOptions,
            IOptions <DurableTaskOptions> durableTaskOptions,
            IDurabilityProviderFactory orchestrationServiceFactory,
            ILoggerFactory loggerFactory,
            IMessageSerializerSettingsFactory messageSerializerSettingsFactory = null)
        {
            this.logger = loggerFactory.CreateLogger(DurableTaskExtension.LoggerCategoryName);

            this.durabilityProviderFactory   = orchestrationServiceFactory;
            this.defaultDurableClientOptions = defaultDurableClientOptions.Value;
            this.durableTaskOptions          = durableTaskOptions?.Value ?? new DurableTaskOptions();

            this.MessageDataConverter = DurableTaskExtension.CreateMessageDataConverter(messageSerializerSettingsFactory);
            this.TraceHelper          = new EndToEndTraceHelper(this.logger, this.durableTaskOptions.Tracing.TraceReplayEvents);
        }
예제 #2
0
        private IDurableOrchestrationClient GetDurableClient(IOrchestrationServiceClient orchestrationServiceClientMockObject)
        {
            var storageProvider = new DurabilityProvider("test", new Mock <IOrchestrationService>().Object, orchestrationServiceClientMockObject, "test");
            DurableClientOptions durableClientOptions = new DurableClientOptions
            {
                ConnectionName = "Storage",
                TaskHub        = "TestTaskHub",
            };
            DurableTaskOptions          durableTaskOptions          = new DurableTaskOptions();
            DurableClientAttribute      attribute                   = new DurableClientAttribute(durableClientOptions);
            MessagePayloadDataConverter messagePayloadDataConverter = new MessagePayloadDataConverter(new JsonSerializerSettings(), true);
            var traceHelper = new EndToEndTraceHelper(new NullLogger <EndToEndTraceHelper>(), durableTaskOptions.Tracing.TraceReplayEvents);

            var durableOrchestrationClient = (IDurableOrchestrationClient) new DurableClient(storageProvider, null, attribute, messagePayloadDataConverter, traceHelper, durableTaskOptions);

            return(durableOrchestrationClient);
        }
        /// <summary>
        /// Gets a <see cref="IDurableClient"/> using configuration from a <see cref="DurableClientOptions"/> instance.
        /// </summary>
        /// <param name="durableClientOptions">options containing the client configuration parameters.</param>
        /// <returns>Returns a <see cref="IDurableClient"/> instance. The returned instance may be a cached instance.</returns>
        public IDurableClient CreateClient(DurableClientOptions durableClientOptions)
        {
            if (durableClientOptions == null)
            {
                throw new ArgumentException("Please configure 'DurableClientOptions'");
            }

            if (string.IsNullOrWhiteSpace(durableClientOptions.TaskHub))
            {
                throw new ArgumentException("Please provide value for 'TaskHub'");
            }

            DurableClientAttribute attribute = new DurableClientAttribute(durableClientOptions);

            DurableClient client = this.cachedClients.GetOrAdd(
                attribute,
                attr =>
            {
                DurabilityProvider innerClient = this.durabilityProviderFactory.GetDurabilityProvider(attribute);
                return(new DurableClient(innerClient, null, attribute, this.MessageDataConverter, this.TraceHelper, this.durableTaskOptions));
            });

            return(client);
        }
예제 #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DurableClientAttribute"/> class.
 /// </summary>
 /// <param name="durableClientOptions">Options to configure the IDurableClient created.</param>
 public DurableClientAttribute(DurableClientOptions durableClientOptions)
 {
     this.TaskHub        = durableClientOptions.TaskHub;
     this.ConnectionName = durableClientOptions.ConnectionName;
     this.ExternalClient = durableClientOptions.IsExternalClient;
 }