扩充单向数据发布者和订阅者相关接口

This commit is contained in:
KK
2021-06-03 00:07:16 +08:00
parent 29ec53d1b9
commit bf9544353d
4 changed files with 82 additions and 10 deletions
+45 -1
View File
@@ -42,8 +42,52 @@ namespace OSS.Tools.DataFlow
var pusher = FlowProvider?.CreateFlow(poper, flowKey, sourceName);
return pusher ?? new DefaultDataFlow<TData>(poper);
}
/// <summary>
/// 数据流的提供者
/// </summary>
public static IDataFlowPublisherProvider PublisherProvider { get; set; }
/// <summary>
/// 创建单向数据发布者
/// </summary>
/// <typeparam name="TData"></typeparam>
/// <param name="flowKey"> 流key </param>
/// <param name="sourceName"></param>
/// <returns> 返回当前流的发布接口实现 </returns>
public static IDataPublisher<TData> CreatePublisher<TData>( string flowKey = "task_flow", string sourceName = "default")
{
var pusher = PublisherProvider?.CreatePublisher< TData>( flowKey, sourceName);
if (pusher==null)
{
throw new NotImplementedException($"无法找到对应的{flowKey}值的 IDataFlowPublisherProvider 的具体实现");
}
return pusher;
}
/// <summary>
/// 数据流订阅者的接收器
/// </summary>
public static IDataFlowSubscriberReceiver SubscriberReceiver { get; set; }
/// <summary>
/// 接收数据订阅者
/// </summary>
/// <typeparam name="TData"></typeparam>
/// <param name="subscriber"></param>
/// <param name="flowKey"> 流key </param>
/// <param name="sourceName"></param>
/// <returns> 是否接收成功 </returns>
public static bool ReceiveSubscriber<TData>(IDataSubscriber<TData> subscriber, string flowKey,
string sourceName = "default")
{
return SubscriberReceiver?.Receive(subscriber, flowKey, sourceName) ?? false;
}
}
}
+33 -1
View File
@@ -2,7 +2,7 @@
namespace OSS.Tools.DataFlow
{
/// <summary>
/// 数据流提供者
/// 数据流提供器
/// </summary>
public interface IDataFlowProvider
{
@@ -16,4 +16,36 @@ namespace OSS.Tools.DataFlow
/// <returns> 返回当前流的发布接口实现 </returns>
IDataPublisher<TData> CreateFlow<TData>(IDataSubscriber<TData> subscriber, string flowKey, string sourceName = "default");
}
/// <summary>
/// 数据流发布者的提供器
/// </summary>
public interface IDataFlowPublisherProvider
{
/// <summary>
/// 创建单向数据发布者
/// </summary>
/// <typeparam name="TData"></typeparam>
/// <param name="flowKey"> 流key </param>
/// <param name="sourceName"></param>
/// <returns> 返回当前流的发布接口实现 </returns>
IDataPublisher<TData> CreatePublisher<TData>(string flowKey, string sourceName = "default");
}
/// <summary>
/// 数据流订阅者的接收器
/// </summary>
public interface IDataFlowSubscriberReceiver
{
/// <summary>
/// 接收数据订阅者
/// </summary>
/// <typeparam name="TData"></typeparam>
/// <param name="subscriber"></param>
/// <param name="flowKey"> 流key </param>
/// <param name="sourceName"></param>
/// <returns> 是否接收成功 </returns>
bool Receive<TData>(IDataSubscriber<TData> subscriber, string flowKey, string sourceName = "default");
}
}
+2 -6
View File
@@ -7,7 +7,7 @@ namespace OSS.Tools.DataFlow
/// 数据的订阅者
/// </summary>
/// <typeparam name="TData"></typeparam>
public interface IDataSubscriber<TData>
public interface IDataSubscriber<in TData>
{
/// <summary>
/// 弹出数据
@@ -23,11 +23,7 @@ namespace OSS.Tools.DataFlow
internal InterDataSubscriber(Func<TData, Task<bool>> subscribeFunc)
{
if (subscribeFunc == null)
{
throw new ArgumentNullException("Func<TData, Task<bool>> poper 方法不能为空!");
}
_subscriber = subscribeFunc;
_subscriber = subscribeFunc ?? throw new ArgumentNullException(nameof(subscribeFunc),"订阅者方法不能为空!");
}
public Task<bool> Subscribe(TData data)
@@ -2,9 +2,9 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Version>0.1</Version>
<Version>0.2</Version>
<Description>数据异步流处理</Description>
<PackageReleaseNotes>数据的异步流缓冲处理</PackageReleaseNotes>
<PackageReleaseNotes>扩充单向发布者和订阅者相关接口</PackageReleaseNotes>
<PackageIcon>logo.png</PackageIcon>
</PropertyGroup>