Brighter V10 RC2:消息网关

# 将 Brighter RC2 中的 **消息网关** 重大变更翻译成中文

在我之前关于 [Brighter RC2 的文章](https://dev.to/actor-dev/brighter-v10-release-candidate-v2-what-is-new-21n2) 中,我介绍了初始发布候选版的更新内容。今天,我将重点介绍 Brighter RC2 中 **消息网关** 的重大变更。

1. 方法重命名以提高清晰度

有两个主要的破坏性变更影响了您配置订阅和外部总线的方式。为了减少用户混淆,我们进行了以下重命名:

  • AddServiceActivator → AddConsumer
  • ExternalBus → AddProducers
// Brighter V9 / V10 RC1
services.AddServiceActivator(....)
        .ExternalBus(...)

// Brighter V10 RC2+
services.AddConsumer(....)
        .AddProducers(...)

为什么进行此变更? 之前的术语经常导致对组件角色的误解。虽然我们承认新方法并不完美,但我们优先考虑了 V10 的发布。对于 V11,我们计划优化设置体验——欢迎在我们的 GitHub 讨论区 分享您的建议。

2. 显式默认消息映射器配置

现在设置默认消息映射器需要显式指定类型。之前的云事件辅助方法已被直接类型注册所取代:

// V10 RC1
services.AddBrighter(....)
        .MapperRegistry(registry => registry.SetCloudEventJsonAsDefaultMessageMapper())

// V10 RC2
services.AddBrighter(....)
        .MapperRegistry(registry => registry.SetDefaultMessageMapper(typeof(CloudEventJsonMessageMapper<>)))

如果您更喜欢之前的实现方式,请提交问题说明您的使用场景。

3. 强类型标识符

为解决原始类型偏执问题,Brighter 现在为关键消息概念引入了专用类型:

| 之前类型 | 新类型 | 自动转换 |
|---------------|-------------------|----------------------|
| `string` | `Id` | ✅ 从 `string` |
| `string` | `RoutingKey` | ✅ 从 `string` |
| `string` | `CloudEventsType` | ✅ 从 `string` |
| `string` | `PartitionKey` | ✅ 从 `string` |

大多数转换会自动进行,在提高类型安全性的同时最小化迁移影响。

4. 增强的订阅配置

订阅现在强制要求关键属性必须提供:

// 现在所有订阅中都必须提供
new Subscription<MyCommand>(
    new SubscriptionName("MySubscription"), 
    new ChannelName("MyChannel"),
    new RoutingKey("my.routing.key")
)

多类型订阅 现在已得到支持。例如,处理继承自公共基类的多种消息类型:

// 处理 OrderCreated 和 ShipmentUpdated(两者都继承自 Event)
new Subscription(
    new SubscriptionName("Operations"), 
    new ChannelName("OperationsChannel"),
    new RoutingKey("my.operations.key")
    getRequestType: message => 
    {
        // 根据消息内容确定适当类型
        return message.Header.Topic.Value.Contains("order") 
            ? typeof(OrderEvent) 
            : typeof(ShipmentEvent);
    }
)

在未来的文章中,我将详细解释这一功能。

5. 发布功能增强

发布现在支持默认头信息和 CloudEvent 属性:

new Publication<SomeEvent>
{
    Topic = "some-topics",
    MakeChannels = OnMissingChannel.Create,
    Source = new Uri("test-app", UriKind.RelativeOrAbsolute)
    DefaultHeaders =  new Dictionary<string, object> 
    { 
        { "x-custom-header", "value" } 
    },
    CloudEventsAdditionalProperties =  new Dictionary<string, object>
    {
        { "extra", "/my-app" }
    }
}

结论

Brighter RC2 中的这些变更显著提高了消息网关的类型安全性、清晰度和灵活性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值