Ejemplo n.º 1
0
        protected BaseKafkaService(IOptions <KafkaOptions> option)
        {
            Console.WriteLine(JsonConvert.SerializeObject(option));

            try
            {
                var publisher = option.Value.Publishers.First(i => i.ServiceName == this.GetType().Name);
                if (publisher != null)
                {
                    _publisher         = publisher;
                    _schemaRegistryUrl =
                        $"{option.Value.Servers.SchemaRegistry.PublicIp}:{option.Value.Servers.SchemaRegistry.Port}";
                    _avroSerializerConfig = new AvroSerializerConfig
                    {
                        BufferBytes         = 500,
                        AutoRegisterSchemas = true
                    };
                    _producerConfig = new ProducerConfig
                    {
                        BootstrapServers = GenerateKafkaBrokerString(option.Value),
                        SocketTimeoutMs  = 5000,
                        MessageTimeoutMs = 5000,
                        RequestTimeoutMs = 5000
                    };
                }
            }
            catch (Exception)
            {
                Console.WriteLine("Failed to find Publisher information for service class {0}", this.GetType().Name);
            }
        }
        public async Task PublishAsync_should_throw_when_message_null()
        {
            var executor = NSubstitute.Substitute.For <IKafkaPublisherExecutor>();
            var factory  = NSubstitute.Substitute.For <IQueueReferenceFactory>();
            var sut      = new KafkaPublisher(executor, factory);

            await Assert.ThrowsAsync <ArgumentNullException>(async() => await sut.PublishAsync(null));
        }
        public void KafkaPublisher_SendMessage()
        {
            //Setup
            _mockProducer.Setup(x => x.ProduceAsync(It.IsAny <string>(), It.IsAny <Message <string, string> >(), default(CancellationToken)));
            //Act
            var objectUnderTest = new KafkaPublisher(_mockLogger.Object, _mockProducer.Object);

            objectUnderTest.SendMessage("One", "Two", new Guid());
            //Verify
            _mockProducer.Verify(x => x.ProduceAsync(It.IsAny <string>(), It.IsAny <Message <string, string> >(), default(CancellationToken)), Times.Once());
        }
        public void KafkaPublisher_SendMessage_When_Exception()
        {
            //Setup
            _mockProducer.Setup(x => x.ProduceAsync(It.IsAny <string>(), It.IsAny <Message <string, string> >(), default(CancellationToken)))
            .ThrowsAsync(new Exception());
            //Act
            var objectUnderTest = new KafkaPublisher(_mockLogger.Object, _mockProducer.Object);

            objectUnderTest.SendMessage(null, null, new Guid());
            //Verify
            _mockProducer.Verify(x => x.ProduceAsync(It.IsAny <string>(), It.IsAny <Message <string, string> >(), default(CancellationToken)), Times.Once());
            _mockLogger.Verify(x => x.Log(LogLevel.Error, It.IsAny <EventId>(), It.IsAny <FormattedLogValues>(), It.IsAny <Exception>(), It.IsAny <Func <object, Exception, string> >()), Times.AtLeastOnce());
        }
Ejemplo n.º 5
0
        public BaseKafkaService(KafkaOptions option)
        {
            Console.WriteLine(JsonConvert.SerializeObject(option));
            try
            {
                var publisher = option.Publishers.First(i => i.ServiceName == this.GetType().Name);
                _publisher = publisher;

                _producerConfig = new ProducerConfig
                {
                    BootstrapServers = GenerateKafkaBrokerString(option),
                    RequestTimeoutMs = 5000,
                };
            }
            catch (Exception)
            {
                Console.WriteLine("Failed to find Publisher information for service class {0}", this.GetType().Name);
            }
        }
        public async Task PublishAsync_should_throw_when_publish_fails()
        {
            var message   = DummyMessage.New();
            var queueRefs = new QueueReferences("lorem", "ipsum");

            var executor = NSubstitute.Substitute.For <IKafkaPublisherExecutor>();

            executor.PublishAsync(message, queueRefs.TopicName, null, Arg.Any <CancellationToken>())
            .Returns(new DeliveryReport <Guid, byte[]>()
            {
                Status = PersistenceStatus.NotPersisted
            });

            var factory = NSubstitute.Substitute.For <IQueueReferenceFactory>();

            factory.Create(message).ReturnsForAnyArgs(queueRefs);

            var sut = new KafkaPublisher(executor, factory);

            await Assert.ThrowsAsync <InvalidOperationException>(async() => await sut.PublishAsync(message));
        }
        public async Task PublishAsync_publish_message()
        {
            var message   = DummyMessage.New();
            var queueRefs = new QueueReferences("lorem", "ipsum");

            var executor = NSubstitute.Substitute.For <IKafkaPublisherExecutor>();

            executor.PublishAsync(message, queueRefs.TopicName, null, Arg.Any <CancellationToken>())
            .Returns(new DeliveryReport <Guid, byte[]>()
            {
                Status = PersistenceStatus.Persisted
            });

            var factory = NSubstitute.Substitute.For <IQueueReferenceFactory>();

            factory.Create(message).ReturnsForAnyArgs(queueRefs);

            var sut = new KafkaPublisher(executor, factory);

            await sut.PublishAsync(message);

            await executor.Received(1)
            .PublishAsync(message, queueRefs.TopicName);
        }
        public void KafkaPublisher_ObjectExists()
        {
            var objectUnderTest = new KafkaPublisher(_mockLogger.Object, _mockProducer.Object);

            Assert.NotNull(objectUnderTest);
        }