电子商务网站开发常见,门户网站建设工作总结,wordpress 百度空间,网页链接制作生成文章目录极限网关-配置说明配置文件日志、数据目录定义入口定义路由定义流程定义资源使用Demo写入两个ES集群极限网关-常见问题shutdown: ORM handler is not registered极限网关地址极限网关-配置说明 极限网关的大部分配置都可以通过 gateway.yml 来进行配置#xff0c;配置…
文章目录极限网关-配置说明配置文件日志、数据目录定义入口定义路由定义流程定义资源使用Demo写入两个ES集群极限网关-常见问题shutdown: ORM handler is not registered极限网关地址极限网关-配置说明 极限网关的大部分配置都可以通过 gateway.yml 来进行配置配置修改完成之后需要重启网关程序才能生效。 配置文件
vim /etc/gateway/gateway.yml 日志、数据目录
path.data: data
path.logs: log定义入口
每一个网关都至少要对外暴露一个服务的入口用来接收业务的操作请求这个在极限网关里面叫做 entry通过下面的参数即可定义
entry:- name: es_gatewayenabled: truerouter: defaultnetwork:binding: 0.0.0.0:8000这里定义了一个名为 es_gateway 的服务入口监听的地址是 0.0.0.0:8000使用了一个名为 default 的路由来处理请求。
定义路由
极限网关通过路由来判断流量的去向一个典型的路由配置示例如下
router:- name: defaultdefault_flow: cache_first这里定义了一个名为 default 的路由也就是业务处理的主流程请求转发、过滤、缓存等操作都在这里面进行。
定义流程
一个请求流程定义了一系列请求处理的工作单元是一个典型的管道式工作方式一个典型的配置示例如下
flow:- name: cache_firstfilter:- name: get_cache- name: elasticsearchparameters:elasticsearch: prod - name: set_cache上面的配置定义了一个名为 cache_first 的处理流使用了三个不同的 filter分别是 get_cache、elasticsearch 和 set_cache这些 filter 会依据配置的先后顺序依次执行。 各个 filter 的处理结果分别如下
get_cache这个 filter 主要用来从缓存里面拿数据如果之前发生过相同的请求并且缓存还存在且有效的情况下这个 filter 可以直接拿到缓存然后立即返回不用继续往下处理elasticsearch这个 filter 主要用来将请求转发给后端的 Elasticsearch 集群并且将 Elasticsearch 返回的响应内容继续往下传递set_cache这个 filter 会将执行结果缓存到本地内存有一些参数限制比如状态码请求大小等并设置一定的过期时间以方便下次重复请求可以直接使用缓存一般要和 get_cache 组合使用。
定义资源
这里的资源主要是指 Elasticsearch 后端服务器资源极限网关支持多个 Elasticsearch 集群可以实现将请求转发到多个不同集群也可以支持请求的蓝绿发布、灰度切换等定义一个 Elasticsearch 后端资源的方式示例如下
elasticsearch:
- name: prodenabled: trueendpoint: http://192.168.3.201:9200discovery:enabled: truerefresh:enabled: truebasic_auth:username: elasticpassword: pass通过参数 endpoint 来设置 Elasticsearch 的访问地址如果 Elasticsearch 开启了身份认证可以通过 basic_auth 来指定用户名和密码信息该用户需要有能够获取集群状态信息的权限。 通过参数 discover 可以开启自动的后端节点的自动发现用于自动检测后端节点的情况能够自动识别新增和离线的节点。
使用Demo
写入两个ES集群
提示 flow设置两个es集群时发送请求会按照顺序执行比如下面配置查询时会先执行dev再执行prd通过8000接口返回的数据是最后一个配置返回的结果
path.data: data
path.logs: logentry:- name: es_gatewayenabled: truerouter: defaultnetwork:binding: 0.0.0.0:8000router:- name: defaultdefault_flow: cache_first# 顺序执行读取写入按照顺序执行
flow:- name: cache_firstfilter:#- name: get_cache- name: elasticsearchparameters:elasticsearch: dev- name: elasticsearchparameters:elasticsearch: prd#- name: set_cache# 对应的ES节点
elasticsearch:
- name: defaultenabled: trueendpoint: http://10.8.10.12:9200
- name: devenabled: trueendpoint: http://10.8.10.12:9200
- name: prdenabled: trueendpoint: http://10.8.10.15:9200modules:
- name: elasticenabled: trueelasticsearch: devstore:enabled: truemonitoring:enabled: falseorm:enabled: trueinit_template: truetemplate_name: .gateway-defaultindex_prefix: gateway_
通过极限网关创建索引分别去dev、prd两个集群查看发现均创建成功
curl -XPUT http://10.8.10.13:8000/test_index_20210625_03 -H Content-Type: application/json -d
{settings:{number_of_shards:6,number_of_replicas:0},mappings:{properties:{account_holder_name:{type:text,fields:{keyword:{type:keyword,ignore_above:256}}}}}
}写入数据,分别查看两个集群均写入成功
curl -XPOST http://10.8.10.13:8000/test_index_20210625_03/_doc/id2 -H Content-Type: application/json -d
{properties:{account_holder_name:极限网关测试插入数据}
}查询数据,返回数据成功。修改最后配置的一个es集群prd数据再次查询发现返回的数据也被修改判断出返回的数据是最后一个配置的集群prd的数据
curl -XGET http://10.8.10.13:8000/test_index_20210625_03/_doc/id2 -H Content-Type: application/json 极限网关-常见问题
shutdown: ORM handler is not registered
[06-25 13:54:25] [ERR] [app.go:334] shutdown: ORM handler is not registeredgoroutine 1 [running]:
infini.sh/framework.(*App).Shutdown(0xc00023d480)/var/lib/jenkins/go/src/infini.sh/framework/app.go:338 0x243
panic(0xf02600, 0xc00015dae0)/usr/local/go/src/runtime/panic.go:679 0x1b2
infini.sh/framework/core/orm.getHandler(...)/var/lib/jenkins/go/src/infini.sh/framework/core/orm/orm.go:216
infini.sh/framework/core/orm.GetIndexName(0xf956a0, 0xc00018eb40, 0xf956a0, 0xc00018eb40)/var/lib/jenkins/go/src/infini.sh/framework/core/orm/orm.go:176 0xdf
infini.sh/framework/modules/elastic.loadESBasedElasticConfig()/var/lib/jenkins/go/src/infini.sh/framework/modules/elastic/elastic.go:92 0xf9
infini.sh/framework/modules/elastic.ElasticModule.Start(0xc000281ee8, 0xc000036628)/var/lib/jenkins/go/src/infini.sh/framework/modules/elastic/elastic.go:334 0x21f
infini.sh/framework/core/module.Start()/var/lib/jenkins/go/src/infini.sh/framework/core/module/module.go:87 0xc80
main.main.func1()/var/lib/jenkins/go/src/infini.sh/gateway/main.go:96 0x662
infini.sh/framework.(*App).Start(0xc00023d480, 0x10133e0, 0x10133e8)/var/lib/jenkins/go/src/infini.sh/framework/app.go:261 0x52a
main.main()/var/lib/jenkins/go/src/infini.sh/gateway/main.go:65 0x35a原因 没有引用model 解决方法 配置文件中加入 modules:
- name: elasticenabled: trueelasticsearch: devstore:enabled: truemonitoring:enabled: falseorm:enabled: trueinit_template: truetemplate_name: .gateway-defaultindex_prefix: gateway_极限网关地址