コード例 #1
0
 public async Task <ConfluentResponse <List <BinaryMessage> > > ConsumeAsBinaryAsync(
     ConsumerInstance consumerInstance,
     string topic,
     CancellationToken cancellationToken)
 {
     return(await ConsumeAsBinaryAsync(consumerInstance, topic, null, cancellationToken).ConfigureAwait(false));
 }
コード例 #2
0
 public async Task <ConfluentResponse <List <BinaryMessage> > > ConsumeAsBinaryAsync(
     ConsumerInstance consumerInstance,
     string topic,
     int maxBytes)
 {
     return(await ConsumeAsBinaryAsync(consumerInstance, topic, maxBytes, CancellationToken.None).ConfigureAwait(false));
 }
コード例 #3
0
 public async Task <ConfluentResponse <List <AvroMessage <TKey, TValue> > > > ConsumeAsAvroAsync <TKey, TValue>(
     ConsumerInstance consumerInstance,
     string topic)
     where TKey : class
     where TValue : class
 {
     return(await ConsumeAsAvroAsync <TKey, TValue>(consumerInstance, topic, null, CancellationToken.None).ConfigureAwait(false));
 }
コード例 #4
0
ファイル: RxConsumer.cs プロジェクト: mnglaese/Kafka.Rx.NET
        /// <summary>
        /// This assumes that a topic has only one type.  Jay Kreps recommends separating different event types
        /// into different topics at http://www.confluent.io/blog/stream-data-platform-2/.  Besides, heterogeneous-event
        /// topics aren't directly supported by the driver.
        /// </summary>
        /// <returns></returns>
        private static async Task <ConfluentResponse <List <AvroMessage <TK, TV> > > > ConsumeOnceAsync(
            IConfluentClient confluentClient,
            ConsumerInstance consumerInstance,
            string topic)

        {
            return(await confluentClient.ConsumeAsAvroAsync <TK, TV>(consumerInstance, topic));
        }
コード例 #5
0
        /// <summary>
        /// At the moment this just listens to the stream
        /// </summary>
        //[Test]
        //[Category("Integration")]
        public void KafkaObservable_Should_Provide_An_Observable_Stream()
        {
            // Arrange
            String           instanceId        = "0";
            string           consumerGroupName = "rxtestgroup";
            string           topic             = "rxtest";
            ConsumerInstance consumerInstance  = null;

            using (var client = Setup.CreateConfluentClient("http://199.204.211.42:8082"))
            //using (var client = Setup.CreateConfluentClient("http://192.168.79.137:8082"))
            {
                try
                {
                    // in production this should be written without blocking.
                    consumerInstance = Setup.ConsumerInstance(client, instanceId, consumerGroupName);
                    var consumer = new RxConsumer <String, RxConsumerTests.LogMessage>(client, consumerInstance, topic);

                    // Act
                    var observable = consumer.GetRecordStream(
                        TimeSpan.FromSeconds(5), ThreadPoolScheduler.Instance)
                                     .Take(10)
                                     .Subscribe(successResult =>
                    {
                        Console.WriteLine("Success: " + successResult.IsSuccess);
                        if (successResult.IsSuccess)
                        {
                            Console.WriteLine(successResult.Value.Key + "=" + successResult.Value.Value.Message);
                        }
                        else
                        {
                            Console.WriteLine("ERROR: " + successResult.Exception.Message);
                        }
                    },
                                                () => Console.WriteLine("COMPLETED.") // not sure how to cancel this...
                                                );

                    Thread.Sleep(15000);
                    Console.WriteLine("Disposing observer");
                    observable.Dispose();
                }
                finally
                {
                    if (consumerInstance != null)
                    {
                        Console.WriteLine("Destroying instance");
                        client.DeleteConsumerAsync(consumerInstance);
                    }
                }
            }

            // Assert
            //Assert.Fail("Not Implemented Yet");
        }
コード例 #6
0
        private async Task <ConfluentResponse <List <BinaryMessage> > > ConsumeAsBinaryAsync(
            ConsumerInstance consumerInstance,
            string topic,
            int?maxBytes,
            CancellationToken cancellationToken)
        {
            string requestUri = BuildConsumeRequestUri(topic, maxBytes);

            HttpRequestMessage request = CreateRequestMessage(HttpMethod.Get, requestUri, consumerInstance.BaseUri)
                                         .WithContentType(ContentTypeKafkaBinary)
                                         .WithHostHeader(consumerInstance.BaseUri);

            return(await ProcessRequest <List <BinaryMessage> >(request, cancellationToken).ConfigureAwait(false));
        }
