DJI(大疆创新)http api服务网关

本文介绍了DJI的HTTP服务网关系统,用于微服务治理和开放API接入。系统包括API网关、网关控制台和度量数据采集分析,支持服务注册、身份认证、流控、服务授权等。API网关采用异步处理,而服务消费者通过调用特定URL,携带认证信息,经由网关转发至服务提供者。此外,系统还涉及服务心跳、失败重试、日志采集和系统部署策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DJI(大疆创新)http服务网关系统是用于对http服务进行治理的系统,支撑微服务的落地和开放平台open api的接入。支持跨多机房的服务路由,通过该系统可以对调用方进行身份认证、服务授权&鉴权、服务流控、服务降级、调用度量数据统计分析、服务依赖视图等。

整个系统架构如下图,分为三大部分:api网关、网关控制台、度量数据采集分析(这个未在图中体现)。

 

1.api服务网关

api服务网关是一个java web应用,域名:apigw.xxx.com。api服务网关类似企业应用集成中的ESB,为服务调用提供一个统一的访问点,支持服务流控和服务异常情况下的fail-fast。

服务网关实现可采用的技术和组件:

A)mule、camel、servicemix/JBI等中间件

B)nginx+lua脚本、OpenResty

C)spring integration

考虑到代码的维护性和开发技能,没有使用这些技术。

 为了提高性能和并发,全程采用异步方式,上图中的拦截器(过滤器)、servlet(包括servlet异步io)http client均为异步。

2.网关控制台

 网关控制台是一个java web应用,域名apiadmin.xxx.com。提供domain管理、应用管理、服务授权、服务监控、统计和度量数据展示、查看服务全局视图等功能。 

 

服务消费者和服务提供者都要在网关控制台进行应用注册,控制台为每个应用分配应用id(appId唯一)和应用密钥(appSecret)。注册时需要提供的信息:应用名称、应用描述、应用负责人、负责人手机&邮箱。

 

3.服务注册

http服务可用任意语言实现,如ruby、php、java。服务提供者要向服务网关注册其提供的http服务。

服务注册接口urlhttp://apigw.xxx.com/registry/services,http方法PUT

服务提供者启动后,调用该接口将其服务注册到服务注册中心,服务注册请求http bodyjson字符串,格式如下:

{“appId”:”${appId}”,

“httpServices”: {“endpoint”:[“http://${ip}:${port}?urlPrefixPattern=/xxx”,…],

services”:[ {“resourceName”:”${resourceName}”,

                        “version”:”${version}”

urls”:[{“name”:”${name}”,”url”:”/xxx/xxx”,”method”:”GET”,

”serverTimeout”:${ms}},…

]

},…

  ]

}

}

说明:appId为服务提供者的应用id

endpointhttp服务地址,urlPrefixPattern是可选的,为url前缀模式,对java应用,就是servlet url pattern的前缀匹配模式字符串,urlPrefixPattern/开头,例如/api

endpoint示例["http://58.1.1.1:8080","http://59.2.61.34?urlPrefixPattern=/api"]

### 实现大疆设备RTMP流上传至云端 为了实现大疆设备的RTMP流上传到云端,需先理解整个流程涉及到的基础组件和服务配置。EMQX作为消息中间件,在处理无人机与服务器之间的通信方面扮演着重要角色[^1]。 #### 配置EMQX以支持RTMP流传输 EMQX不仅能够处理MQTT协议的消息传递,还可以与其他多种协议集成来满足不同场景下的需求。对于实时音视频流如RTMP的支持,则通常需要额外配置或借助第三方插件完成。具体操作如下: - **启用必要的插件**:确保启用了`emqx_plugin_template`或其他适用于直播推流功能的相关插件。 - **设置监听端口**:为RTMP服务指定专用的网络接口和端口号,以便接收来自客户端的数据包并转发给目标存储位置。 ```bash listener.tcp.rtmp = 1935 ``` - **定义推送规则**:创建自定义脚本或者利用现有工具(例如FFmpeg),将接收到的RTMP流重新编码后发送至上层应用服务器或云储存空间。 #### 使用DJI SDK进行开发 基于DJI提供的SDK,开发者可以直接访问飞行器硬件资源,并控制其行为模式。针对视频流传送部分,官方文档可能并未给出详尽指导;然而,通过研究开源项目以及社区分享的经验贴,可以获得一些实用技巧[^2]。 ##### 关键代码片段展示 下面是一个简单的Python程序示例,它展示了如何初始化连接、获取媒体文件列表并将选定项转换成适合互联网传播的形式: ```python from dji_sdk import DJISDKManager, MediaFile def upload_rtmp_stream(file_path: str, rtmp_url: str): """Upload a media file as an RTMP stream.""" # Initialize the connection with drone sdk_manager = DJISDKManager() vehicle = sdk_manager.get_vehicle() try: # Fetch all available files from onboard storage media_files = vehicle.media.fetch_all_media_info().media_file_list target_file = next((f for f in media_files if f.file_name == file_path), None) if not target_file: raise ValueError(f"No such file found at {file_path}") # Convert and push video content via FFmpeg command line tool ffmpeg_cmd = [ 'ffmpeg', '-i', target_file.download_absolute_path, '-c:v', 'libx264', '-preset', 'ultrafast', '-tune', 'zerolatency', '-f', 'flv', rtmp_url ] process = subprocess.Popen( ffmpeg_cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT ) while True: output = process.stdout.readline() if output == '' and process.poll() is not None: break print(output.strip()) finally: del sdk_manager ``` 上述例子假设已经成功建立了与无人机的安全链接,并且拥有合法的操作权限。实际应用场景中还需要考虑更多因素,比如错误重试机制、日志记录等。 #### 利用HTTP服务网关优化性能 考虑到大规模并发请求带来的压力,建议采用专业的负载均衡方案分担流量负荷。DJI所设计的HTTP服务网关系统正好提供了这样的能力——不仅可以有效管理内部微服务体系结构中的各个节点间交互过程,而且对外部用户提供了一致性的RESTful风格API入口[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值