CN111309501A - 高可用分布式队列 - Google Patents
高可用分布式队列 Download PDFInfo
- Publication number
- CN111309501A CN111309501A CN202010253503.5A CN202010253503A CN111309501A CN 111309501 A CN111309501 A CN 111309501A CN 202010253503 A CN202010253503 A CN 202010253503A CN 111309501 A CN111309501 A CN 111309501A
- Authority
- CN
- China
- Prior art keywords
- client
- message
- queue
- data
- messages
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
- 238000012545 processing Methods 0.000 claims abstract description 30
- 238000012544 monitoring process Methods 0.000 claims abstract description 17
- 238000000034 method Methods 0.000 claims abstract description 14
- 230000003993 interaction Effects 0.000 claims abstract description 13
- 230000005540 biological transmission Effects 0.000 claims abstract description 10
- 230000007246 mechanism Effects 0.000 claims description 10
- 230000006835 compression Effects 0.000 claims description 4
- 238000007906 compression Methods 0.000 claims description 4
- 230000001960 triggered effect Effects 0.000 claims description 2
- 230000004044 response Effects 0.000 abstract description 6
- 238000011160 research Methods 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000007474 system interaction Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/06—Management of faults, events, alarms or notifications
- H04L41/0654—Management of faults, events, alarms or notifications using network fault recovery
- H04L41/0668—Management of faults, events, alarms or notifications using network fault recovery by dynamic selection of recovery network elements, e.g. replacement by the most appropriate element after failure
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/30—Profiles
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/51—Discovery or management thereof, e.g. service location protocol [SLP] or web services
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开高可用分布式队列,包括Application、Server端、Client端,基于Netty分别实现了Server端及Client端,通过多节点的方式部署多套Netty Server,Server端作为队列接入端,主要负责所有消息的接入,以及对其他订阅者的消息分发;Client端主要负责业务模块与队列服务之间的数据传输及实际业务模块的数据交互;Application中通过调用Client提供出来的接口实现消息的发送及监听等操作。在性能方面保证了大容量客户端接入请求的快速响应,通过自研架构的处理大大提升了基于Netty体系的高接入性、高服务性;基于Redis对系统中产生的中间数据进行了存储处理,确保了当前应用对数据访问的时效必,基于Redis集群化部署方案,确保了当前系统完全基于去中心化的处理逻辑体系,在整个架构层面实现了服务化的高可用。
Description
技术领域
本发明涉及通信技术领域,特别涉及高可用分布式队列。
背景技术
不同异构的系统(不同开发语言开发,或不同的业务架构等)间发生数据交互、或因业务的差异,系统间处理数据的消耗时间不一致,则需要通过消息队列进行数据化交互,通过消息队列的使用,可以解决异构系统交互及数据交互等待的问题。现有消息队列部署起来结构较为复杂,并发性能低,部署集群的过程中无法去中心化,当其中的一个主节点发生故障时,整个系统会出现中断的问题,无法再进一步提供服务,当服务发生恢复之后,新加入的节点也无法直接再次承担主节点的功能。
发明内容
针对现有技术中的上述不足,本发明提供了高可用分布式队列。
为了达到上述发明目的,本发明采用的技术方案为:
高可用分布式队列,包括Application、Server端、Client端,
基于Netty分别实现了Server端及Client端,通过多节点的方式部署多套NettyServer,
Server端作为队列接入端,主要负责所有消息的接入,以及对其他订阅者的消息分发;Netty Server,其主要用于接收客户端提交的数据请求信息(队列服务消息发送、队列服务消息监听等),其作为数据交换核心;
Client端主要负责业务模块与队列服务之间的数据传输及实际业务模块的数据交互,起一个承上启下的中继作用;
Application中通过调用Client提供出来的接口实现消息的发送及监听等操作;对于不同的应用程序A、B、C而言,本队列服务中均提供相同的client端依赖供应用的接入调用,其中包含消息的发送处理,以及消息的消费处理;
Client端感知到当前Server端的中断异常之后(会触发相发相应的except事件异常),会再次重新创建与服务器端其余服务节点连接,当Server端发生连接中断时,client端基于事件感知机制,会触发exception相应的回调方法;
Netty Server队列服务集群中的任意一点感知到client端的请求之后,即会从Redis寻找是否之前有相应的事件数据等,同时会将当前该数据复写至当前的context连接对象上面;
新的Netty节点会代替之前的老的数据节点,完成与client端之间的数据交互,从而实现后期client节点数据监听的处理机制。
进一步,client端会直接与Application应用关联,可以在每一个应用中都附带client对象。
进一步,对于消息的消费处理,通过配置文件配置相对应client对应的topic即可完成消息对象client声明及实例化,而后通过标准化的接口,即可实现消息往Server集群中发送的方式;对于消息的消费处理,用户的应用程序只需实现client中对庆的ActionListener接口,通过复写接口类中的onMessage方法,即可实现从消息队中列中获取当前的消息内容,订阅topic之后,队列服务基于消息模型的不一样,分别基于点对点或者订阅/发布的模式往不同的consumer下推送消息内容,consumer接收到消息内容之后,即可完成相应不同的业务逻辑操作。
进一步,Application中通过调用Client提供出来的接口实现消息的发送及监听等操作,当消息通过Client传送时,采用基于Thrift等格式的压缩序列化方式将传输报文进一步压缩封装,然后基于MessageQueue提供的的发送、监听等机制将数据与MessageQueue之间进行交互,所有的消息内容基于Broker Channel注册的通道进行相应的发送、接收处理,Channel Handler基于传入的消息及Channel内容,一方面将连接信息与RedisSentinel中进行注册,另一方面将队列消息也于Redis中进行缓存处理,同时再将当前的消息传入至当前Broker中注册的消息消费端,最后将发送的消息推送至sub端,再由client将数据内容作为Application中的参数内容引入至程序的实际调用返回处。
本发明的有益效果为:
1)高并发处理(时效性)
当前队列系统可以对于高并发的访问时,其吞吐量能够达到较高的万级平稳值,同时对于接入模块的响应时间达到毫秒级;对于负载更高的应用而言,系统可以支持分布式的横向护展,能够对于实现系统整体方案的平滑升级。
2)高可用处理(稳定性)
本文研究及设计的队列中间件在中间服务架构及消息数据存储方面均是基于分布式的模式进行设计的,由于基于分布式的架构对程序应用进行构建,所以当其中的某一个服务节点发生停机或其他中断性事故时,整个系统对外部用户的请求响应均是无影响的,用户请求的数据能够设备集群中进行共享处理,整套系统各节点之间均相对强壮的,服务节点的加入、去除对于前端服务的响应均是无感知的。
附图说明
图1是消息队列业务流图;
图2是本系统client-server模块间数据处理图;
图3是本系统内部数据处理图;
图4是本系统高可用横向扩展图。
具体实施方式
为了使本发明的内容更容易被清楚地理解,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
在图1中,Application中通过调用Client提供出来的接口实现消息的发送及监听等操作,当消息通过Client传送时,采用基于Thrift等格式的压缩序列化方式将传输报文进一步压缩封装,然后基于MessageQueue提供的的发送、监听等机制将数据与MessageQueue之间进行交互,所有的消息内容基于Broker Channel注册的通道进行相应的发送、接收处理,Channel Handler基于传入的消息及Channel内容,一方面将连接信息与RedisSentinel中进行注册,另一方面将队列消息也于Redis中进行缓存处理,同时再将当前的消息传入至当前Broker中注册的消息消费端,最后将发送的消息推送至sub端,再由client将数据内容作为Application中的参数内容引入至程序的实际调用返回处。
按以往Netty框架实现消息队列的模式,由于本身Netty基于事件分离的控制方式,基本上均是通过单机接入前端所有用户的连接(1G内存基本可以支持10万接入需求,但该接入是短连接操作,而并长时间的类似会话保持体系),后台的数据持久层通过传统关系型数据库进行处理,以此形成一套数据队列的消息模式。
如图2所示,本系统按照分布式的理念进行架构设计,对于服务节点也基于该思路进行实现,本文研究的方案,基于Netty分别实现了Server端及Client端,Server端作为队列接入端,主要负责所有消息的接入,以及对其他订阅者的消息分发;而Client端主要负责业务模块与队列服务之间的数据传输及实际业务模块的数据交互,起一个承上启下的中继作用。
对于不同的应用程序A、B、C而言,本队列服务中均提供相同的client端依赖供应用的接入调用,其中包含消息的发送处理,以及消息的消费处理。对于消息的消费处理,通过配置文件配置相对应client对应的topic即可完成消息对象client声明及实例化,而后通过标准化的接口,即可实现消息往Server集群中发送的方式;对于消息的消费处理,用户的应用程序只需实现client中对庆的ActionListener接口,通过复写接口类中的onMessage方法,即可实现从消息队中列中获取当前的消息内容,订阅topic之后,队列服务基于消息模型的不一样,分别基于点对点或者订阅/发布的模式往不同的consumer下推送消息内容,consumer接收到消息内容之后,即可完成相应不同的业务逻辑操作。
由于client会直接与应用关联,可以在每一个应用中都附带client对象,因此从这个角度而言,若采用发布式部署的方式部署Application的话,那么相对应的client也将是多份的,同时client与Application应用属于同一个生命周期,因此在此处理方式上面,client不再需要单独实现其高可用性。
对于Netty Server而言,其主要用于接收客户端提交的数据请求信息(队列服务消息发送、队列服务消息监听等),其作为数据交换核心,其可用性对于整个系统而言是至关重要的。本文通过连接中断,重建连接,连接数据重写的方式实现server端的分布式部署,同时摒弃client与server之间单对单连接的特点,具体操作如图3所示:
由于发布消息是一个短暂的行为,因此其对于与Server间的连接依赖性并不是非常高,因此不作为当前Server多节点切换的重点。
对于subscribe的实例而言,面对Server节点中断之后,其相应的操作步骤分为以下几步:
1)Client往Server端发送一个注册的Regist消息,表示其想与Server之间建立相对应的连接信任,执行:
client.sendevent(‘regist’)
Server端接收到Client的请求之后,系统会将client连接中附带的属性信息一并存入redis数据集群中,为后期的切换提供数据支撑。
Properties prop=ctx.getProperties();
redis.hset(‘clientid’,prop)
return clientid
当前的Server节点在遇到特定的情况之后,发生了中断事件
close connection between client and server.
disconnect from server.
Client感知到当前Server的中断异常之后(会触发相发相应的except事件异常),会再次重新创建与服务器端其余服务节点连接,当Server端发生连接中断时,client基于事件感知机制,会触发exception相应的回调方法:
public void exception(Context ctx){
Client.sendevent(‘regist’,’ctxid’)
}
Server集群中的任意一点感知到client端的请求之后,即会从Redis寻找是否之前有相应的事件数据等,同时会将当前该数据复写至当前的context连接对象上面。
Properties prop=redis.hget(‘clientid’);
Context.setValue(‘key’,’value’);
新的Netty节点会代替之前的老的数据节点,完成与client之间的数据交互,从而实现后期client节点数据监听的处理机制。
create new connection between client and new server node。
系统基于状态的无关性,通过多节点的方式部署多套Netty Server的方式,实现对于接入请求在连接方面的高度重用性,通过中间Client方式的引入,屏蔽应用程序直接与Server消息服务器直接连接带来的复杂性问题;后端Netty Server的变动对于Application应用来说,完全是一个透明的模式,因此通过该方式的引入,从Application的角度来说,其对应的消息中间件是一个高可用服务体系,后端节点的丢失处理,对于前端来说完全非可见。
在实际的业务部署场景中,对于Netty Server的部署会也会采用多节点分布式的处理方式对服务进行部署,同时会对当前Java进程进行监控处理,一旦发现当前Java进程中断之后,系统即可自动重启该应用;对于整套服务器中断之后,监控体系中会监测到当前服务中断,便于通知相应的运维人员进行服务应用的重启处理等。
对于Netty的接入逻辑,由于其基于事件分离的异步控制体系,单台应用节点可以接纳的并发数可以达到一个相对较高的水平,后者再通过连接数据共享的方式定义不同的Topic主题监听,从而可以实现多节点不同方式的数据共享处理,通过该方式可以在接入层方面作再进一步容易扩充,以此可完成接入容量的横向复制扩展,如图4所示。
基于分布式的应用部署方式实现消息队列的高可用,应对大并发请求接入,系统能够平稳接入,并保证请求接入的稳定性。
研究比较现有的传输协议,通过数据实验的方式对比出在压缩比、传输容量、稳定性等方面各传输协议的优缺点,本文研究的消息队列可以适配当前所对比的协议类型。
研究实现系统的自恢复功能,当数据节点及应用节点异常中断之后,其余冗余的节点如何继续提供服务并自启恢复模式重新加载中断节点或通过现有机制发出中断通知指令。
本文研究的系统一方面在性能方面保证了大容量客户端接入请求的快速响应,通过自研架构的处理大大提升了基于Netty体系的高接入性、高服务性;基于Redis对系统中产生的中间数据进行了存储处理,确保了当前应用对数据访问的时效必,基于Redis集群化部署方案,确保了当前系统完全基于去中心化的处理逻辑体系,在整个架构层面实现了服务化的高可用。
以上所述仅为本发明专利的较佳实施例而已,并不用以限制本发明专利,凡在本发明专利的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明专利的保护范围之内。
Claims (4)
1.高可用分布式队列,其特征在于:
包括Application、Server端、Client端,
基于Netty分别实现了Server端及Client端,通过多节点的方式部署多套NettyServer,
Server端作为队列接入端,主要负责所有消息的接入,以及对其他订阅者的消息分发;Netty Server,其主要用于接收客户端提交的数据请求信息(队列服务消息发送、队列服务消息监听等),其作为数据交换核心;
Client端主要负责业务模块与队列服务之间的数据传输及实际业务模块的数据交互,起一个承上启下的中继作用;
Application中通过调用Client提供出来的接口实现消息的发送及监听等操作;对于不同的应用程序A、B、C而言,本队列服务中均提供相同的client端依赖供应用的接入调用,其中包含消息的发送处理,以及消息的消费处理;
Client端感知到当前Server端的中断异常之后(会触发相发相应的except事件异常),会再次重新创建与服务器端其余服务节点连接,当Server端发生连接中断时,client端基于事件感知机制,会触发exception相应的回调方法;
Netty Server队列服务集群中的任意一点感知到client端的请求之后,即会从Redis寻找是否之前有相应的事件数据等,同时会将当前该数据复写至当前的context连接对象上面;
新的Netty节点会代替之前的老的数据节点,完成与client端之间的数据交互,从而实现后期client节点数据监听的处理机制。
2.根据权利要求1所述的高可用分布式队列,其特征在于:client端会直接与Application应用关联,可以在每一个应用中都附带client对象。
3.根据权利要求1所述的高可用分布式队列,其特征在于:对于消息的消费处理,通过配置文件配置相对应client对应的topic即可完成消息对象client声明及实例化,而后通过标准化的接口,即可实现消息往Server集群中发送的方式;对于消息的消费处理,用户的应用程序只需实现client中对庆的ActionListener接口,通过复写接口类中的onMessage方法,即可实现从消息队中列中获取当前的消息内容,订阅topic之后,队列服务基于消息模型的不一样,分别基于点对点或者订阅/发布的模式往不同的consumer下推送消息内容,consumer接收到消息内容之后,即可完成相应不同的业务逻辑操作。
4.根据权利要求1所述的高可用分布式队列,其特征在于:Application中通过调用Client提供出来的接口实现消息的发送及监听等操作,当消息通过Client传送时,采用基于Thrift等格式的压缩序列化方式将传输报文进一步压缩封装,然后基于MessageQueue提供的的发送、监听等机制将数据与Message Queue之间进行交互,所有的消息内容基于Broker Channel注册的通道进行相应的发送、接收处理,Channel Handler基于传入的消息及Channel内容,一方面将连接信息与Redis Sentinel中进行注册,另一方面将队列消息也于Redis中进行缓存处理,同时再将当前的消息传入至当前Broker中注册的消息消费端,最后将发送的消息推送至sub端,再由client将数据内容作为Application中的参数内容引入至程序的实际调用返回处。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010253503.5A CN111309501A (zh) | 2020-04-02 | 2020-04-02 | 高可用分布式队列 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010253503.5A CN111309501A (zh) | 2020-04-02 | 2020-04-02 | 高可用分布式队列 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111309501A true CN111309501A (zh) | 2020-06-19 |
Family
ID=71146156
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010253503.5A Withdrawn CN111309501A (zh) | 2020-04-02 | 2020-04-02 | 高可用分布式队列 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111309501A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113114725A (zh) * | 2021-03-19 | 2021-07-13 | 中新网络信息安全股份有限公司 | 一种基于http协议多节点数据交互系统及其实现方法 |
CN113194000A (zh) * | 2021-04-30 | 2021-07-30 | 上海金融期货信息技术有限公司 | 一种业务无关的分布式系统 |
CN113438281A (zh) * | 2021-06-05 | 2021-09-24 | 济南浪潮数据技术有限公司 | 一种分布式消息队列的存储方法、装置、设备及可读介质 |
-
2020
- 2020-04-02 CN CN202010253503.5A patent/CN111309501A/zh not_active Withdrawn
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113114725A (zh) * | 2021-03-19 | 2021-07-13 | 中新网络信息安全股份有限公司 | 一种基于http协议多节点数据交互系统及其实现方法 |
CN113194000A (zh) * | 2021-04-30 | 2021-07-30 | 上海金融期货信息技术有限公司 | 一种业务无关的分布式系统 |
CN113194000B (zh) * | 2021-04-30 | 2022-11-01 | 上海金融期货信息技术有限公司 | 一种业务无关的分布式系统 |
CN113438281A (zh) * | 2021-06-05 | 2021-09-24 | 济南浪潮数据技术有限公司 | 一种分布式消息队列的存储方法、装置、设备及可读介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6470398B1 (en) | Method and apparatus for supporting a select () system call and interprocess communication in a fault-tolerant, scalable distributed computer environment | |
CN111309501A (zh) | 高可用分布式队列 | |
WO2020147466A1 (zh) | 调用服务器的方法和代理服务器 | |
US7970823B2 (en) | System for sharing data objects among applications | |
US9032011B2 (en) | Management of data object sharing among applications | |
US20040068479A1 (en) | Exploiting asynchronous access to database operations | |
US20140280988A1 (en) | System and method for parallel multiplexing between servers in a cluster | |
US11095742B2 (en) | Query proxy for delivery of dynamic system state | |
US20030225932A1 (en) | Locally providing globally consistent information to communications layers | |
CN112804289B (zh) | 一种资源同步方法、装置、设备及存储介质 | |
CN112615666A (zh) | 基于RabbitMQ和HAProxy的微服务高可用性部署方法 | |
CN111064626B (zh) | 配置更新方法、装置、服务器及可读存储介质 | |
CN112099977A (zh) | 一种分布式跟踪系统的实时数据分析引擎 | |
CN109639773A (zh) | 一种动态构建的分布式数据集群控制系统及其方法 | |
CN113660350A (zh) | 分布式锁协调方法、装置、设备及存储介质 | |
CN110719311A (zh) | 分布式协调服务方法、系统及计算机可读存储介质 | |
CN111858190B (zh) | 提高集群可用性的方法及其系统 | |
CN112256246A (zh) | 一种用于电力系统中支持跨语言调用的微服务集成架构 | |
US20090055511A1 (en) | Non-programmatic access to data and to data transfer functions | |
CN115878301A (zh) | 一种数据库网络负载性能的加速框架、加速方法及设备 | |
CN116016667A (zh) | 一种云原生平台多种类型注册中心统一治理方法和系统 | |
US7624144B1 (en) | System and method for reducing data traffic associated with a messaging service in a clustered server environment | |
CN112511595B (zh) | 一种消息推送方法及消息服务系统 | |
Carvalho et al. | Towards a generic group communication service | |
US20020087693A1 (en) | Method and system for distributing service functionality |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20200619 |