在新版本的服务网关中提供了服务发现和泛域名路由解决功能, 服务发现可以在无须配置的情况下实现服务自动注册到网关中解脱对服务配置的繁琐工作; 而泛域名路由则可以针对不同的域名制定不同的负载规则.
使用 consul 服务发现插件
网关需要维护相关负载的服务器, 手动添加相对来说是一件比较麻烦的工作; 为了解决这一问题组件扩展了一个基于 consul 服务发现插件, 通过配置这个插件和启用后网关会自动从 consul 服务中获取服务并添加到网关对应的路由负载规则中.
引用插件
Bumblebee 中使用服务发现需要引用两个插件, 分别是 BeetleX.Bumblebee.Configuration 和 BeetleX.Bumblebee.BeetleX.Bumblebee.Consul. 加载启动后就可以通过管理工具进行插件配置.
- g = new Gateway();
- g.HttpOptions(
- o =>
- {
- o.Port = 80;
- o.LogToConsole = true;
- o.LogLevel = BeetleX.EventArgs.LogType.Error;
- });
- g.Open();
- g.LoadPlugin(
- typeof(Bumblebee.Configuration.Management).Assembly,
- typeof(Bumblebee.Consul.ConsulPlugin).Assembly
- );
如果不想自己编写代码可以下载编译的运行包 https://github.com/IKende/Bumblebee/blob/master/bin/ 下载 1.1.9 或更高版本; 运行后 访问 http://host/__system/bumblebee/
插件管理
运行程序后进行配置管理工具的插件管理页面, 可以看到 Consul 插件, 组件默认是关闭需要进行一些配置.
插件配置
- {
- "ConsulAddress": "http://192.168.2.19:8500",
- "Services": [
- "bumblebee_services"
- ],
- "Token": null,
- "DataCenter": "dc1"
- }
ConsulAddress 对应 Consul 的服务地址
Services 检索相应名称的服务列表一个或多个
Token 访问 Consul 相应的 Token 信息
DataCenter 检索相应的数据中心名称
配置完成后只需要启用插件即可
注册要求
- Dictionary<string, string> meta = new Dictionary<string, string>();
- meta.Add("path", "^/home.*");
- client.Agent.ServiceDeregister("api_test1").Wait();
- client.Agent.ServiceDeregister("api_test2").Wait();
- client.Agent.ServiceRegister(new AgentServiceRegistration
- {
- Tags = new string[] { "Bumblebee" },
- Address = "192.168.2.18",
- Port = 8080,
- Name = "bumblebee_services",
- Meta = meta,
- ID = "api_test1"
- }).Wait();
以上是一个简单的注册代码, 如果想服务需要注册到相应路由规则下的负载需要指定 path, 在不指写的情况 bumblebee 获取后会注册到默认路由规则上.
状态跟踪和故障
bumblebee 内部有一套服务监控和故障处理机制无须依据 consul 相关状态注册信息; bumblebee 会根据自身的检测机制对应用进行一个负载迁移和恢复处理.
泛域名路由
泛域名解释在 web 服务代理中比较常用的功能, 主要由代理服务器根据不同请求的域名来做不需同服务的转发. Bumblebee 同样也支持泛域名路由解释, 就是针对不同请求的域名来制定不同的转发规则. Bumblebee 对泛域名的转发配置非常简单只需要加载 BeetleX.Bumblebee.Configuration 新版本插件在路由管理配置即可 (由于组件支持标准的 http1.1 协议, Bumblebee 不仅可以做 webapi 网关, 还能做网站代理).
运行部署
Bumblebee 配置路由解释, 只需要加载 BeetleX.Bumblebee.Configuration 插件启动后在 Routes 中配置即可.
- g = new Gateway();
- g.HttpOptions(
- o =>
- {
- o.Port = 80;
- o.LogToConsole = true;
- o.LogLevel = BeetleX.EventArgs.LogType.Error;
- });
- g.Open();
- g.LoadPlugin(
- typeof(Bumblebee.Configuration.Management).Assembly
- );
如果不想自己编写代码可以下载编译的运行包 https://github.com/IKende/Bumblebee/blob/master/bin/ 下载 1.2 或更高版本; 运行后 访问 http://host/__system/bumblebee/
配置
在 Routes 添加路由规则, 如果转发规则需要对域名进行一个匹配那规则是域名 | 路径
beetlexjs.ikende.com|.*
以上规则是配置经过 beetlexjs.ikende.com 域访问的所有请求都到这个规则里.
以上官网的路由配置规则 beetlexjs.ikende.com|.* 路由到 http://localhost:8081/, 而其它则路由 http://localhost:8080/. 由于服务打开了处理服务地址输出所以访问这两个域的头信息可以看到:
ikende.com
beetlexjs.ikende.com
更多资料可查看组件开源网站 https://github.com/IKende/Bumblebee/wiki
来源: https://www.cnblogs.com/smark/p/11751113.html