|
|
|
@ -80,7 +80,15 @@ namespace Volo.Abp.EventBus.Kafka
|
|
|
|
|
|
|
|
|
|
await TriggerHandlersAsync(eventType, eventData, errorContext =>
|
|
|
|
|
{
|
|
|
|
|
errorContext.SetProperty(KafkaEventErrorHandler.HeadersKey, message.Headers);
|
|
|
|
|
var retryAttempt = 0;
|
|
|
|
|
if (message.Headers.TryGetLastBytes(EventErrorHandlerBase.RetryAttemptKey, out var retryAttemptBytes))
|
|
|
|
|
{
|
|
|
|
|
retryAttempt = Serializer.Deserialize<int>(retryAttemptBytes);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
errorContext.EventData = Serializer.Deserialize(message.Value, eventType);
|
|
|
|
|
errorContext.SetProperty(EventErrorHandlerBase.HeadersKey, message.Headers);
|
|
|
|
|
errorContext.SetProperty(EventErrorHandlerBase.RetryAttemptKey, retryAttempt);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -159,26 +167,28 @@ namespace Volo.Abp.EventBus.Kafka
|
|
|
|
|
|
|
|
|
|
public override async Task PublishAsync(Type eventType, object eventData)
|
|
|
|
|
{
|
|
|
|
|
await PublishAsync(eventType, eventData, new Headers {{"messageId", Serializer.Serialize(Guid.NewGuid())}});
|
|
|
|
|
await PublishAsync(eventType, eventData, new Headers {{"messageId", Serializer.Serialize(Guid.NewGuid())}}, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public virtual async Task PublishAsync(Type eventType, object eventData, Headers headers)
|
|
|
|
|
public virtual async Task PublishAsync(Type eventType, object eventData, Headers headers, Dictionary<string, object> headersArguments)
|
|
|
|
|
{
|
|
|
|
|
await PublishAsync(AbpKafkaEventBusOptions.TopicName, eventType, eventData, headers);
|
|
|
|
|
await PublishAsync(AbpKafkaEventBusOptions.TopicName, eventType, eventData, headers, headersArguments);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public virtual async Task PublishToDeadLetterAsync(Type eventType, object eventData, Headers headers)
|
|
|
|
|
public virtual async Task PublishToDeadLetterAsync(Type eventType, object eventData, Headers headers, Dictionary<string, object> headersArguments)
|
|
|
|
|
{
|
|
|
|
|
await PublishAsync(DeadLetterTopicName, eventType, eventData, headers);
|
|
|
|
|
await PublishAsync(DeadLetterTopicName, eventType, eventData, headers, headersArguments);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async Task PublishAsync(string topicName, Type eventType, object eventData, Headers headers)
|
|
|
|
|
private async Task PublishAsync(string topicName, Type eventType, object eventData, Headers headers, Dictionary<string, object> headersArguments)
|
|
|
|
|
{
|
|
|
|
|
var eventName = EventNameAttribute.GetNameOrDefault(eventType);
|
|
|
|
|
var body = Serializer.Serialize(eventData);
|
|
|
|
|
|
|
|
|
|
var producer = ProducerPool.Get(AbpKafkaEventBusOptions.ConnectionName);
|
|
|
|
|
|
|
|
|
|
SetEventMessageHeaders(headers, headersArguments);
|
|
|
|
|
|
|
|
|
|
await producer.ProduceAsync(
|
|
|
|
|
topicName,
|
|
|
|
|
new Message<string, byte[]>
|
|
|
|
@ -187,6 +197,20 @@ namespace Volo.Abp.EventBus.Kafka
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SetEventMessageHeaders(Headers headers, Dictionary<string, object> headersArguments)
|
|
|
|
|
{
|
|
|
|
|
if (headersArguments == null)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach (var header in headersArguments)
|
|
|
|
|
{
|
|
|
|
|
headers.Remove(header.Key);
|
|
|
|
|
headers.Add(header.Key, Serializer.Serialize(header.Value));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<IEventHandlerFactory> GetOrCreateHandlerFactories(Type eventType)
|
|
|
|
|
{
|
|
|
|
|
return HandlerFactories.GetOrAdd(
|
|
|
|
|