コード例 #7
0
        public async Task <ConfluentResponse> DeleteConsumerAsync(ConsumerInstance consumerInstance, CancellationToken cancellationToken)
        {
            HttpRequestMessage request = CreateRequestMessage(HttpMethod.Delete, "", consumerInstance.BaseUri)
                                         .WithContentType(ContentTypeKafkaDefault)
                                         .WithHostHeader(consumerInstance.BaseUri);

            var response = await SendRequest(request, cancellationToken).ConfigureAwait(false);

            if (response.IsSuccessStatusCode)
            {
                return(ConfluentResponse.Success());
            }

            return(ConfluentResponse.Failed(await ReadResponseAs <Error>(response).ConfigureAwait(false)));
        }
コード例 #8
0
        private async Task <ConfluentResponse <List <AvroMessage <TKey, TValue> > > > ConsumeAsAvroAsync <TKey, TValue>(
            ConsumerInstance consumerInstance,
            string topic,
            int?maxBytes,
            CancellationToken cancellationToken)
            where TKey : class
            where TValue : class
        {
            string requestUri = BuildConsumeRequestUri(topic, maxBytes);

            HttpRequestMessage request = CreateRequestMessage(HttpMethod.Get, requestUri, consumerInstance.BaseUri)
                                         .WithContentType(ContentTypeKafkaAvro)
                                         .WithHostHeader(consumerInstance.BaseUri);

            return(await ProcessRequest <List <AvroMessage <TKey, TValue> > >(request, cancellationToken).ConfigureAwait(false));
        }
コード例 #9
0
 public async Task <ConfluentResponse> DeleteConsumerAsync(ConsumerInstance consumerInstance)
 {
     return(await DeleteConsumerAsync(consumerInstance, CancellationToken.None).ConfigureAwait(false));
 }
コード例 #10
0
        public async Task <ConfluentResponse <List <ConsumerOffset> > > CommitOffsetAsync(ConsumerInstance consumerInstance, CancellationToken cancellationToken)
        {
            HttpRequestMessage request = CreateRequestMessage(HttpMethod.Post, "/offsets", consumerInstance.BaseUri)
                                         .WithContentType(ContentTypeKafkaDefault)
                                         .WithHostHeader(consumerInstance.BaseUri);

            return(await ProcessRequest <List <ConsumerOffset> >(request, cancellationToken).ConfigureAwait(false));
        }
コード例 #11
0
 public async Task <ConfluentResponse <List <ConsumerOffset> > > CommitOffsetAsync(ConsumerInstance consumerInstance)
 {
     return(await CommitOffsetAsync(consumerInstance, CancellationToken.None).ConfigureAwait(false));
 }
コード例 #12
0
ファイル: RxConsumer.cs プロジェクト: mnglaese/Kafka.Rx.NET
        //private readonly OffsetCommitter _committer;

        public RxConsumer(IConfluentClient client, ConsumerInstance consumerInstance, String topic)
        {
            _client           = client;
            _consumerInstance = consumerInstance;
            _topic            = topic;
        }
