From e23a94e46d57502b0e86bc012e9dce3582222171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=BE=E6=9C=88=E5=93=A5?= <1093439315@qq.com> Date: Thu, 10 Apr 2025 02:12:08 +0000 Subject: [PATCH 1/8] update README.md. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 雾月哥 <1093439315@qq.com> --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 57e0cb1..29ff66f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# NebulaBus -事件总线框架 +# NebulaBus - 面向未来的 .NET 分布式事件总线框架,让开发者专注开发 + -- Gitee From 63700fa05e302131ea40dca3e0556164e3da9b9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=BE=E6=9C=88=E5=93=A5?= <1093439315@qq.com> Date: Thu, 10 Apr 2025 02:30:02 +0000 Subject: [PATCH 2/8] update README.md. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 雾月哥 <1093439315@qq.com> --- README.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/README.md b/README.md index 29ff66f..7516a29 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,72 @@ # NebulaBus - 面向未来的 .NET 分布式事件总线框架,让开发者专注开发 +### **✨ 全场景消息驱动** + +支持即时/延迟的广播、定向推送(如微服务间精准通信),内置优先级队列和失败重试机制,完美适配电商秒杀、物流追踪等高并发场景。 + +### **⚡ 弹性架构设计** + +- 双引擎驱动:基于 RabbitMQ 的毫秒级传输 + Redis 的高性能存储,动态负载均衡 +- 分布式部署:自动节点发现、故障转移,支持横向扩展 +- 轻量级内核:核心包仅 50KB + +### **🔧 开发者友好特性** +配置简单,快速上手,让开发者专注开发 + +注入 +``` +builder.Services.AddNebulaBus(options => +{ + options.ClusterName = "TestCluster"; + options.UseRedisStore("localhost:6379,password=****,defaultDatabase=0,prefix=prefix_"); + options.UseRabbitmq(rabbitmq => + { + rabbitmq.HostName = “localhost”; + rabbitmq.UserName = “guest”; + rabbitmq.Password = “guest”; + rabbitmq.VirtualHost = "/"; + }); +}); +``` +订阅 + +``` + public class TestHandlerV1 : NebulaHandler + { + public override string Name => "NebulaBus.TestHandler.V1"; + public override string Group => "NebulaBus.TestHandler"; + + protected override async Task Handle(TestMessage message, NebulaHeader header) + { + Console.WriteLine($"{DateTime.Now} Received Message {Name}:{message.Message} Header:{header["customHeader"]} RetryCount:{header[NebulaHeader.RetryCount]}"); + } + } +``` +发布 + +``` +//注入INebulaBus接口 +private readonly INebulaBus _bus; +//广播,广播传入的是订阅者Group,所有相同Group的订阅者都将收到消息 +_bus.PublishAsync("NebulaBus.TestHandler", new TestMessage { Message = "Hello World" }); + +//延迟广播 +_bus.PublishAsync(TimeSpan.FromSeconds(5), "NebulaBus.TestHandler", new TestMessage { Message = "Hello World" }); + +//定向发送,定向发送传入的是订阅者Name,只有该Name的订阅者会收到消息 +_bus.PublishAsync("NebulaBus.TestHandler.V1", new TestMessage { Message = "Hello World" }); + +//延迟定向发送,传入延迟的TimeSpan即可 +_bus.PublishAsync(TimeSpan.FromSeconds(5), "NebulaBus.TestHandler.V1",new TestMessage { Message = "Hello World" }); + +//自定义消息请求头,不管是发送还是广播都支持自定义请求头 +_bus.PublishAsync("NebulaBus.TestHandler", new TestMessage { Message = "Hello World" }, + new Dictionary() + { + { "customHeader", "123456" }, + { NebulaHeader.RequestId, "8889999" }, + }); +``` + + + -- Gitee From b83be3fc02ab7b3bfe71c3144cae93a432cf69c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=BE=E6=9C=88=E5=93=A5?= <1093439315@qq.com> Date: Thu, 10 Apr 2025 02:32:52 +0000 Subject: [PATCH 3/8] update README.md. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 雾月哥 <1093439315@qq.com> --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7516a29..0b4f30f 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ 注入 ``` +//配置 builder.Services.AddNebulaBus(options => { options.ClusterName = "TestCluster"; @@ -27,10 +28,16 @@ builder.Services.AddNebulaBus(options => rabbitmq.VirtualHost = "/"; }); }); +//注入订阅者 +builder.Services.AddNebulaBusHandler(); +builder.Services.AddNebulaBusHandler(); +//批量注入订阅者 +builder.Services.AddNebulaBusHandler(typeof(TestHandlerV1).Assembly); ``` 订阅 ``` +//实现NebulaHandler<> 抽象类即可 public class TestHandlerV1 : NebulaHandler { public override string Name => "NebulaBus.TestHandler.V1"; @@ -67,6 +74,6 @@ _bus.PublishAsync("NebulaBus.TestHandler", new TestMessage { Message = "Hello Wo { NebulaHeader.RequestId, "8889999" }, }); ``` - +示例请参考 -- Gitee From 37223b89a28253cc2a89e58afd1ade45fd83eabd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=BE=E6=9C=88=E5=93=A5?= <1093439315@qq.com> Date: Thu, 10 Apr 2025 02:33:46 +0000 Subject: [PATCH 4/8] update README.md. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 雾月哥 <1093439315@qq.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0b4f30f..acfbea1 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,6 @@ _bus.PublishAsync("NebulaBus.TestHandler", new TestMessage { Message = "Hello Wo { NebulaHeader.RequestId, "8889999" }, }); ``` -示例请参考 +示例请参考:src/WebApplicationSample -- Gitee From 7d0eb10dfcb5ca8beda8dbb827745431d55d9a2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=BE=E6=9C=88=E5=93=A5?= <1093439315@qq.com> Date: Thu, 10 Apr 2025 02:40:33 +0000 Subject: [PATCH 5/8] update README.md. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 雾月哥 <1093439315@qq.com> --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index acfbea1..4a12fc9 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,12 @@ ### **✨ 全场景消息驱动** -支持即时/延迟的广播、定向推送(如微服务间精准通信),内置优先级队列和失败重试机制,完美适配电商秒杀、物流追踪等高并发场景。 +支持即时/延迟的广播、定向推送(如微服务间精准通信),内置Quartz.Net和失败重试机制,完美适配电商秒杀、物流追踪等高并发场景。 ### **⚡ 弹性架构设计** - 双引擎驱动:基于 RabbitMQ 的毫秒级传输 + Redis 的高性能存储,动态负载均衡 +- 精确延迟发送:内置Quartz.net 进行精确延迟发送并支持多节点部署 - 分布式部署:自动节点发现、故障转移,支持横向扩展 - 轻量级内核:核心包仅 50KB @@ -76,4 +77,7 @@ _bus.PublishAsync("NebulaBus.TestHandler", new TestMessage { Message = "Hello Wo ``` 示例请参考:src/WebApplicationSample +### **🌐 适用场景** + +微服务解耦 | IoT 设备指令分发 | 金融交易异步结算 | 游戏服务器状态同步 -- Gitee From aee78476a145a828c60388f48295cb0bcde785be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=BE=E6=9C=88=E5=93=A5?= <1093439315@qq.com> Date: Thu, 10 Apr 2025 02:42:13 +0000 Subject: [PATCH 6/8] update README.md. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 雾月哥 <1093439315@qq.com> --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4a12fc9..f26cd87 100644 --- a/README.md +++ b/README.md @@ -81,3 +81,5 @@ _bus.PublishAsync("NebulaBus.TestHandler", new TestMessage { Message = "Hello Wo 微服务解耦 | IoT 设备指令分发 | 金融交易异步结算 | 游戏服务器状态同步 +项目定位: 比 MassTransit 更易扩展和轻量化的 .NET 消息中间件解决方案。 + -- Gitee From 8e0fb18a0f7aa564e3cb87a638fc86e5c6868867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=BE=E6=9C=88=E5=93=A5?= <1093439315@qq.com> Date: Thu, 10 Apr 2025 02:49:04 +0000 Subject: [PATCH 7/8] update README.md. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 雾月哥 <1093439315@qq.com> --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index f26cd87..9c18bd0 100644 --- a/README.md +++ b/README.md @@ -41,12 +41,21 @@ builder.Services.AddNebulaBusHandler(typeof(TestHandlerV1).Assembly); //实现NebulaHandler<> 抽象类即可 public class TestHandlerV1 : NebulaHandler { + //订阅者唯一标识,用于定向发送 public override string Name => "NebulaBus.TestHandler.V1"; + //订阅者组,用于广播,相同组的订阅都将收到消息 public override string Group => "NebulaBus.TestHandler"; + //重试延迟,用于配置首次失败后多久重试,若不重写则默认10秒 + public override TimeSpan RetryDelay => TimeSpan.FromSeconds(10); + //最大重试次数,若不重写则默认10次 + public override int MaxRetryCount => 5; + //重试间隔,若不重写则默认10秒 + public override TimeSpan RetryInterval => TimeSpan.FromSeconds(10); protected override async Task Handle(TestMessage message, NebulaHeader header) { Console.WriteLine($"{DateTime.Now} Received Message {Name}:{message.Message} Header:{header["customHeader"]} RetryCount:{header[NebulaHeader.RetryCount]}"); + //TODO: your code } } ``` -- Gitee From 6c98e63b0f5b2f897eebbd92fcda0adae148c6b2 Mon Sep 17 00:00:00 2001 From: "javen.liu" Date: Thu, 10 Apr 2025 10:56:45 +0800 Subject: [PATCH 8/8] add readme in package --- src/NebulaBus/NebulaBus.csproj | 2 ++ src/WebApplicationSample/Handlers/TestHandlerV1.cs | 1 + 2 files changed, 3 insertions(+) diff --git a/src/NebulaBus/NebulaBus.csproj b/src/NebulaBus/NebulaBus.csproj index 653eabf..e26e21a 100644 --- a/src/NebulaBus/NebulaBus.csproj +++ b/src/NebulaBus/NebulaBus.csproj @@ -6,6 +6,7 @@ $(GitVersion_MajorMinorPatch) $(GitVersion_PreReleaseTag) $(GitVersion_SemVer.Replace('+', '-')) + ../../README.md @@ -15,6 +16,7 @@ + diff --git a/src/WebApplicationSample/Handlers/TestHandlerV1.cs b/src/WebApplicationSample/Handlers/TestHandlerV1.cs index 0bf7e3c..a065fab 100644 --- a/src/WebApplicationSample/Handlers/TestHandlerV1.cs +++ b/src/WebApplicationSample/Handlers/TestHandlerV1.cs @@ -9,6 +9,7 @@ namespace WebApplicationSample.Handlers public override string Group => "NebulaBus.TestHandler"; public override TimeSpan RetryDelay => TimeSpan.FromSeconds(10); public override int MaxRetryCount => 5; + public override TimeSpan RetryInterval => TimeSpan.FromSeconds(10); private readonly INebulaBus _bus; -- Gitee