Commit 772a509c authored by Savorboard's avatar Savorboard

Add sync publish method with additional header

parent d222559c
...@@ -24,13 +24,20 @@ namespace DotNetCore.CAP ...@@ -24,13 +24,20 @@ namespace DotNetCore.CAP
/// Asynchronous publish an object message. /// Asynchronous publish an object message.
/// </summary> /// </summary>
/// <param name="name">the topic name or exchange router key.</param> /// <param name="name">the topic name or exchange router key.</param>
/// <param name="contentObj">message body content, that will be serialized of json.</param> /// <param name="contentObj">message body content, that will be serialized.</param>
/// <param name="callbackName">callback subscriber name</param> /// <param name="callbackName">callback subscriber name</param>
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
Task PublishAsync<T>(string name, T contentObj, string callbackName = null, CancellationToken cancellationToken = default); Task PublishAsync<T>(string name, T contentObj, string callbackName = null, CancellationToken cancellationToken = default);
/// <summary>
Task PublishAsync<T>(string name, T contentObj, IDictionary<string, string> optionHeaders, CancellationToken cancellationToken = default); /// Asynchronous publish an object message with custom headers
/// </summary>
/// <typeparam name="T">content object</typeparam>
/// <param name="name">the topic name or exchange router key.</param>
/// <param name="contentObj">message body content, that will be serialized.</param>
/// <param name="headers">message additional headers.</param>
/// <param name="cancellationToken"></param>
Task PublishAsync<T>(string name, T contentObj, IDictionary<string, string> headers, CancellationToken cancellationToken = default);
/// <summary> /// <summary>
/// Publish an object message. /// Publish an object message.
...@@ -39,5 +46,13 @@ namespace DotNetCore.CAP ...@@ -39,5 +46,13 @@ namespace DotNetCore.CAP
/// <param name="contentObj">message body content, that will be serialized of json.</param> /// <param name="contentObj">message body content, that will be serialized of json.</param>
/// <param name="callbackName">callback subscriber name</param> /// <param name="callbackName">callback subscriber name</param>
void Publish<T>(string name, T contentObj, string callbackName = null); void Publish<T>(string name, T contentObj, string callbackName = null);
/// <summary>
/// Publish an object message.
/// </summary>
/// <param name="name">the topic name or exchange router key.</param>
/// <param name="contentObj">message body content, that will be serialized of json.</param>
/// <param name="headers">message additional headers.</param>
void Publish<T>(string name, T contentObj, IDictionary<string, string> headers);
} }
} }
\ No newline at end of file
...@@ -35,32 +35,30 @@ namespace DotNetCore.CAP.Internal ...@@ -35,32 +35,30 @@ namespace DotNetCore.CAP.Internal
public AsyncLocal<ICapTransaction> Transaction { get; } public AsyncLocal<ICapTransaction> Transaction { get; }
public async Task PublishAsync<T>(string name, T value, public async Task PublishAsync<T>(string name, T value, IDictionary<string, string> headers, CancellationToken cancellationToken = default)
IDictionary<string, string> optionHeaders,
CancellationToken cancellationToken = default)
{ {
if (string.IsNullOrEmpty(name)) if (string.IsNullOrEmpty(name))
{ {
throw new ArgumentNullException(nameof(name)); throw new ArgumentNullException(nameof(name));
} }
if (optionHeaders == null) if (headers == null)
{ {
optionHeaders = new Dictionary<string, string>(); headers = new Dictionary<string, string>();
} }
var messageId = SnowflakeId.Default().NextId().ToString(); var messageId = SnowflakeId.Default().NextId().ToString();
optionHeaders.Add(Headers.MessageId, messageId); headers.Add(Headers.MessageId, messageId);
optionHeaders.Add(Headers.MessageName, name); headers.Add(Headers.MessageName, name);
optionHeaders.Add(Headers.Type, typeof(T).FullName); headers.Add(Headers.Type, typeof(T).FullName);
optionHeaders.Add(Headers.SentTime, DateTimeOffset.Now.ToString()); headers.Add(Headers.SentTime, DateTimeOffset.Now.ToString());
if (!optionHeaders.ContainsKey(Headers.CorrelationId)) if (!headers.ContainsKey(Headers.CorrelationId))
{ {
optionHeaders.Add(Headers.CorrelationId, messageId); headers.Add(Headers.CorrelationId, messageId);
optionHeaders.Add(Headers.CorrelationSequence, 0.ToString()); headers.Add(Headers.CorrelationSequence, 0.ToString());
} }
var message = new Message(optionHeaders, value); var message = new Message(headers, value);
long? tracingTimestamp = null; long? tracingTimestamp = null;
try try
...@@ -99,11 +97,6 @@ namespace DotNetCore.CAP.Internal ...@@ -99,11 +97,6 @@ namespace DotNetCore.CAP.Internal
} }
} }
public void Publish<T>(string name, T value, string callbackName = null)
{
PublishAsync(name, value, callbackName).GetAwaiter().GetResult();
}
public Task PublishAsync<T>(string name, T value, string callbackName = null, public Task PublishAsync<T>(string name, T value, string callbackName = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
...@@ -115,6 +108,16 @@ namespace DotNetCore.CAP.Internal ...@@ -115,6 +108,16 @@ namespace DotNetCore.CAP.Internal
return PublishAsync(name, value, header, cancellationToken); return PublishAsync(name, value, header, cancellationToken);
} }
public void Publish<T>(string name, T value, string callbackName = null)
{
PublishAsync(name, value, callbackName).GetAwaiter().GetResult();
}
public void Publish<T>(string name, T value, IDictionary<string, string> headers)
{
PublishAsync(name, value, headers).GetAwaiter().GetResult();
}
#region tracing #region tracing
private long? TracingBefore(Message message) private long? TracingBefore(Message message)
......
...@@ -84,6 +84,11 @@ namespace DotNetCore.CAP.Test ...@@ -84,6 +84,11 @@ namespace DotNetCore.CAP.Test
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public void Publish<T>(string name, T contentObj, IDictionary<string, string> headers)
{
throw new NotImplementedException();
}
} }
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment