PHP的WMB队列消费代理的实现

本文介绍了为解决PHP WMB消费者客户端的问题,引入的消费队列代理方案。代理通过拉取消息并分发到处理接口,提高了处理性能和系统稳定性。采用swoole的Channel进行内存队列,并支持消息导入导出,保证了代理重启时消息不丢失。通过水平扩展,代理在16台虚拟机上可处理的QPS可达204800,降低了开发和调试难度。
摘要由CSDN通过智能技术生成

一、问题描述

WMB消息总线是58内部提供的消息队列服务。消息队列主要解决了应用间的耦合、异步处理事件、流量削峰填谷等问题,是系统架构不可缺少的组件。

现有的消费者客户端,通过注册回调函数来处理消息,

    function callback ($msg) {var_dump($msg);}
    $keyPath = "./testkey.key?clientid=2";
    ESBclient_consumer_loop('callback', $keyPath, 123456);

这种使用方式存在一些问题,包括 
1)不方便开发调试,需要消息生产者和消费者同时参与。而且多数情况下,生产者和消费者在不同的业务部门,增大了调试成本。 
2)消费端依次处理拉取来的消息,性能不高。 
3)由于PHP语言本身的特性,对多线程支持不好,消费端不能开启多线程模式。为了加快处理,只能多开进程。但是由于wmb服务端限制,只能开64个消费端,假设处理每个消息需要100ms,QPS上限就是640左右。 
4)消费者客户端和消息处理代码耦合在一起,而且与业务集群要分开部署,浪费机器。

二、引入代理

计算机领域有句话:“计算机科学中的任何问题都可以通过增加一个中间层来解决”。为了解决上面的问题,引入了消费队列代理。代理通过消费客户端拉取消息,然后分发到真正处理消息的接口上,回调接口可以部署在本机,也可以在其他机器。设计图如下:

主进程启动后&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值