开发OPEA微服务

打印 上一主题 下一主题

主题 1036|帖子 1036|积分 3108

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
开发微服务

在相识完 OPEA 的根本信息介绍之后,我们就可以动手开发自己的应用程序了,首先就需要开发一个微服务。
微服务的结构

OPEA 定义了一套微服务的规范,要开发微服务,我们就需要遵守这套规范。
注册微服务

首先,我们需要在代码中显式声明、注册一个微服务,这需要通过 @register_microservice 语句完成,其需要指定的参数有:


  • name:指定微服务的名称
  • service_type:指定微服务的服务范例
  • host:指定微服务使用的主机地点
  • port:指定微服务使用的主机端口
  • endpoint:指定微服务对外暴露的端点,即对外提供服务的接口
  • input_datatype:指定微服务接收用户输入的数据范例
  • output_datatype:指定微服务响应返回给用户的数据范例
比如,我们要开发一个语音识别微服务,接收用户的语音输入,并识别出语音信息转换成文本进行输出,那么,我们的微服务就可以如许进行注册:
  1. @register_microservice(
  2.     name="opea_service@asr",
  3.     service_type=ServiceType.ASR,
  4.     host='0.0.0.0',
  5.     port=9081,
  6.     endpoint="/v1/audio/transcriptions",
  7.     input_datatype=Base64ByteStrDoc,
  8.     output_datatype=TextDoc,
  9. )
复制代码
上述案例中,我们注册了一个名叫 opea_service@asr 的微服务,服务范例是 ServiceType.ASR 即语音识别服务,服务监听端口是 9081,服务对外暴露的接口是 /v1/audio/transcriptions,服务接收 Base64 编码的 Base64ByteStrDoc 语音数据字符串,在识别完语音信息后将以文本情势 TextDoc 返回给用户。
定义微服务的处置惩罚逻辑

我们注册完微服务后,接下来就是需要实现微服务的具体处置惩罚逻辑了。根据 OPEA 的规范,我们需要使用 @register_statistics 来声明微服务的处置惩罚逻辑方法,并在方法中实现具体的逻辑。
根据我们注册的微服务、以及期望实现的逻辑,我们可以定义具体实现为:
  1. @register_statistics(names=["opea_service@asr"])
  2. async def audio_to_text(audio: Base64ByteStrDoc):
  3.     byte_str = audio.byte_str
  4.     inputs = {"audio": byte_str}
  5.     # 请求底层基础功能进行语音识别处理
  6.     response = requests.post(url="http://remotehost:port/v1/asr", data=json.dumps(inputs), proxies={"http": None})
  7.     # 返回响应结果
  8.     return TextDoc(text=response.json()["asr_result"])
复制代码
在上述案例中,我们使用 @register_statistics(names=["opea_service@asr"]) 声明了方法 audio_to_text 是微服务 opea_service@asr 的具体实现方法。该方法的输入参数数据范例便是我们注册微服务时指定的数据范例 Base64ByteStrDoc,方法的返回值数据范例是注册微服务时指定的返回数据范例 TextDoc。通过输入参数 audio 我们可以取到 byte_str 变量,这个就是用户提供的哀求数据的语音数据。在具体的实现逻辑中,我们哀求了一个语音转文本的底层服务,获取到了服务返回的数据 asr_result 便是语音识别效果。
启动微服务

定义完微服务、具体实现逻辑之后,我们还需要将微服务启动起来,启动就比力简单了,根据名称指定要启动的微服务,一条语句即可:
  1. opea_microservices["opea_service@asr"].start()
复制代码
完整的微服务程序

下面是完整的微服务程序:
  1. import jsonimport osimport timeimport requestsfrom comps import (    Base64ByteStrDoc,    TextDoc,    ServiceType,    opea_microservices,    register_microservice,    register_statistics,    statistics_dict,)"""注册微服务"""@register_microservice(
  2.     name="opea_service@asr",
  3.     service_type=ServiceType.ASR,
  4.     host='0.0.0.0',
  5.     port=9081,
  6.     endpoint="/v1/audio/transcriptions",
  7.     input_datatype=Base64ByteStrDoc,
  8.     output_datatype=TextDoc,
  9. )
  10. # 微服务的具体处置惩罚逻辑@register_statistics(names=["opea_service@asr"])
  11. async def audio_to_text(audio: Base64ByteStrDoc):
  12.     byte_str = audio.byte_str
  13.     inputs = {"audio": byte_str}
  14.     # 请求底层基础功能进行语音识别处理
  15.     response = requests.post(url="http://remotehost:port/v1/asr", data=json.dumps(inputs), proxies={"http": None})
  16.     # 返回响应结果
  17.     return TextDoc(text=response.json()["asr_result"])
  18. """启动微服务"""def start():    opea_microservices["opea_service@asr"].start()
  19. if __name__ == "__main__":    start()
复制代码
微服务验证

在验证之前,我们需要启动该服务:
  1. python app.py
复制代码
然后我们可以在Jupyter Notebook中进行验证:
  1. import requests, json, base64
  2. with open("statics/examples/audio_test.wav", 'rb') as audio_file:
  3.     """
  4.     读取文件内容到字节字符串
  5.     """
  6.     audio_bytes = audio_file.read()
  7. url="http://localhost:9081/v1/audio/transcriptions"
  8. headers = {'Content-Type': 'application/json; charset=utf-8', 'accept': 'application/json'}
  9. data=json.dumps({'byte_str': base64.b64encode(audio_bytes).decode('utf-8')})
  10. response = requests.post(url=url, headers=headers, data=data)
  11. response.json()["text"]
复制代码
至此,恭喜您完成了第一个微服务应用程序!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表