BeetleX服务网关之服务发现与泛域名路由
在新版本的服务网关中提供了服务发现和泛域名路由解决功能,服务发现可以在无须配置的情况下实现服务自动注册到网关中解脱对服务配置的繁琐工作;而泛域名路由则可以针对不同的域名制定不同的负载规则。
使用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