首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C#使用Socket实现分布式事件总线,不依赖第三方MQ

C#使用Socket实现分布式事件总线,不依赖第三方MQ

作者头像
沙漠尽头的狼
发布于 2024-07-29 01:32:32
发布于 2024-07-29 01:32:32
30100
代码可运行
举报
文章被收录于专栏:Dotnet9Dotnet9
运行总次数:0
代码可运行

使用Socket实现的分布式事件总线,不依赖第三方MQ。

CodeWF.EventBus.Socket 是一个轻量级的、基于Socket的分布式事件总线系统,旨在简化分布式架构中的事件通信。它允许进程之间通过发布/订阅模式进行通信,无需依赖外部消息队列服务。

unsetunset特性unsetunset

  • 轻量级:不依赖任何外部MQ服务,减少了系统复杂性和依赖。
  • 高性能:基于Socket的直接通信,提供低延迟、高吞吐量的消息传递。
  • 灵活性:支持自定义事件类型和消息处理器,易于集成到现有系统中。
  • 可扩展性:支持多客户端连接,适用于分布式系统环境。

unsetunset安装unsetunset

通过NuGet包管理器安装CodeWF.EventBus.Socket

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Install-Package CodeWF.EventBus.Socket

unsetunset服务端使用unsetunset

运行事件服务

在服务端代码中,创建并启动EventServer实例以监听客户端连接和事件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using CodeWF.EventBus.Socket;

// 创建事件服务器实例
IEventServer eventServer = new EventServer();

// 启动事件服务器,监听指定IP和端口
eventServer.Start("127.0.0.1", 9100);

停止事件服务

当不再需要事件服务时,调用Stop方法以优雅地关闭服务器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eventServer.Stop();

unsetunset客户端使用unsetunset

连接事件服务

在客户端代码中,创建EventClient实例并连接到事件服务器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using CodeWF.EventBus.Socket;

// 创建事件客户端实例
IEventClient eventClient = new EventClient();

// 连接到事件服务器
if (eventClient.Connect("127.0.0.1", 9100, out var message))
{
    Console.WriteLine("连接事件服务成功!");
}
else
{
    Console.WriteLine($"连接事件服务失败:{message}");
}

订阅事件

订阅特定类型的事件,并指定事件处理函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eventClient.Subscribe<NewEmailNotification>("event.email.new", ReceiveNewEmail);

private void ReceiveNewEmail(NewEmailNotification message)
{
    // 处理新邮件通知
    Console.WriteLine($"收到新邮件,主题是{message.Subject}");
}

发布事件

发布事件到指定的主题,供已订阅的客户端处理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 发布新邮件通知事件
eventClient.Publish("event.email.new", new NewEmailNotification { Subject = "恭喜您中Github一等奖", Content = "我们很开心,您在2024年7月...", SendTime = new DateTime(2024, 7, 27) });

取消订阅事件

不再需要接收某类事件时,可以取消订阅。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eventClient.Unsubscribe<NewEmailNotification>("event.email.new", ReceiveNewEmail);

断开事件服务

完成事件处理或需要断开与服务器的连接时,调用Disconnect方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eventClient.Disconnect();
Console.WriteLine("断开与事件服务的连接");

unsetunset注意事项unsetunset

  • 确保服务端和客户端使用的地址和端口号一致,并且端口未被其他服务占用。
  • 在生产环境中,服务端应配置为监听公共IP地址或适当的网络接口。
  • 考虑到网络异常和服务重启等情况,客户端可能需要实现重连逻辑。
  • 根据实际需求,可以扩展EventServerEventClient类以支持更复杂的功能,如消息加密、认证授权等。

unsetunset项目地址unsetunset

  • 地址:https://github.com/dotnet9/CodeWF.EventBus.Socket
  • 开源协议:MIT
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Dotnet9 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
从头到脚说单测——谈有效的单元测试
导语 非常幸运的是,从4月份至今,我能够全身心投入到腾讯新闻的单元测试专项任务中,从无知懵懂,到不断深入理解的过程,与开发同学互帮互助,受益匪浅。在此过程中,得到了质量总监、新闻总监和乔帮主的倾囊指导,真心感谢!!我希望把所有心得,总结成一篇较为全面的文章,分享给其他团队。时刻牢记:1. 不要滥用mock 2. 基于意图。 在我们谈到单元测试,大都清楚是测试函数符合预期,国外很多大公司都将单测执行的很好,国内成功的案例则相对有限。在本文中,笔者将在腾讯新闻项目中亲身经历单测从无到有的实践过程梳理为可读
腾讯技术工程官方号
2019/08/20
11.8K0
从头到脚说单测——谈有效的单元测试
为什么我说写好测试很重要(二)
  单元测试是按照测试范围来划分的。TDD、BDD 是按照开发模式来划分的。因此就有各种排列组合,这里我们只关心单元测试下的 TDD、BDD 方案。
