# gocommon > Go 的开发框架组件,目前集成logger,http-server,http-client,db,redis,nacos,kafka,skywaling,qconf 等框架 ## 使用/开发须知: 1、所有的配置项的key-value都是字符串格式!使用properties 格式 2、下列是各个配置属性,和例子 3、不允许在master分支上直接变更开发,需要merge 4、所有的API都不相互依赖,抽象出来 5、全部都需要走单元测试 6、提交完代码走一遍`make` 测试代码 ## 全局配置 | key | default_value | desc | eg | 是否必须 | | ------------------------ | ------------- | ------------------------------------------ | ----------- | :------: | | application.env | | 当前的环境配置,分为:`debug|test|release` | debug | 是 | | application.project_name | | 当前的应用名称 | go-template | 是 | | application.port | | 当前应用的端口号 | 13058 | 是 | 远程配置项: ```properties # app application.env=debug application.project_name = go-template application.port = 13088 ``` 本地`config/env.ini`配置必须包含项,如果使用nacos的需要配置一下信息,需要根据nacos具体配置信息走 ```ini [conf] # file|apollo|nacos,file直接读取文件 driver = nacos [nacos-config] host = 10.100.101.20:8848,10.100.103.130:8848,10.100.99.14:8848 log_path = /data/log/go-template namespace_id = ed35034b-634e-4ed5-9266-d7366d389351 user_name = nacos password = nacos data_id = go-template ``` Apollo配置中心的话: `config/env.ini` ```properties [application] # env : (debug|test|release) test测试环境 env = debug [conf] # file|apollo|nacos,file直接读取文件 driver = apollo # apollo 定时拉取的刷新时间,单位s remote_refresh_interval = 30 ``` ## MySQL | key | default_value | desc | 是否必须 | | ------------------------- | ------------- | -------------------------------------------------- | -------- | | mysql.dbname | | 主库的数据库名称 | 是 | | mysql.host | | | 是 | | mysql.port | | | 是 | | mysql.user | | | 是 | | mysql.password | | | 是 | | mysql.charset | utf8 | | 否 | | mysql.slave_dbname | | 从库的数据库名称 | 是 | | mysql.slave_host | | | 是 | | mysql.slave_port | | | 是 | | mysql.slave_host | | | 是 | | mysql.slave_user | | | 是 | | mysql.slave_password | | | 是 | | mysql.slave_charset | utf8 | | 否 | | mysql.read_timeout | 5 | 读超时,单位s | 否 | | mysql.write_timeout | 5 | 写超时,单位s | 否 | | mysql.timeout | 10 | 最大超时时间,单位s | 否 | | mysql.max_idle | 10 | 最大空闲连接数 | 否 | | mysql.max_conn | 100 | 最大连接数 | 否 | | mysql.conn_max_life_time | -1 | 连接的最大时间,默认是无限制的,单位s | 否 | | mysql.log_level | 2 | 0:debug,1:info,2:warn,3:error,4:关闭打印,默认warn | 否 | | mysql.log_file | | 日志文件,不做日志切分 | 是 | | mysql.refresh_config_time | 30 | 热跟新时间,单位s | 否 | ```properties mysql.host = 10.9.198.84 mysql.port = 3306 mysql.user = aaa mysql.password = aaa@2014 mysql.dbname = aaa mysql.slave_host = 10.9.198.84 mysql.slave_port = 3306 mysql.slave_user = aaa mysql.slave_password = aaa@2014 mysql.slave_dbname = aaa mysql.show_sql=true mysql.log_file=/data/log/go-template/aaa.log ``` ## Redis | key | default_value | desc | eg | 是否必须 | | ------------------------ | ------------- | ------------------------------ | ------------------------ | ------------------------ | | redis.host | | host , debug环境直接连接,其他环境qconf获取地址 | | 是 | | redis.cache_prefix | | cache 前缀 | | 否 | | redis.password | | 密码,没有就不需要设置 | | 否 | | redis.database | 0 | 默认0 | | 否 | | redis.max_conn | 10000 |最大连接数量| | 否 | | redis.max_idle | 50 |最大空闲连接数| | 否 | | redis.idle_timeout | 10 |最大空闲连接时间,单位s| | 否 | | redis.connect_time_out | 5 |最大连接超时时间,单位s| | 否 | | redis.read_time_out | 5 |最大读超时时间,单位s| | 否 | | redis.write_time_out | 5 |最大写超时时间,单位s| | 否 | | redis.is_direct | false |由于test/release环境qconf连接,兼容非qconf连接,采用的这个字段,如果标记为ture 则直接连接,debug环境无须设置| | | ```properties redis.host = 10.9.188.145:6379 ``` ## Logger | key | default_value | desc | eg | 是否必须 | | ------------------------ | ------------- | ------------------------------ | ------------------------ | ------------------------ | | log.access_log | | 访问日志,按日切割 | /data/log/go-template/access.log | 是 | | log.monitor_log | | 监控日志,按日切割 | /data/log/go-template/monitor.log | 是 | | log.task_log | |任务日志,按日切割| /data/log/go-template/task.log | 是 | | log.third_log | |调用第三方接口日志,按日切割| /data/log/go-template/third.log | 是 | | log.project_log | |项目日志,按小时和异常类型切割| /data/log/go-template/go-template.log | 是 | ```properties log.access_log = /data/log/go-template/access.log log.monitor_log = /data/log/go-template/monitor.log log.task_log = /data/log/go-template/task.log log.third_log = /data/log/go-template/third.log log.third_log_switch = off #默认开启,可通过配置 off 关闭 log.project_log = /data/log/go-template/go-template.log ``` ## Qconf | key | default_value | desc | 是否有无 | | ------------------------ | ------------- | ------------------------------ | ------------------------------ | | qconf.qconfIdc | | qconf 配置 | 是 | ```properties qconf.qconfIdc = rd_codis_test ``` ## Kafka | key | default_value | desc | eg | 是否必须 | | ------------------------ | ------------- | ------------------------------ | ------------------------ | ------------------------ | | kafka.host | | 多个host以英文,分割 | kafka01.dev.in.songguo7.com:9092,kafka02.dev.in.songguo7.com:9092 | 是 | | kafka.log_path | | 日志路径 | /data/log/go-template/kafka.log | 是 | ### 消费者 | key | default_value | desc | eg | 是否必须 | | ------------------------ | ------------- | ------------------------------ | ------------------------ | ------------------------ | | kafka.topic | | topic信息多个以,分开, {topic_name1},{topic_name2} | business_event,city_op_event | 是 | | kafka.group_name | | 日志路径 | go-template_dev | 是 | | kafka_consumer_{topic_name}.topic | | topic 名称 | business_event_dev | 是 | | kafka_consumer_{topic_name}.process_num | 1 | 消费数量 | 3 | 否 | ```properties ## kafka kafka.host = kafka01.dev.in.songguo7.com:9092,kafka02.dev.in.songguo7.com:9092,kafka03.dev.in.songguo7.com:9092 kafka.log_path = /data/log/go-template/kafka.log # 多个Topic可以配置多个 kafka.topic = business_event,city_op_event kafka.group_name = go-template_dev # kafka-topic business_event kafka_consumer_business_event.topic = business_event_dev kafka_consumer_business_event.process_num = 3 # kafka-topic city_op_event kafka_consumer_city_op_event.topic = city-op-event-dev kafka_consumer_city_op_event.process_num = 3 ``` ### 生产者 | key | default_value | desc | eg | 是否必须 | | ------------------------ | ------------- | ------------------------------ | ------------------------ | ------------------------ | | kafka.group_name | | 消费组 | | 否 | ## Nacos > ​ 问题:nacos 由于 logging属于全局变量,但是每次初始化都会init,导致初始化时间发生data race现象. [#issues](https://github.com/nacos-group/nacos-sdk-go/issues/148) ### nacos-服务注册/服务发现中心 | key | default_value | desc | eg | 是否必须 | | ------------------ | ------------- | ---------------------- | ------------- | :------: | | nacos-server.server_name | ${application.project_name} | 当前服务名称 | go-template | 是 | | nacos-server.server_port | ${application.port} | 当前服务暴露的对外端口 | 8080 | 是 | | nacos-server.server_host | 默认本地网卡地址 | 当前服务地址,默认本地网卡地址 | 172.15.66.93 | 否 | | nacos-server.group_name | DEFAULT_GROUP | 组名称 | DEFAULT_GROUP | 否 | | nacos-server.cluster_name | DEFAULT | 集群名称 | DEFAULT | 否 | | nacos-server.host | | 多个host以英文,分割 | 127.0.0.1:80,127.0.0.1:443 | 是 | | nacos-server.log_path | | 日志路径 | /data/log/nacos.log | 是 | | nacos-server.namespace_id | | 空间名称,public空间不需要传递namespace_id | ed35034b-634e-4ed5-9266-d7366d389351 | 否 | | nacos-server.user_name | | 用户名 | nacos | 否 | | nacos-server.password | | 密码 | nacos | 否 | | nacos-server.timeout | 5000 | 连接超时时间,单位ms | 1000 | 否 | | nacos-server.log_level | debug | 日志打印级别:debug,info,warn,error | | 否 | #### 通用配置: ```properties nacos-server.host=10.100.101.20:8848,10.100.103.230:8848,10.100.99.14:8848 nacos-server.log_path=/data/log/go-template nacos-server.log_level=warn nacos-server.namespace_id=84663e76-f64a-4331-a3a6-efd26ead7bf1 nacos-server.user_name=cityservice_dev_nacos nacos-server.password=MrHu0qvmdK nacos-server.timeout=5000 ``` #### 服务注册: ```properties # 服务端口,如果为空取 application.port nacos-server.server_port=8080 # 服务名称,如果为空取 application.project_name nacos-server.server_name=go-template # 默认为当前主机ipv4地址 nacos-server.server_host=127.0.0.1 # 组 nacos-server.group_name=DEFAULT_GROUP # 集群(默认即可) nacos-server.cluster_name=DEFAULT ``` #### 服务发现: 每个服务都需要配置以下配置: ```properties # 必须设置 ebike-factory-api.service_name = ebike-factory-api # 默认值 DEFAULT_GROUP ebike-factory-api.group_name = DEFAULT_GROUP # 默认值 DEFAULT ebike-factory-api.clusters = DEFAULT ``` ### nacos-配置中心 | key | default_value | desc | eg | 是否必须 | | ------------- | ------------- | ------------- | ----------------------- | :------: | | nacos-config.data_id | | 所属的Data Id | go-template | 是 | | nacos-config.group | DEFAULT_GROUP | 所属的Group | 默认就是:DEFAULT_GROUP | 否 | | nacos-config.host | | 多个host以英文,分割 | 127.0.0.1:80,127.0.0.1:443 | 是 | | nacos-config.log_path | | 日志路径 | /data/log/nacos.log | 是 | | nacos-config.namespace_id | | 空间名称,public不需要配置这一项 | ed35034b-634e-4ed5-9266-d7366d389351 | 否 | | nacos-config.user_name | | 用户名 | nacos | 否 | | nacos-config.password | | 密码 | nacos | 否 | | nacos-config.timeout | 5000 | 连接超时时间,单位ms | 1000 | 否 | | nacos-config.log_level | debug | 日志打印级别:debug,info,warn,error | | 否 | ```properties [nacos-config] host = 10.100.101.20:8848,10.100.99.14:8848 log_path = /data/log/go-template namespace_id = ed35034b-634e-4ed5-9266-d7366d389351 user_name = nacos password = nacos data_id = go-template group = DEFAULT_GROUP log_level = error ``` ## Elastic | key | default_value | desc | eg | 是否必须 | | ---------------- | ------------- | ------------ | --------------------------------- | :------: | | elastic.host | | IP | 127.0.0.1:10086 | 是 | | elastic.log_file | | 日志文件地址 | /data/log/go-template/elastic.log | 是 | ## Rocket-MQ | key | default_value | desc | eg | 是否必须 | | ----------------------------- | ------------- | ------------------------------------------------------------ | ----------------------------------- | :---------------------------------------------: | | rocket_mq.host | | IP | 127.0.0.1:9871,127.0.0.1:9872 | 是 | | rocket_mq.consumer.group_name | | 消费组 | go-common_consumer | 是 | | rocket_mq.producer.group_name | | 生产组 | go-common_producer | 是 | | rocket_mq.access_key | | access_key | | 否(根据服务端是否配置有密码) | | rocket_mq.secret_key | | secret_key | | 否(根据服务端是否配置有密码) | | rocket_mq.security_token | | security_token | | 否(根据服务端是否配置有Token,目前业务不需要) | | rocket_mq.log.filename | | rocket-mq 日志,切割时间是1day,清理时间是30day | /data/log/go-template/rocket-mq.log | 否(如果没有设置则会走console打印) | | rocket_mq.log.level | info | debug\|info\|warn\|error | | 否 | | rocket_mq.trace.enable | true | 是否开启消息追踪(可以在RocketMQ-Console中查看),如果需要自定义配置trace 请设置为false | | 否(默认开启) | | rocket_mq.skywalking.enable | true | 是否开启skywalking进行链路追踪 | | 否(默认开启) | eg: ```properties rocket_mq.host = 127.0.0.1:9871,127.0.0.1:9872 rocket_mq.consumer.group_name = go_template_consumer rocket_mq.producer.group_name = go_template_producer rocket_mq.access_key = rmq_access_key rocket_mq.secret_key = rmq_secret_key rocket_mq.trace.enable = true rocket_mq.skywalking.enable = true rocket_mq.log.filename = /data/log/go-template/rocket-mq.log ```