[发明专利]基于Go语言的消息处理方法及装置、存储介质有效
| 申请号: | 201910630508.2 | 申请日: | 2019-07-12 |
| 公开(公告)号: | CN110389844B | 公开(公告)日: | 2022-07-19 |
| 发明(设计)人: | 赵海洋;刘梦男;刘丽;刘汉东;杨春华;于欣;栗一龙 | 申请(专利权)人: | 辽宁途隆科技有限公司 |
| 主分类号: | G06F9/54 | 分类号: | G06F9/54;G06F8/30 |
| 代理公司: | 北京中强智尚知识产权代理有限公司 11448 | 代理人: | 黄耀威 |
| 地址: | 110035 辽宁省沈阳市皇*** | 国省代码: | 辽宁;21 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 go 语言 消息 处理 方法 装置 存储 介质 | ||
本申请公开了一种基于Go语言的消息处理方法及装置、存储介质、计算机设备,该方法包括:接收待存储消息以及待存储消息对应的Channel;获取与待存储消息对应的Channel相应的队列文件的描述符;基于待存储消息的消息长度,更新队列文件的元数据;将待存储消息写入队列文件中。本申请将原本存储在内存Channel中的消息,直接持久化存储在本地的队列文件中,避免因为Channel本身存储在内存中,在服务器崩溃等异常情况导致的消息丢失的问题,并且与现有技术中将内存Channel中的消息存储在其他服务器中的方式相比,本申请直接存储在本地,不需要经过网络,不受网络波动的影响,存储速度更快效率更高。
技术领域
本申请涉及基于Go语言的消息处理技术领域,尤其是涉及到一种基于Go语言的消息处理方法及装置、存储介质、计算机设备。
背景技术
golang语言中的Channel是一种进行并发编程的高效工具。在请求量大、并发高的情况下,需要使用多个goroutine并发的处理任务以提高效率。各个独立的goroutine之间可以使用Channel进行相互通信。golang在语言层面提供支持,Channel存储于内存中而且是并发安全的。然而Channel的问题在于不支持持久化,当服务宕机之后,Channel中保存的状态就丢失了。这对于很多业务场景的编程会带来不便。而使用专门的消息队列服务可以规避这种问题,一般需要依赖网络进行通信,但同时服务就会受到网络状况的影响,而且有一定的网络延迟。
发明内容
有鉴于此,本申请提供了一种基于Go语言的消息处理方法及装置、存储介质、计算机设备,将原本存储在内存Channel中的消息,直接持久化存储在本地的队列文件中,避免因为Channel本身存储在内存中,在服务器崩溃等异常情况导致的消息丢失的问题。
根据本申请的一个方面,提供了一种基于Go语言的消息处理方法,包括:
接收待存储消息以及所述待存储消息对应的Channel;
获取与所述待存储消息对应的Channel相应的队列文件的描述符;
基于所述待存储消息的消息长度,更新所述队列文件的元数据;
将所述待存储消息写入所述队列文件中。
具体地,所述方法还包括:
接收消息读取指令以及所述消息读取指令对应的Channel;
获取与所述消息读取指令对应的Channel相应的队列文件的描述符;
基于所述待读取消息的读取长度以及所述队列文件的缓冲区状态信息,更新所述队列文件的元数据;
根据所述读取长度,从所述队列文件中读取所述待读取消息。
具体地,所述Channel包括至少一个,所述队列文件包括至少一个,任意一个所述Channel对应于一个所述队列文件,任意一个所述队列文件对应于一个所述Channel。
具体地,所述元数据包括写缓冲区状态信息以及读缓冲区状态信息,所述写缓冲区状态信息包括写缓冲区滑动窗口地址以及写缓冲区滑动窗口大小,所述读缓冲区状态信息包括读缓冲区滑动窗口地址以及读缓冲区滑动窗口大小;
所述基于所述待存储消息的消息长度,更新所述队列文件的元数据,具体包括:
基于所述待存储消息的消息长度,对当前的所述元数据中的所述写缓冲区滑动窗口地址、所述写缓冲区滑动窗口大小以及所述读缓冲区滑动窗口大小进行更新。
具体地,所述基于所述待读取消息的读取长度以及所述队列文件的缓冲区状态信息,更新所述队列文件的元数据,具体包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于辽宁途隆科技有限公司,未经辽宁途隆科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910630508.2/2.html,转载请声明来源钻瓜专利网。





