前言

第一时间看到腾讯开源了毫秒服务引擎msec,就迫不及待想体验尝试一番,经过两天的折腾,总算是初步搭建好了,并成功输出了第一个hello word程序,搭建过程中遇到了各种编译问题,配置文件问题,hello world 程序问题等,最终都一一解决了,欢迎关注本人博客,后续会继续更新,感兴趣的加qq一起交流:1792153036 :)

第一步:下载源码

git clone https://github.com/Tencent/MSEC

第二步:下载依赖的第三方库

下载完源码后,执行根目录下的get_third_party.sh脚本,下载依赖的第三方库,例如protobuf等。

全部下载完后会多一个third_party目录,由于都是从官网下载的国内下载比较慢,可以自己查看sh脚本,手动下载放到相应目录上。

关注third_party/srpc目录下应该有以下几个依赖库:
- http-parser
- jansson
- libbacktrace
- libunwind
- r3c

第三步:编译srpc

进去spp_rpc/build目录执行编译:

make

编译过程不会一帆风顺,总会遇到各种各样的错误,别急,下面把我遇到的一一提出,并给出相应的解决方案。

第三步:编译错误1:提示getcwd等未定义函数问题

error: ‘getcwd’ was not declared in this scope
  • 1

解决方案:
在相应的文件中引入头文件:#include <unistd.h>
(http://stackoverflow.com/questions/13780395/failing-to-install-omentpp-4-1)

只要是提示xxx not declared in this scope,通过man xxx可以需要include哪个头文件,在相应报错的文件加上即可:
如:man getcwd

第三步:编译错误2:提示undefined reference to lzma_*

make[2]: Entering directory `/alidata/github/MSEC-master/spp_rpc/src/internal/se'
Compiling bthelper.c ...
Compiling exception.c ...
Compiling mem.c ...
Compiling memlog.c ...
Compiling vma.c ...
Linking libse.a ...
gcc -o setest setest.c -L. -lse -L./libbacktrace -lbacktrace -L./libunwind -lunwind-x86_64 -lunwind
./libunwind/libunwind-x86_64.a(elf64.o): In function `xz_uncompressed_size':
/alidata/github/MSEC-master/spp_rpc/src/third_party/libunwind-1.1/src/elfxx.c:193: undefined reference to `lzma_stream_footer_decode'
/alidata/github/MSEC-master/spp_rpc/src/third_party/libunwind-1.1/src/elfxx.c:200: undefined reference to `lzma_index_buffer_decode'
/alidata/github/MSEC-master/spp_rpc/src/third_party/libunwind-1.1/src/elfxx.c:204: undefined reference to `lzma_index_size'
/alidata/github/MSEC-master/spp_rpc/src/third_party/libunwind-1.1/src/elfxx.c:209: undefined reference to `lzma_index_end'
/alidata/github/MSEC-master/spp_rpc/src/third_party/libunwind-1.1/src/elfxx.c:206: undefined reference to `lzma_index_uncompressed_size'
/alidata/github/MSEC-master/spp_rpc/src/third_party/libunwind-1.1/src/elfxx.c:209: undefined reference to `lzma_index_end'
./libunwind/libunwind-x86_64.a(elf64.o): In function `_Uelf64_extract_minidebuginfo':
/alidata/github/MSEC-master/spp_rpc/src/third_party/libunwind-1.1/src/elfxx.c:277: undefined reference to `lzma_stream_buffer_decode'
collect2: error: ld returned 1 exit status
make[2]: *** [setest] Error 1


这个问题找的比较久,google了很多方法都不行.
比如(http://stackoverflow.com/questions/34494430/how-to-solve-link-error-in-ubuntu)提到的LD_LIBRARY_PATH变量问题:

export LD_LIBRARY_PATH=”/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH”

又比如(https://github.com/BVLC/caffe/issues/3814)提到的:

ldconfig -p | grep lzma
查看,都是正常的。

试了很多方法都不行,最后,自己试着把-L./libunwind去掉就可以了**:

gcc -o setest setest.c -L. -lse -L./libbacktrace -lbacktrace -L./libunwind -lunwind-x86_64 -lunwind

去掉-L./libunwind,改为:

gcc -o setest setest.c -L. -lse -L./libbacktrace -lbacktrace  -lunwind-x86_64 -lunwind

估计是查看库顺序导致的。

第四步:进去spp_rpc/bin目录

编译成功后,进入spp_rpc/bin目录,看到目录下有一个srpc.sh脚本,这个就是服务启动、停止、重启脚本:

启动:

./srpc.sh start

停止:

./srpc.sh stop

重启:

./srpc.sh restart

执行start命令:


发现两个错误:
- 提示Read config failed: ./../etc/config.ini 找不到对应的配置文件
- /msec.so: cannot open shared object file: No such file or directory 没有msc.so文件

第四步(2):寻找config.ini配置文件

解决思路一:修改配置文件路径,失败

看到spp_rpc/etc目录下有两个文件:service.yamlservice_simple.yaml
把启动脚本srpc.sh改为:

srpc_ctrl_confname='../etc/service.yaml'
srpc_proxy_confname='../etc/service.yaml'
srpc_worker_confname='../etc/service.yaml'
  • 1
  • 2
  • 3

启动后一直提示解析参数失败:

解决思路二:尝试根据yaml文件自动生成config.ini,失败

看到 spp_rpc/src/comm/config目录下有个main.cpp,大概看了下以为是读取yaml文件进行解析输出,结果尝试了一番也失败。

解决思路三:看解析配置文件代码逻辑,手动创建配置文件,成功!

根据解析参数失败的错误信息,找到代码在spp_rpc/src/comm/config/目录下,看了解析配置文件的代码逻辑:
按行读取,如果行是[开头的,取出[]里面的文本放到sections_的可以中,后面的行放到sections_的value里面:
再结合里面获取参数的逻辑,正确的配置文件写法应该是:
在etc目录下新建一个config.ini文件:

[SRPC]
#服务so
module=../etc/service_echo.so
#进程数
procnum=10
#心跳时间
heartbeat=99999

启动srpc.sh start,成功。

第五步:编译输出第一个Hello world程序

上面的启动中还有一个未解决的问题:提示不存在的msec.so哪里来,找啊找,终于找到了一个demo:
目录spp_rpc/src/module/rpc/template,执行readme里面的命令:

python create_rpc.py service.proto ../../ ./

执行成功后里面有一个echo_clientecho_server,分别是rpc的客户端和服务端程序:
修改echo_server/msg_echo_impl.cpp增加响应:

int CEchoServiceMsg::Echo(const EchoRequest* request, EchoResponse* response)
{/*** TODO 业务逻辑实现,request/response为业务业务定义的protobuf协议格式*      业务可使用框架自带的监控系统 ATTR_REPORT("test"), 详见monitor.h*      业务可使用框架自带的日志系统 NGLOG_DEBUG("test"),详见srpc_log.h*///新增一行:将请求的message原样返回response->set_message(request->message());return 0;
}

echo_server目录下编译:make,编译成功后目录下应该生成一个service_echo.so
把so copy到spp_rpc/etc/目录下,并修改上面新建的config.ini配置文件的mudule参数

module=../etc/service_echo.so

再次启动spp,./srpc.sh start,大功告成,启动成功!!!
回到template/echo/目录,进入template/echo/echo_client目录,利用客户端尝试调用服务端,验证是否调用成功:
执行:./client_echo_sync
返回以下错误:

error message from back-end: package body uninitialized, method return: 0
  • 1

原因protobuf的message未初始化,修改vim client_echo_sync.cpp 文件

// 定义目标服务与请求消息
CRpcUdpChannel channel("127.0.0.1:7963");
EchoRequest request;
// TODO:设置请求报文格式
//新增这一行
request.set_message("hello world");
// 执行RPC调用
EchoService::Stub stub(&channel);
CRpcCtrl ctrl;

重新编译,并执行./client_echo_sync,最后响应成功,返回hello world:

感受

前后折腾了两天,找了很多弯路,把经验都分享出来,遇到问题要善于利用google,如果实在没辙也不妨看看实现源码,反正都是开源了:)
后面会再写一些关于毫秒服务引擎msec,比如日志查看,框架实现原理,跨语言调用,protobuf编写等,欢迎关注本人博客,或qq一起交流:1792153036,或者关注我的知乎

转自: https://blog.csdn.net/qq_35440678/article/details/53495654

腾讯微服务框架-MSEC-部署 - 首个hello word服务相关推荐

  1. 容器化技术与微服务结合---结合springcloud微服务框架进行部署(含切换成阿里云docker仓库)(五)

    目录 系列 更换成阿里云仓库 开通阿里云镜像服务 创建仓库 本地k8s切换成阿里云的镜像仓库 测试阿里云镜像 准备简单的微服务 eureka 应用配置 k8s配置: demo-a 应用配置 k8s配置 ...

  2. 分布式服务框架学习笔记2 常用的分布式服务框架 与 通信框架选择

    传统垂直架构改造的核心就是要对应用进行服务化,服务化改造使用到的核心技术就是分布式服务框架. 分布式服务框架演进 应用从集中式走向分布式 大规模系统架构的设计一般原则就是尽可能地拆分,以达到更好的独立 ...

  3. 阿里云容器服务体验: 部署 ShellPays 条码支付整合服务平台 -- (四)结案陈词

    上回提要 阿里云容器服务体验: 部署 ShellPays 条码支付整合服务平台 -- (一)系统概要与环境准备 阿里云容器服务体验: 部署 ShellPays 条码支付整合服务平台 -- (二)实操 ...

  4. 微服务框架实施_规划和实施微服务的原则

    微服务框架实施 Planning a microservices-based application - where to start from? This architecture is compo ...

  5. 【Rpc】基于开源Dubbo分布式RPC服务框架的部署整合

    一.前言 Dubbo 作为SOA服务化治理方案的核心框架,用于提高业务逻辑的复用.整合.集中管理,具有极高的可靠性(HA)和伸缩性,被应用于阿里巴巴各成员站点,同时在包括JD.当当在内的众多互联网项目 ...

  6. 腾讯微服务框架-MSEC(spp-rpc)

    第一张:UML图 核心class介绍: CFrame:框架公共类,主要包括框架日志对象.框架监控日志对象.框架统计对象: CServerBase:服务器程序基础类,包含运行环境初始化.日志.统计.监控 ...

  7. 商城项目笔记一:搭建Maven工程,利用Dubbo实现SOA面向服务框架,部署zookeeper注册中心,FastDFS框架实现图片上传,部署nginx服务器。

    文章目录 1. 商城项目总结笔记: 1.1. 第一天工作记录:搭建Maven工程 1.2. 第二天工作记录:创建SOA面向服务架构,通过工具类实现分页技术 1.3. 第三天工作记录:部署nginx服务 ...

  8. Go微服务框架go-kratos实战04:kratos中服务注册和服务发现的使用

  9. centos部署python flask_python 微服务框架之nameko实践

    大纲: 1.本篇关键技术点及其释义 2.实际需求和目标 3.可行的三大解决方案 4.微服务与传统服务的差别 5.代码大纲:安装依赖及nameko五个完整的代码示例 6.附录:docker的在线安装方式 ...

最新文章

  1. 【蓝桥杯】子串分值---笔记
  2. Windows校验文件哈希hash的两种常用方式
  3. ELF 动态链接 so的动态符号表(.dynsym)
  4. python3安装教程win10_在win10和linux上分别安装Python虚拟环境|python3教程|python入门|python教程...
  5. ubuntu18.04 中个性化配置vim方法
  6. 图神经网络中可能用到的11种距离, 小结
  7. Jedis连接Redis读写基本操作
  8. MATLAB-马尔可夫链(马氏链)模型
  9. java switch语句怎么写,java怎么用switch语句
  10. [Linux 驱动] -- 电源管理芯片之 Regulator 用法 与具体使用实例
  11. 合作小红书探店博主需要注意什么?流程是怎样的?
  12. 伪原创文章如何写才算高质量
  13. Android - JNI环境搭建和简单案例入门
  14. 那些年啊,那些事——一个程序员的奋斗史 ——21
  15. 【墨者学院writeup】浏览器信息伪造之User-Agent及NetType微信网络检测破解
  16. idea提示:无法解析 文件 ‘xxx.xml‘,servelet应该有mapping
  17. 单按键自锁开关电路设计
  18. Uniswap计算过程推演
  19. Python的线程12 简易限流器
  20. 获取、采集 微信公众号文章点赞阅读数量,实时获取点赞阅读

热门文章

  1. 播放3d影片 android,手机上怎么观看3D电影?
  2. Codeforces Round #710 (Div. 3)个人题解
  3. html怎么搞一个微信图标,微信图标怎么点亮 两步搞定!
  4. 医院信息系统 php,php医院门诊信息管理系统
  5. mamp pro中mysql报错解决
  6. 计算机网络自顶向下--运输层
  7. 三点求外接园,同时计算三点的圆弧弧长,以及半径等信息
  8. Python—类私有化属性和方法
  9. word中插入图片只显示底边,其他看不到,插入公式显示不全
  10. java判断任意两数的最小公倍数和最大公约数