同步操作将从 极简美/ERPC-doc 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
在快速入门中,我们所有的例程均使用的相同的配置文件,为了简化使用,所有例程使用过程中均没有展现配置文件。接下来详细介绍一下配置文件。
ERPC总共包含两个配置文件:框架配置文件rpc.json和日志配置文件。
当动态修改配置文件(rpc.json,log.conf)时,请采用复制->修改->覆盖的方式,因为直接修改会触发rename信号,导致无法长久监控文件状态。
框架配置文件采用JSON的格式进行存储,我们以实例中的配置文件为例进行讲解。
$ cat conf/rpc.json
{
"GlobalConfiguration": {
"GlobalFixThreads":5,
"GlobalDynThreads":8,
"GlobalMaxWorkQueue":300,
"GlobalCycleTimerPeriod":"15s",
"GlobalConnectTimeout":"80ms",
"GlobalResponseTimeout":"50ms",
"GlobalLoggerConfigPath":"/work/study/Module/ERPC/source/conf/log.conf"
},
"ProcessConfiguration": [
{"service": {
"FixThreads":2,
"DynThreads":3,
"MaxWorkQueue":50,
"ConnectTimeout":"50ms",
"ResponseTimeout":"30ms",
"ListenPort":0,
"IPAddress":"/tmp/s_media_service",
"Deployment":["hello", "Key"]
}},
{"app": {
"ListenPort":8989,
"IPAddress":"127.0.0.1",
"Deployment":["logic", "IO"]
}}
]
}
整体配置分为两大块:
全局配置均已Global开头,包括固定线程数、动态线程数、最大工作队列数、循环定时器周期、连接超时、响应超时:
全局配置信息最终会转化为进程的默认配置,也就是说进程可以不配置固定线程数、动态线程数、最大工作队列数、循环定时器周期、连接超时、响应超时信息,那么就会默认使用全局的配置信息。
进程配置整体为一个JSON数组,每一项对应一个进程的配置。进程配置中也有全局配置中的固定线程数、动态线程数、最大工作队列数、循环定时器周期、连接超时、响应超时,只是不以Global开头。除此之外,每个进程还包括网络配置信息和部署配置信息。
网络配置信息包括监听端口号和IP地址信息:
说明:对于进程内部的配置建议都使用LocalSocket模式(或者环形Socket也行),速度会更快也更稳定。只有需要与外交互的进程才使用标准Socket通信,但本机内可使用INADDR_ANY,固定端口即可,本机外的进程,才需要详细的IP地址和端口信息。
进程是部署的最小单位,模块是被部署的最小单位,模块只有部署在进程中才能运转。部署配置项也是一个JSON数组,每一项对应一个模块名。
说明:在我们编写代码实现注册服务、创建观察者、远程调用等功能时,需要保证接口传入模块名与部署的模块名保持一致(区分大小写),否则ERPC无法找到对应的模块。
ERPC使用的是C语言开源日志库Zlog,详细的使用方法和配置文件详细信息可见官方网站和使用手册
这里为了简化使用,将日志库的配置标准化了,用户只需要根据自身需要,选择使用什么日志格式、配置输出方式即可。下面还是以实例的日志配置文件来讲解:
$ cat conf/log.conf
[global]
strict init = true
buffer min = 1024
buffer max = 2MB
rotate lock file = /tmp/zlog.lock
default format = "%d(%F %X).%msms %-6V %c[%p](%f:%U():%L) - %m"
[formats]
null = ""
print = "%m"
simple = "%d(%F %X) %-6V (%f:%U():%L) - %m"
normalms = "%d(%F %X).%msms %-6V %c[%p](%f:%U():%L) - %m"
normalus = "%d(%F %X).%usus %-6V %c[%p](%f:%U():%L) - %m"
complexms = "%d(%F %X).%msms %-6V %H %c[%p:%t](%f:%U():%L) - %m"
complexus = "%d(%F %X).%usms %-6V %H %c[%p:%t](%f:%U():%L) - %m"
mdc_format = "%d(%F %X).%msms %-6V %c[%p](%f:%U():%L) [%M(myMDC)] - %m"
[rules]
*.* >stdout;
#*.* >stderr;
#!.* >stderr;
#*.debug >stderr;
#*.=debug >stderr;
#*.!debug >stderr;
#*.info >stderr;
#*.notice >stderr;
#*.warn >stderr;
#*.error >stderr;
#*.fatal >stderr;
#*.* >stderr;simple
#*.* >stderr;normalms
#*.* >stderr;complexms
#*.* >stderr;mdc_format
#*.* "./aa.%d(%F).log";
#*.* "./aa.%d(%F).log";normalms
#*.* -"./aa.%d(%F).log";
#*.* "./aa.log", 1KB * 5;
#*.* "./aa.log", 10MB * 5;
#*.* "./aa.log", 10MB * 5;normalms
这里只对部分配置进行说明:
相对default format格式输出如下日志: ''' 2019-09-23 15:49:40.723ms ERROR app4930 - RPC : proxy wait timeout! '''
formats中的其他配置输出格式分别为:
RPC : proxy wait timeout!
2019-09-23 16:01:42 ERROR (rpc_proxy.c:rpc_proxy_wait():169) - RPC : proxy wait timeout!
2019-09-23 16:03:49.836ms ERROR app[7435](rpc_proxy.c:rpc_proxy_wait():169) - RPC : proxy wait timeout!
2019-09-23 16:06:09.220348us ERROR app[7696](rpc_proxy.c:rpc_proxy_wait():169) - RPC : proxy wait timeout!
2019-09-23 16:07:12.829ms ERROR konishi app[7823:18dbd740](rpc_proxy.c:rpc_proxy_wait():169) - RPC : proxy wait timeout!
2019-09-23 16:08:59.244583ms ERROR konishi app[8031:f550d740](rpc_proxy.c:rpc_proxy_wait():169) - RPC : proxy wait timeout!
*.* >stdout;
*.* >stderr;
Media.* >stdout;
Media.info >stdout;
Media.=error >stdout;
Media.!debug >stderr;
!.* >stdout;
*.* >stdout;simple
Media.* >stderr;normalms
*.* "/dev/null"
Media.* "./media.log";normalms
Media.* -"./media.log";normalms
Media.* "./media.log",1M * 5;normalms
Media.* "./media.%d(%F).log";normalms
注意:对于嵌入式设备来讲,Flash的存储有限,不建议采用日期转档,应该使用限定文档大小进行转档,并且只输出严重的错误等级(调试阶段除外)。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。