意图
在客户端上提供帮助服务实例,并从共享资源中卸载常用功能。
解释
现实世界的例子
远程服务有许多客户端访问它提供的功能。该服务是一个遗留应用程序,无法更新。来自用户的大量请求导致连接问题。请求频率的新规则应与延迟检查和客户端日志记录一起实施。
简单来说
使用大使模式,我们可以实现来自客户端的频率较低的轮询以及延迟检查和日志记录。
微软文档状态
大使服务可以被认为是与客户端位于同一位置的进程外代理。此模式可用于以与语言无关的方式卸载常见的客户端连接任务,例如监控、日志记录、路由、安全性(如 TLS)和弹性模式。它通常与遗留应用程序或其他难以修改的应用程序一起使用,以扩展其网络功能。它还可以使专门的团队实现这些功能。
程序示例
考虑到上面的介绍,我们将模仿这个例子中的功能。我们有一个由远程服务和大使服务实现的接口:
表示为单例的远程服务。
服务大使添加了额外的功能,如日志记录、延迟检查
客户端有一个本地服务大使用于与远程服务交互:
这是使用该服务的两个客户。
这是运行示例的输出:
类图
适用性
当使用无法修改或极难修改的旧版远程服务时,Ambassador 是适用的。可以在客户端上实现连接功能,避免更改远程服务。
- Ambassador 为远程服务提供本地接口。
- Ambassador 在客户端上提供日志记录、断路、重试和安全性。
典型用例
- 控制对另一个对象的访问
- 实施日志记录
- 实施断路
- 卸载远程服务任务
- 促进网络连接