RK Boot 是企业级 Go 语言微服务框架。灵感来源于 Spring Boot 项目。
与传统的微服务框架不同,rk-boot 致力于【整合现有流行框架】以及【整合企业级别组件】的目的。使用者可以通过 rk-boot,通过简短的 YAML 文件,在1分钟之内,快速搭建【符合企业级别】要求的 Go 微服务。用户可以根据需要,选择底层 RPC 通信框架,例如 Gin,gRPC。
通过 rk-boot,构建企业级别的 Go 微服务项目。
通过 rk-boot,自动添加企业级别日志,监控,调用链,权限到微服务中。
通过 rk-boot,快速切换核心依赖,例如 RPC 框架,日志框架。
通过 rk-boot,节省开源框架的复杂学习过程,直接以 YAML 文件的形式,导入功能,无需写代码。
自定义 Entry,用户可以基于 rk-boot 拓展自己的微服务,实现无代码启动服务的目的。
go get -u github.com/rookie-ninja/rk-boot
---
gin:
- name: greeter
port: 8080
sw:
enabled: true # Enable swagger UI
commonService:
enabled: true # Enable common service
tv:
enabled: true # Enable RK TV
package main
import (
"context"
"github.com/rookie-ninja/rk-boot"
)
func main() {
// Create a new boot instance.
boot := rkboot.NewBoot()
// Bootstrap
boot.Bootstrap(context.Background())
// Wait for shutdown sig
boot.WaitForShutdownSig(context.Background())
}
$ go run main.go
$ curl -X GET localhost:8080/rk/v1/healthy
{"healthy":true}
---
grpc:
- name: greeter # Name of grpc entry
port: 8080 # Port of grpc entry
enableReflection: true
commonService:
enabled: true # Enable common service
tv:
enabled: true # Enable RK TV
sw:
enabled: true # Enable Swagger UI
package main
import (
"context"
"github.com/rookie-ninja/rk-boot"
)
// Application entrance.
func main() {
// Create a new boot instance.
boot := rkboot.NewBoot()
// Bootstrap
boot.Bootstrap(context.Background())
// Wait for shutdown sig
boot.WaitForShutdownSig(context.Background())
}
$ go run main.go
$ curl -X GET localhost:8080/rk/v1/healthy
{"healthy":true}
访问 RK TV:http://localhost:8080/rk/v1/tv
在任何 RPC 框架中,中间件/拦截器是不可或缺的一部分,比如日志拦截器(对于每一个 RPC 请求写日志),权限拦截器(对以每一个 RPC 请求验证权限)等等。rk-boot 中定义了一系列常用的【企业级别】拦截器,请访问 rk-gin,或者 rk-boot 基础指南获取更多信息。
无需编写代码!
修改 YAML 文件,并启动 Go 服务即可。
gin:
- name: greeter # Required
port: 8080 # Required
commonService: # Optional
enabled: true # Optional, default: false
interceptors: # Optional
loggingZap:
enabled: true # Enable logging middleware
$ go run main.go
// 发送请求
$ curl -X GET localhost:8080/rk/v1/healthy
{"healthy":true}
# 打印日志如下:
------------------------------------------------------------------------
endTime=2021-07-05T23:42:35.588164+08:00
startTime=2021-07-05T23:42:35.588095+08:00
elapsedNano=69414
timezone=CST
ids={"eventId":"9b874eea-b16b-4c46-b0f5-d2b7cff6844e"}
app={"appName":"rk-demo","appVersion":"master-f414049","entryName":"greeter","entryType":"GinEntry"}
env={"arch":"amd64","az":"*","domain":"*","hostname":"lark.local","localIP":"10.8.0.2","os":"darwin","realm":"*","region":"*"}
payloads={"apiMethod":"GET","apiPath":"/rk/v1/healthy","apiProtocol":"HTTP/1.1","apiQuery":"","userAgent":"curl/7.64.1"}
error={}
counters={}
pairs={}
timing={}
remoteAddr=localhost:56274
operation=/rk/v1/healthy
resCode=200
eventStatus=Ended
EOE
请访问 rk-gin,或者 rk-boot 基础指南获取更多信息
在任何 RPC 框架中,中间件/拦截器是不可或缺的一部分,比如日志拦截器(对于每一个 RPC 请求写日志),权限拦截器(对以每一个 RPC 请求验证权限)等等。rk-boot 中定义了一系列常用的【企业级别】拦截器,请访问 rk-grpc,或者 rk-boot 基础指南获取更多信息。
无需编写代码!
修改 YAML 文件,并启动 Go 服务即可。
---
grpc:
- name: greeter # Name of grpc entry
port: 8080 # Port of grpc entry
commonService:
enabled: true # Enable common service for testing
interceptors:
loggingZap:
enabled: true
$ go run main.go
// 发送请求
$ curl -X GET localhost:8080/rk/v1/healthy
{"healthy":true}
# 打印日志如下:
# logs would be printed as bellow.
------------------------------------------------------------------------
endTime=2021-07-09T23:44:09.81483+08:00
startTime=2021-07-09T23:44:09.814784+08:00
elapsedNano=46065
timezone=CST
ids={"eventId":"67d64dab-f3ea-4b77-93d0-6782caf4cfee"}
app={"appName":"rk-demo","appVersion":"master-f414049","entryName":"greeter","entryType":"GrpcEntry"}
env={"arch":"amd64","az":"*","domain":"*","hostname":"lark.local","localIP":"10.8.0.2","os":"darwin","realm":"*","region":"*"}
payloads={"grpcMethod":"Healthy","grpcService":"rk.api.v1.RkCommonService","grpcType":"unaryServer","gwMethod":"","gwPath":"","gwScheme":"","gwUserAgent":""}
error={}
counters={}
pairs={"healthy":"true"}
timing={}
remoteAddr=localhost:58205
operation=/rk.api.v1.RkCommonService/Healthy
resCode=OK
eventStatus=Ended
EOE
请访问 rk-grpc,或者 rk-boot 基础指南获取更多信息
Rockchip U-Boot 基于U-Boot 2014.10官方版本开发 Board:Nanopi M4 2G 编译配置 [Toolchain] sudo tar -jxvf arm-6.4.tar.bz2 -C /usr/local (加入環境變數) vim ~/.bashrc (位置home/andy/.bashrc) export PATH=/usr/local/ar
rk3568 的 bootrom 在 0xffff0000 处,hexdump 出来一段。 0000000000000000 <.data>: 0: d53800a0 mrs x0, mpidr_el1 4: 92403c00 and x0, x0, #0xffff 8: f100001f cmp
以GPIO2_D7为例,在uboot启动时将其设置为低电平。 打开../u-boot/arh/arm/mach-rockchip/board.c文件,在rk_board_init()函数中添加设置GPIO口状态的代码: __weak int rk_board_init(void) { char VENA_PWR_EN[4] = "led"; gpio_request( 63, VENA_
Uboot: v2017.02 Board: Firefly-RK3399 RK Uboot有两种类型的固件生成方式。 一种是uboot作为first level bootloader,那么uboot就只有一个bin文件,例如rk3288平台的就是RK3288UbootLoader_V2.30.10.bin 另外一种是uboot作为second level bootloader,那么uboot就只
使用rk维护的上游分支:U-Boot / Custodians / rockchip U-Boot Custodian Tree · GitLab,板子用的是firefly的,硬件版本:firefly-rk3288-2016.06.23。 调好的功能如下: 1、led灯点亮; 2、emmc/sd卡读写; 3、网口正常使
rkbin 仓库 rkbin 仓库用于存放 Rockchip 不开源的 bin(ddr、trust、loader 等)、脚本、打包工具等,它只是一个“工具包”仓库 1. rkbin 要跟 U-Boot 工程保持同级目录关系,否则编译会报错找不到 rkbin; 2.U-Boot 编译时会从 rkbin 索引相关的 bin、配置文件和打包工具,最后在根目录下生成 trust.img、uboot.img
1、在SDK代码创建文件夹,放置相关Secureboot工具: mkdir device/rockchip/rk3399/secureboot //创建目录, 2、使用SecureBootConsole 工具签名前,请先指定好type.xml中的芯片类型,例如3288,3399: 例如vim type.xml打开type.xml文件进行设置为3399, 3399 /****************
一般在U-boot上就设置电平值,适用于电源的复位,MIPI、LVDS、GVI之类的屏幕控制上电时序,当然,也适用任何模块以及任何引脚。 注意:如果该区域的引脚存在电源域的保护机制,需要先解除保护。 通常情况下, 在 u-boot/common/board_f.c 文件上,都能设置GPIO引脚的电平值。今天讲一下不一样的设置方式。在rk3288_7.
RK3288 6.0升级kernel.img和resource.img不起作用,设置里面查看内核编译日期没有变化,实际内核修改也没有起作用。具体原因参见:rk3288驱动修改后,更新kernel.img和resource.img不起作用_alterli的博客-CSDN博客 解决办法:上面博文提到不要make生成ota的update.img,本人测试把boot.img一起升级即可。
Rockchip Android平台boot.img DTB ramdisk解包方法 boot.img解包 使用unpack_bootimg 工具进行解包 unpack_bootimg --boot_img boot.img --out ./rockdev/ 解包后的文件 ls rockdev/ dtb kernel ramdisk second 从DTB中还原出dts文件 使用工具d
Execute the following command to build boot.scr from boot.cmd mkimage is an executable that is built with u-boot (.//tools/mkimage) mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n ‘Execute Boot
注意:本书中的 Service Mesh 章节已不再维护,请转到 istio-handbook 中浏览。 本节是根据由Nginx赞助,O’Reilly出版社出品的关于服务网格的书籍总结而来,本书标题是 The Enterprise Path to Service Mesh ,还有个副标题 Decoupling at Layer 5 ,第一版发行于2018年8月8日。这本书一共61页,本文是我对该书
微信将企业号升级为企业微信,为企业提供专业的通讯工具、丰富的办公应用与API,助力企业高效沟通与办公。智齿客服平台支持企业微信渠道,绑定后你可以使用智齿客服工作台统一接收与回复企业微信员工发来的消息 。智齿客服支持两种接入方式,原生接入和H5接入,下面介绍原生接入的步骤: 1、填写企业微信ID 获取企业微信id说明: 2.企业客户管理员扫码授权 3.企业管理员扫码后在企业微信中授权 4.完成授权后
企业微信 企业微信需要开发者授权,对接成功后,用户在企业微信的范式机器人应用发送的消息会转发给机器人,机器人会自动回复消息给企业微信用户。 开发者授权的步骤如下: 1、获取CorpID(企业ID) 在接入管理-企业微信中,填写要绑定的企业微信名称: 登录企业号管理后台“我的企业” > “企业信息”中找到CorpID,也填入对应输入框中。企业号后台如下图: 2、创建应用并绑定 在企业号管理后台“企业
本文向大家介绍Go语言Echo服务器的方法,包括了Go语言Echo服务器的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Go语言Echo服务器的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的Go语言程序设计有所帮助。
本书涵盖 CGO、Go 汇编语言、RPC 实现、Web 框架实现、分布式系统等高阶主题,针对Go语言有一定经验想深入了解Go语言各种高级用法的开发人员。
本书涵盖CGO、Go汇编语言、RPC实现、Web框架实现、分布式系统等高阶主题,针对Go语言有一定经验想深入了解Go语言各种高级用法的开发人员。对于刚学习Go语言的读者,建议先从《Go语言圣经》开始系统学习Go语言的基础知识。 目录 第一章 语言基础 1.1. Go语言创世纪 1.2. Hello, World 的革命 1.3. 数组、字符串和切片 1.4. 函数、方法和接口 1.5. 面向并发的
直接触达微信客户,一对一精细运营服务转化; 企业微信营销 相关链接: 如何绑定企业微信 如何添加客户营销动态侧边栏 如何使用吸粉二维码 如何对微信客户进行定向群发
主要内容:使用普通函数创建 goroutine,使用匿名函数创建goroutine在编写 Socket 网络程序时,需要提前准备一个线程池为每一个 Socket 的收发包分配一个线程。开发人员需要在线程数量和 CPU 数量间建立一个对应关系,以保证每个任务能及时地被分配到 CPU 上进行处理,同时避免多个任务频繁地在线程间切换执行而损失效率。 虽然,线程池为逻辑编写者提供了线程分配的抽象机制。但是,如果面对随时随地可能发生的并发和线程处理需求,线程池就不是非常直观和方便了。能否