|
|
|
@ -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( |
|
|
|
|