Start working subscribing with Kakfa and using it in Basket service.
This commit is contained in:
parent
e1eac82289
commit
08b1404dd4
@ -14,13 +14,18 @@ public class DefaultKafkaPersistentConnection
|
|||||||
: IKafkaPersistentConnection
|
: IKafkaPersistentConnection
|
||||||
{
|
{
|
||||||
|
|
||||||
|
private readonly ILogger<DefaultKafkaPersistentConnection> _logger;
|
||||||
IProducer<byte[], byte[]> _kafkaProducer;
|
IProducer<byte[], byte[]> _kafkaProducer;
|
||||||
|
|
||||||
public DefaultKafkaPersistentConnection(String brokerList)
|
public DefaultKafkaPersistentConnection(String brokerList,
|
||||||
|
ILogger<DefaultKafkaPersistentConnection> logger)
|
||||||
{
|
{
|
||||||
|
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||||
// TODO: fix configuration passing for producer
|
// TODO: fix configuration passing for producer
|
||||||
// for now just assume we give "localhost:9092" as argument
|
// for now just assume we give "localhost:9092" as argument
|
||||||
var conf = new ProducerConfig { BootstrapServers = brokerList };
|
var conf = new ProducerConfig { BootstrapServers = brokerList };
|
||||||
|
|
||||||
|
// TODO maybe we need to retry this? -> as it could fail
|
||||||
_kafkaProducer = new ProducerBuilder<byte[], byte[]>(conf).Build();
|
_kafkaProducer = new ProducerBuilder<byte[], byte[]>(conf).Build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,14 +34,19 @@ public class EventBusKafka : IEventBus, IDisposable
|
|||||||
// map Integration event to kafka message
|
// map Integration event to kafka message
|
||||||
// event name something like OrderPaymentSucceededIntegrationEvent
|
// event name something like OrderPaymentSucceededIntegrationEvent
|
||||||
var message = new Message<string, string> { Key = eventName, Value = jsonMessage };
|
var message = new Message<string, string> { Key = eventName, Value = jsonMessage };
|
||||||
IProducer<string, string> kafkaHandle =
|
var kafkaHandle =
|
||||||
new DependentProducerBuilder<string, string>(_persistentConnection.Handle).Build();
|
new DependentProducerBuilder<string, string>(_persistentConnection.Handle).Build();
|
||||||
kafkaHandle.ProduceAsync(_topicName, message);
|
kafkaHandle.ProduceAsync(_topicName, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Subscribe<T, TH>() where T : IntegrationEvent where TH : IIntegrationEventHandler<T>
|
public void Subscribe<T, TH>() where T : IntegrationEvent where TH : IIntegrationEventHandler<T>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
var eventName = _subsManager.GetEventKey<T>();
|
||||||
|
// DoInternalSubscription(eventName);
|
||||||
|
|
||||||
|
_logger.LogInformation("Subscribing to event {EventName} with {EventHandler}", eventName, typeof(TH).GetGenericTypeName());
|
||||||
|
|
||||||
|
_subsManager.AddSubscription<T, TH>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SubscribeDynamic<TH>(string eventName) where TH : IDynamicIntegrationEventHandler
|
public void SubscribeDynamic<TH>(string eventName) where TH : IDynamicIntegrationEventHandler
|
||||||
|
@ -54,6 +54,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\..\BuildingBlocks\EventBus\EventBusKafka\EventBusKafka.csproj" />
|
||||||
<ProjectReference Include="..\..\..\BuildingBlocks\EventBus\EventBusRabbitMQ\EventBusRabbitMQ.csproj" />
|
<ProjectReference Include="..\..\..\BuildingBlocks\EventBus\EventBusRabbitMQ\EventBusRabbitMQ.csproj" />
|
||||||
<ProjectReference Include="..\..\..\BuildingBlocks\EventBus\EventBusServiceBus\EventBusServiceBus.csproj" />
|
<ProjectReference Include="..\..\..\BuildingBlocks\EventBus\EventBusServiceBus\EventBusServiceBus.csproj" />
|
||||||
<ProjectReference Include="..\..\..\BuildingBlocks\EventBus\EventBus\EventBus.csproj" />
|
<ProjectReference Include="..\..\..\BuildingBlocks\EventBus\EventBus\EventBus.csproj" />
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
using EventBusKafka;
|
||||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||||
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
|
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
|
||||||
|
|
||||||
@ -90,6 +91,16 @@ public class Startup
|
|||||||
return new DefaultServiceBusPersisterConnection(serviceBusConnectionString);
|
return new DefaultServiceBusPersisterConnection(serviceBusConnectionString);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else if (Configuration.GetValue<bool>("KafkaEnabled"))
|
||||||
|
{
|
||||||
|
services.AddSingleton<IKafkaPersistentConnection>(sp =>
|
||||||
|
{
|
||||||
|
var logger = sp.GetRequiredService<ILogger<DefaultKafkaPersistentConnection>>();
|
||||||
|
|
||||||
|
// TODO add retry, better config passing here
|
||||||
|
return new DefaultKafkaPersistentConnection("localhost:9092",logger);
|
||||||
|
});
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
services.AddSingleton<IRabbitMQPersistentConnection>(sp =>
|
services.AddSingleton<IRabbitMQPersistentConnection>(sp =>
|
||||||
@ -259,6 +270,20 @@ public class Startup
|
|||||||
eventBusSubscriptionsManager, iLifetimeScope, subscriptionName);
|
eventBusSubscriptionsManager, iLifetimeScope, subscriptionName);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else if (Configuration.GetValue<bool>("KafkaEnabled"))
|
||||||
|
{
|
||||||
|
services.AddSingleton<IEventBus, EventBusKafka.EventBusKafka>(sp =>
|
||||||
|
{
|
||||||
|
var kafkaPersistentConnection = sp.GetRequiredService<IKafkaPersistentConnection>();
|
||||||
|
var logger = sp.GetRequiredService<ILogger<EventBusKafka.EventBusKafka>>();
|
||||||
|
var eventBusSubscriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>();
|
||||||
|
string subscriptionName = Configuration["SubscriptionClientName"];
|
||||||
|
|
||||||
|
// TODO fix namespace -> global using
|
||||||
|
return new global::EventBusKafka.EventBusKafka(kafkaPersistentConnection, logger,
|
||||||
|
eventBusSubscriptionsManager, 5);
|
||||||
|
});
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
services.AddSingleton<IEventBus, EventBusRabbitMQ>(sp =>
|
services.AddSingleton<IEventBus, EventBusRabbitMQ>(sp =>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user