
文章插图
主要是使用vscode devContainer的方式来搭建开发调试环境,这里稍微解释下,devContainer开发容器是把工程所需的环境打包成容器镜像,在本机运行vscode后会连接到这个开发容器,特别envoy是个cpp项目 , 环境配置比较复杂,这种方式这样大大提高了开发环境的搭建
但是对于计算机的配置有一些要求:
- 内存>= 32G
 - 空余磁盘空间>100G的
 

文章插图
会默认在WSL2环境启用下面2个linux子系统

文章插图
这里有个坑 默认好像是安装在系统盘C盘,如果你的C盘剩余可用空间如果低于100G的话,需要更改 WSL Docker Desktop 存储路径
我是将WSL Docker Desktop 存储路径转存到了我的移动硬盘

文章插图

文章插图
具体如何操作这里请参考 https://blog.csdn.net/qq12547345/article/details/125358539
下载envoy源码https://github.com/envoyproxy/envoy
git clone 这里就得注意,我在windows环境git clone后会遇到文件的换行格式有问题,然后我用wsl的ubuntu机器git clone 就没有这个问题 。
也许是我的环境问题,如果你也遇到了提示文件格式有问题,可以试试
我本来是用最新版的尝试,发现不行(请看文章最后我遇到的错误记录),然后我就一个版本一个版本的试验,在1.20.7版本搞成功了, 下面是基于1.20.7版本的envoy 。
构建开发容器打开vscode装好 DevContainer这个插件

文章插图
vscode会检测到envoy工程的devcontainer配置文件 就会给个提示

文章插图
在开发容器内生成相应的依赖文件这一步成功完成后 , 代码着色,代码跳转就没问题
我们在vscode里面新开一个Terminal

文章插图
# 这个命令需要在容器内部执行sudo chown -R vscode /workspaces
文章插图
tools/vscode/refresh_compdb.sh
文章插图

文章插图
会创建一个complie_commands.json文件

文章插图
检查代码提示和跳转确认都正常

文章插图
调试环境搞一个envoy的配置文件 envoy-demo.yaml
static_resources:  listeners:  - name: main    address:      socket_address:        address: 0.0.0.0        port_value: 8888    filter_chains:    - filters:      - name: envoy.filters.network.http_connection_manager        typed_config:          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager          stat_prefix: ingress_http          codec_type: AUTO          route_config:            name: local_route            virtual_hosts:            - name: local_service              domains:              - "*"              routes:              - match:                  prefix: "/"                route:                  cluster: web_service          http_filters:          - name: envoy.filters.http.lua            typed_config:              "@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua              inline_code: |                function envoy_on_request(request_handle)                  local headers, body = request_handle:httpCall(                  "soa_service",                  {                    [":method"] = "POST",                    [":path"] = "/",                    [":authority"] = "192.168.1.5"                  },                  "hello world",                  5000)                  request_handle:headers():add("foo", 'yuzd')                end                function envoy_on_response(response_handle)                  body_size = response_handle:body():length()                  response_handle:headers():add("test-body-size", tostring(body_size))                end          - name: envoy.filters.http.router  clusters:  - name: web_service    type: STRICT_DNS  # static    lb_policy: ROUND_ROBIN    load_assignment:      cluster_name: web_service      endpoints:      - lb_endpoints:        - endpoint:            address:              socket_address:                address: 127.0.0.1                port_value: 8000  - name: soa_service    type: STRICT_DNS  # static    lb_policy: ROUND_ROBIN    load_assignment:      cluster_name: soa_service      endpoints:      - lb_endpoints:        - endpoint:            address:              socket_address:                address: 192.168.1.5                port_value: 5000
		  	
    
     
    
    
    
推荐阅读
           - 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
- 
              
              
            
 
          
- 云原生时代的DevOps平台设计之道 
 
- Taurus.MVC 微服务框架 入门开发教程:项目部署:7、微服务节点的监控与告警。 
 
- IOS12未受信任的企业级开发者怎么解决 
 
- 如何解决未受信任的企业级开发者的问题(如何安装未受信任的企业级开发者) 
 
- 驱动开发:内核枚举IoTimer定时器 
 
- ipad未受信任的企业级开发者怎么解决(ipad开发者模式) 
 
- 未受信任的企业级开发者怎么设置(未受信任的企业级开发者有危险吗) 
 
- ipad未受信任的企业级开发者怎么打开(软件在ipad上不受信任) 
 
- ios15未信任企业开发者怎么解决(ios15找不到企业信任) 
 
- iphone未受信任的企业级开发者怎么解决 
 
            
              
            
          