顾翔
2021/08/13
4650
软件测试习题(附答案)
1. 在软件生命周期的哪一个阶段,软件缺陷修复费用最低                               (   A   )
红目香薰
2022/11/29
2K0
如何系统自学软件测试,看这篇软件测试学习方法万字总结就够了
主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。
伤心的辣条
2022/12/14
1K0
如何系统自学软件测试,看这篇软件测试学习方法万字总结就够了
使用postman 自动化测试接口
软件测试是软件开发的重要组成部分,是贯穿整个软件生命周期,对软件产品进行验证和确认的活动过程,其目的是尽早发现软件产品中存在的各种问题,如与用户需求、预先定义不一致等问题。
狂奔滴小马
2021/11/15
1.1K0
使用postman 自动化测试接口
编写更好的 Java 单元测试的 7 个技巧
测试是开发的一个非常重要的方面,可以在很大程度上决定一个应用程序的命运。良好的测试可以在早期捕获导致应用程序崩溃的问题,但较差的测试往往总是导致故障和停机。
哲洛不闹
2018/09/14
3K0
编写更好的 Java 单元测试的 7 个技巧
The Google Testing Law (谷歌测试定律)
软件测试(Software Testing)是软件工程(Software Engineering)中不可或缺的一个过程。软件测试触发预定义的测试步骤、比较软件的实际输出结果和预期输出结果,以此来评价软件质量(Quality),判断软件的实现是否满足设计目标和用户需求。只有经过严格测试的软件,才能发布给用户使用。在实际中,根据测试阶段的不同,软件测试可以分为:
顾翔
2020/11/03
9540
The Google Testing Law (谷歌测试定律)
软件测试流程及产出物
测试从需求分析开始介入,测试人员参与需求的分析活动,确定测试的需求。需要了解测试需求及测试进度,即需要验证什么功能需求点,采用什么测试策略,描述目前在进行哪一阶段的测试(单元测试、集成测试、系统测试)以及每个阶段内在进行的测试种类(功能测试、性能测试、压力测试等)。详细阅读分析需求文档,进行逻辑梳理并勾勒出功能的大概流程图;与产品经理等相关人员探讨表述不清楚的地方,细化业务流程;考虑正常流程中的测试难点;考虑与其他功能的关联;考虑非正常流程;考虑版本数据兼容。
全栈程序员站长
2022/09/01
1K0
软件测试流程及产出物
单元测试入门:是什么?类型和工具
http://mpvideo.qpic.cn/0bf27yaaaaaa4yaiwavl6fpfb7wdad7aaaaa.f10002.mp4?dis_k=854930b32ca658d09ccdda7
归根落叶
2020/05/15
1.2K0
单元测试入门:是什么?类型和工具
程序员眼中的测试
码农的产品和服务大都是以软件形式存在的,我们存在的价值之一就是快速提供高质量的软件产品或服务。如何保障软件的高质量呢?这与软件测试分不开的,测试是保证软件质量的关键环节之一。
半吊子全栈工匠
2018/08/22
9460
程序员眼中的测试
单元测试一篇汇总
本文只对单元测试进行介绍,主要介绍如何在Android Studio下进行单元测试,单元测试使用的测试框架为JUnit
全干程序员demo
2024/10/11
3670
【愚公系列】软考中级-软件设计师 038-软件工程基础(系统测试)
系统测试是一种测试方法,用于确定计算机系统或软件是否满足所需的功能和需求。在系统测试中,测试人员会执行一系列测试用例和场景,以验证系统的各个部分和功能是否正常工作。系统测试通常包括功能测试、性能测试、安全测试、兼容性测试等。这种测试方法旨在发现系统错误和问题,并为解决这些问题提供反馈和改进建议。系统测试是软件开发生命周期中的一个重要步骤,可以确保系统在投入使用之前是可靠和高质量的。
愚公搬代码
2024/04/16
2500
走进JavaWeb技术世界11:单元测试框架Junit
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
Java技术江湖
2019/10/23
1.4K0
带你如何进行微服务的单元、集成和系统测试?
对于测试工作而言,微服务架构对于传统的架构引入了更多的复杂性。一方面,随着微服务数量的增长,测试的用例也会持续增长;另一方面,由于微服务之间存在着一定的依赖性,在测试过程中如何来处理这些依赖,就变得极为重要。
愿天堂没有BUG
2022/10/28
1.4K0
带你如何进行微服务的单元、集成和系统测试?
Java测试框架九大法宝
大多数测试人员更喜欢Java,因为它具有平台独立性和易于构建任何东西的易用性——从简单的应用程序到复杂的移动应用程序、网站等等。
FunTester
2021/08/18
2.8K0
重温《单元测试的艺术》,总结常用知识点
前几个月重温了单元测试的艺术。毕竟是14年的书内容有点旧,于是试着结合书中的内容和一些新的知识点写进这篇文章,希望对自己及各位读者有帮助。
dino.c
2019/07/30
1.7K0
重温《单元测试的艺术》,总结常用知识点
软件测试与代码安全详解
本人学习软件测试收获不少,于是便记录下来自己的思路与知识总结,重温自己的探索之路。
达达前端
2019/07/03
6040
使用Django单元测试与集成测试保障Web应用程序代码质量
在开发Web应用程序时,保证代码质量至关重要。Django作为一个流行的Python Web框架,提供了强大的测试工具来确保代码的可靠性和稳定性。本文将介绍如何利用Django的单元测试和集成测试来保障代码质量,以及它们的使用方法和最佳实践。
一键难忘
2024/07/05
5530
嵌入式基础知识-测试基础概念
动态测试的主要特征是必须真正执行被测试的程序,通过输入测试用例,对其运行情况进行分析。
xxpcb
2024/01/22
2440
嵌入式基础知识-测试基础概念
推荐阅读
相关推荐
从头到脚说单测——谈有效的单元测试
更多 >
LV.1
啄木鸟软件测试咨询网资深软件测试咨询师
目录
  • unsetunset特性unsetunset
  • unsetunset安装unsetunset
  • unsetunset服务端使用unsetunset
    • 运行事件服务
    • 停止事件服务
  • unsetunset客户端使用unsetunset
    • 连接事件服务
    • 订阅事件
    • 发布事件
    • 取消订阅事件
    • 断开事件服务
  • unsetunset注意事项unsetunset
  • unsetunset项目地址unsetunset
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档