ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何快速上手 SlimMessageBus + Azure Service Bus:主题订阅与请求响应架构完整指南

如何快速上手 SlimMessageBus + Azure Service Bus:主题订阅与请求响应架构完整指南 如何快速上手 SlimMessageBus Azure Service Bus主题订阅与请求响应架构完整指南【免费下载链接】SlimMessageBusLightweight message bus interface for .NET (pub/sub and request-response) with transport plugins for popular message brokers.项目地址: https://gitcode.com/gh_mirrors/sl/SlimMessageBusSlimMessageBus是一款面向 .NET 的轻量级消息总线Message Bus框架支持发布/订阅pub/sub与请求/响应request-response两种通信模式。搭配Azure Service Bus传输插件你可以在云原生架构中快速搭建解耦的微服务通信一条主题Topic承载多种消息多个服务通过订阅Subscription各自消费还能以await等待式调用完成跨服务的请求响应。本文带你用最短的路径掌握这两大核心架构。30秒认识 SlimMessageBus SlimMessageBus 的设计哲学是小而美传输层可插拔Kafka、Azure Service Bus、RabbitMQ、Redis、MQTT 等主流消息中间件均以 NuGet 插件形式接入两种通信范式pub/sub 用于事件广播request-response 用于异步等待结果统一 API无论底层是哪种 Broker业务代码只依赖IMessageBus接口切换 Broker 只需改配置。SlimMessageBus 消息总线上一个主题承载多种消息不同消费服务按类型独立消费上图展示了 SlimMessageBus 的核心能力Service A 把CustomerEvent、OrderEvent等多种消息发布到同一个主题eventsService B 中的不同消费者按需各自消费。核心接口定义在 src/SlimMessageBus/IMessageBus.cs消费者通过实现IConsumerT接口处理消息。一键接入安装与配置 Azure Service Bus在 .NET 项目中安装三个包即可完成接入dotnet add package SlimMessageBus dotnet add package SlimMessageBus.Host.AzureServiceBus dotnet add package SlimMessageBus.Host.Serialization.SystemTextJson然后一行AddSlimMessageBus完成总线配置只需提供 Azure Service Bus 连接字符串services.AddSlimMessageBus(mbb { mbb.WithProviderServiceBus(cfg cfg.ConnectionString connectionString); mbb.AddJsonSerializer(); });完整配置文档见 docs/provider_azure_servicebus.md插件源码位于 src/SlimMessageBus.Host.AzureServiceBus/。主题与订阅pub/sub 架构的关键 Azure Service Bus 同时支持队列Queue和主题TopicSlimMessageBus 通过简洁的构建器语法让你清晰声明消息去哪、谁来消费。发布端声明消息的目的地// 订单事件发布到 orders-topic 主题 mbb.ProduceOrderPlacedEvent(x x.DefaultTopic(orders-topic));之后业务代码里直接await bus.Publish(new OrderPlacedEvent(...))即可无需关心 Broker 细节。订阅端每个服务拥有独立订阅主题消费的关键概念是订阅名Subscription——不同服务用不同订阅名消费同一主题互不干扰mbb.ConsumeOrderPlacedEvent(x x .Topic(orders-topic) .SubscriptionName(inventory-service) .WithConsumerOrderPlacedEventConsumer() .Instances(1));几个实用技巧全局默认订阅名所有主题消费者可统一通过cfg.SubscriptionName(...)设置避免重复配置订阅过滤支持 SQL 过滤SubscriptionSqlFilter和关联 ID 过滤SubscriptionCorrelationFilter让每个订阅只收到符合条件的消息实现一主题多视图访问原生消息消费者实现IConsumerWithContext接口后可读取 Azure 原生的ServiceBusReceivedMessage拿到CorrelationId、ApplicationProperties等元数据。异常处理与死信队列 消费者抛异常时SlimMessageBus 会将消息标记为废弃abandon由 Azure Service Bus 自动重试默认 10 次失败后进入死信队列DLQ并在消息上写入SMB.Exception属性方便排查。你还可以注册自定义错误处理器实现应用级死信或失败时修改消息属性详见 docs/provider_azure_servicebus.md 的异常处理章节。请求响应架构跨服务像本地调用一样 await ⚡同步 HTTP 调用在微服务中会放大延迟和故障传播。SlimMessageBus 的request-response模式让你await一个请求消息并拿到响应同时保持服务间的异步解耦。工作原理发送方把请求消息发到一个主题/队列消息头部自动携带RequestId关联 ID、ReplyTo回复地址等元数据处理方执行IRequestHandler处理器把响应发回ReplyTo指定的地址发送方的await bus.Send(request)拿到结果继续执行。上图展示了完整管线Send()请求会依次经过生产者拦截器 → 传输层Azure Service Bus→ 消费者拦截器 → 请求处理器任何一环都可以插入横切逻辑日志、校验、熔断等。拦截器接口定义在 src/SlimMessageBus.Host.Interceptor/。请求发送方配置mbb.ProduceEchoRequest(x x.DefaultTopic(echo-request)); mbb.ExpectRequestResponses(x { // 每个服务实例拥有专属回复队列确保响应准确回到发起者 x.ReplyToQueue(my-service-reply); x.DefaultTimeout(TimeSpan.FromSeconds(60)); });⚠️关键点每个请求发送方实例都需要专属的回复队列推荐用队列而非主题这样第 n 个实例发出的请求响应才能准确回到该实例并恢复其等待中的任务。请求处理方配置mbb.HandleEchoRequest, EchoResponse(x x .Topic(echo-request) .SubscriptionName(handler) .WithHandlerEchoRequestHandler() .Instances(2));注意请求发到主题就从主题消费发到队列就从队列消费两者不能混用。请求消息可选实现标记接口IRequestTResponse定义见 src/SlimMessageBus/RequestResponse/IRequest.cs让类型关系一目了然。自动拓扑供给省去手动建 Topic 的烦恼 ️从 1.19.0 起SlimMessageBus 支持自动拓扑供给应用启动时自动创建配置中声明的队列、主题、订阅和过滤规则已存在的资源保持不变。这意味着新环境部署时不用再手动登录 Azure Portal 建 Topic通过CanProducerCreateTopic/CanConsumerCreateSubscription等开关可在多服务间明确谁拥有 Topic 创建权、谁只创建自己的订阅实现职责分离支持设置分区Partitioning、去重Duplicate Detection等创建选项。注意拓扑供给要求连接字符串使用Manage权限级别的密钥。进阶能力速览 ✨能力说明Sessions 会话通过EnableSession()启用 FIFO 顺序保证同一客户的消息严格有序消息修改器.WithModifier()设置分区键、消息 ID、SessionId 等原生属性Outbox 模式配合 Outbox 插件 实现本地事务 可靠投递熔断器消费者可接入熔断与健康检查自动降级Hybrid 总线同一应用内同时使用多种 Broker总结为什么选择这套组合云原生友好Azure Service Bus 提供企业级 SLA、自动扩缩、死信与诊断能力开发体验极佳声明式配置 强类型 API消息流转清晰可测架构灵活pub/sub 解耦事件流request-response 保留调用语义二者按需组合。下一步建议阅读 docs/UseCases/RequestResponse.md 了解请求响应在复杂计算场景中的落地方式或在本地克隆仓库后运行 Samples 中的示例git clone https://gitcode.com/gh_mirrors/sl/SlimMessageBus从此让你的 .NET 微服务通信既简单又可靠。【免费下载链接】SlimMessageBusLightweight message bus interface for .NET (pub/sub and request-response) with transport plugins for popular message brokers.项目地址: https://gitcode.com/gh_mirrors/sl/SlimMessageBus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表