# 将 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 中的这些变更显著提高了消息网关的类型安全性、清晰度和灵活性。

被折叠的 条评论
为什么被折叠?