コード例 #13
0
ファイル: CalloutNative.cs プロジェクト: gbachs/DhcpServerApi
        private static uint InitializeConsumers(List <string> AssemblyPaths, bool IgnoreBadFormat)
        {
            if (AssemblyPaths == null || AssemblyPaths.Count == 0)
            {
                return(0x2U); // ERROR_FILE_NOT_FOUND
            }
            var hostAssemblyPath = typeof(CalloutNative).Assembly.Location;
            var proxyTypeName    = typeof(DhcpServerCalloutConsumerProxy).FullName;
            var instances        = new List <ConsumerInstance>(AssemblyPaths.Count);

            try
            {
                foreach (var assemblyPath in AssemblyPaths)
                {
                    var domainSetup = new AppDomainSetup()
                    {
                        ApplicationBase    = Path.GetDirectoryName(assemblyPath),
                        LoaderOptimization = LoaderOptimization.MultiDomain
                    };

                    var instance = new ConsumerInstance()
                    {
                        AssemblyPath = assemblyPath
                    };
                    instances.Add(instance);

                    instance.AppDomain = AppDomain.CreateDomain($"DhcpServerCalloutConsumer: {Path.GetFileName(assemblyPath)}", null, domainSetup);
                    var proxy = (DhcpServerCalloutConsumerProxy)instance.AppDomain.CreateInstanceFromAndUnwrap(hostAssemblyPath, proxyTypeName);

                    var initResult = proxy.TryInitialize(assemblyPath, ApiVersion);

                    if (IgnoreBadFormat && initResult == 0xBU) // ERROR_BAD_FORMAT
                    {
                        // skip assembly
                        instances.Remove(instance);
                        AppDomain.Unload(instance.AppDomain);
                        continue;
                    }

                    if (initResult != ERROR_SUCCESS)
                    {
                        throw new Win32Exception((int)initResult);
                    }

                    instance.Proxy        = proxy;
                    instance.SupportFlags = proxy.GetSupportFlags();
                }
            }
            catch (Exception)
            {
                // dispose and unload previously created instances
                foreach (var instance in instances)
                {
                    try
                    {
                        instance.Proxy?.Dispose();
                        instance.Proxy = null;
                    }
                    catch (Exception) { }

                    if (instance.AppDomain != null)
                    {
                        try
                        {
                            AppDomain.Unload(instance.AppDomain);
                            instance.AppDomain = null;
                        }
                        catch (Exception) { }
                    }
                }

                throw;
            }

            if (instances.Count == 0)
            {
                return(0x2U); // ERROR_FILE_NOT_FOUND
            }
            Consumers            = instances.ToArray();
            ConsumerRequirements = instances.Aggregate(
                (CalloutConsumerSupportFlags)0, (a, i) => a | i.SupportFlags);

            return(ERROR_SUCCESS);
        }
コード例 #14
0
ファイル: Program.cs プロジェクト: mnglaese/Kafka.Rx.NET
        private static void Listen(Options options)
        {
            // Arrange
            String           instanceId        = options.InstanceId;
            string           consumerGroupName = options.ConsumerGroup;
            string           topic             = options.Topic;
            ConsumerInstance consumerInstance  = null;

            Log("Registering group/id: " + options.ConsumerGroup + "/" + options.InstanceId + "\r\n");
            Log("Listening to topic: " + topic + "\r\n");
            Log("Query interval: " + options.Sleep + "ms" + "\r\n");
            using (var client = Setup.CreateConfluentClient(options.BaseUrl))
            {
                try
                {
                    // in production this should be written without blocking.
                    consumerInstance = Setup.ConsumerInstance(client, instanceId, consumerGroupName);
                    var consumer = new RxConsumer <String, LogMessage>(client, consumerInstance, topic);

                    // Act
                    var observable = consumer.GetRecordStream(
                        TimeSpan.FromMilliseconds(options.Sleep),
                        ThreadPoolScheduler.Instance,
                        beforeCallAction: () => Log("."))
                                     .Subscribe(
                        // OnSuccess
                        successResult =>
                    {
                        Log("Success: " + successResult.IsSuccess + "\r\n");
                        if (successResult.IsSuccess)
                        {
                            System.Console.WriteLine(successResult.Value.Key + "=" +
                                                     successResult.Value.Value.Message);
                        }
                        else
                        {
                            System.Console.WriteLine("ERROR: " + successResult.Exception.Message);
                        }
                    },
                        // OnCompleted
                        () => System.Console.WriteLine("COMPLETED.")         // not sure how to cancel this...
                        );

                    System.Console.ReadLine();
                    System.Console.WriteLine("Disposing observer");
                    observable.Dispose();
                }
                catch (Exception ex)
                {
                    System.Console.WriteLine(ex.Message);
                    if (ex.InnerException != null)
                    {
                        System.Console.WriteLine(ex.InnerException.Message);
                    }
                }
                finally
                {
                    if (consumerInstance != null)
                    {
                        Log("Destroying Consumer Instance\r\n");
                        client.DeleteConsumerAsync(consumerInstance);
                        Log("Iterations: " + _iterations);
                    }
                }
            }
        }