我的 ApiGateway 中的 RequestClient 被注入(使用默认 MS DI)HTTP 请求处理程序(在这些处理程序中我可以访问当前请求范围)。我想要的是为每个 RequestClient 自动添加自定义消息标头,我可以在其中放置来自请求范围的一些数据。用例是从请求中获取 JWT 并将其作为自定义标头添加到消息中。然后在消费者方面,我需要,对于每个收到的请求,检查自定义标头,验证 JWT,并将其中的一些数据添加到消耗的请求范围,以便我可以访问例如 IUserContext 或类似的东西。例如,我想避免手动将 jwt 添加到消息合同中。
如何在客户端和消费者端配置 MassTransit 以实现我想要的?我已经阅读了关于中间件、管道和观察者的文档,但我仍然无法弄清楚......
使用 RabbitMQ 传输。
答案 0 :(得分:1)
因此,将其放入帖子中非常复杂,因此我created a complete sample 展示了如何使用 MassTransit Scoped Filters。
在此示例中,向控制器注册了一个操作过滤器,以自动提取 do {
let encodedData = try JSONEncoder().encode(myStructures)
UserDefaults.standard.set(encodedData, forKey: "array")
if let decodedData = UserDefaults.standard.data(forKey: "array") {
let decodedArray = try JSONDecoder().decode([MyStruct].self, from: decodedData)
print(decodedArray)
}
} catch {
print(error)
}
标头并存储它,以便在从控制器发布或发送消息时可以使用它。 MassTransit 过滤器配置在总线上,因此它们可用于所有接收端点。