PHPackages                             websocketh/webman-rabbitmq - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Queues &amp; Workers](/categories/queues)
4. /
5. websocketh/webman-rabbitmq

ActiveLibrary[Queues &amp; Workers](/categories/queues)

websocketh/webman-rabbitmq
==========================

Webman plugin workbunny/webman-rabbitmq

v2.0.3(10mo ago)021[1 PRs](https://github.com/websocketh/webman-rabbitmq/pulls)MITPHPPHP ^8.0

Since Jul 4Pushed 10mo agoCompare

[ Source](https://github.com/websocketh/webman-rabbitmq)[ Packagist](https://packagist.org/packages/websocketh/webman-rabbitmq)[ RSS](/packages/websocketh-webman-rabbitmq/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (4)Dependencies (6)Versions (6)Used By (0)

[![workbunny](https://camo.githubusercontent.com/e2b1164338390ab45783434659e3e419e0c3b50fbe140c697ba1f82f59015ad6/68747470733a2f2f6368617a366368657a2e636e2f696d616765732f776f726b62756e6e792d6c6f676f2e706e67)](https://camo.githubusercontent.com/e2b1164338390ab45783434659e3e419e0c3b50fbe140c697ba1f82f59015ad6/68747470733a2f2f6368617a366368657a2e636e2f696d616765732f776f726b62756e6e792d6c6f676f2e706e67)

**workbunny/webman-rabbitmq**

**🐇 A PHP implementation of RabbitMQ Client for webman plugin. 🐇**

A PHP implementation of RabbitMQ Client for webman plugin
=========================================================

[](#a-php-implementation-of-rabbitmq-client-for-webman-plugin)

[![Latest Stable Version](https://camo.githubusercontent.com/f4854fa75b446e7510acfc3580b08223ca57f6f559de6464b0a9c0a9c98da6f3/68747470733a2f2f62616467656e2e6e65742f7061636b61676973742f762f776f726b62756e6e792f7765626d616e2d7261626269746d712f6c6174657374)](https://packagist.org/packages/workbunny/webman-rabbitmq) [![Total Downloads](https://camo.githubusercontent.com/c4296ccf8f9357e56d8a87518abe07188e396ddbc39c0520ada490fe6e46fcee/68747470733a2f2f62616467656e2e6e65742f7061636b61676973742f64742f776f726b62756e6e792f7765626d616e2d7261626269746d71)](https://packagist.org/packages/workbunny/webman-rabbitmq) [![License](https://camo.githubusercontent.com/fa83f9f0ee676d922e7936a74af1475efb53da50431ae7af67544ccaa4303ee8/68747470733a2f2f62616467656e2e6e65742f7061636b61676973742f6c6963656e73652f776f726b62756e6e792f7765626d616e2d7261626269746d71)](https://packagist.org/packages/workbunny/webman-rabbitmq) [![PHP Version Require](https://camo.githubusercontent.com/966d5353840bb41d69e1f6fbf68644841b727e564d2de9c5adfc1626952933f4/68747470733a2f2f62616467656e2e6e65742f7061636b61676973742f7068702f776f726b62756e6e792f7765626d616e2d7261626269746d71)](https://packagist.org/packages/workbunny/webman-rabbitmq)

常见问题
----

[](#常见问题)

1. 什么时候使用消息队列？

    **当你需要对系统进行解耦、削峰、异步的时候；如发送短信验证码、秒杀活动、资产的异步分账清算等。**
2. RabbitMQ和Redis的区别？

    **Redis中的Stream的特性同样适用于消息队列，并且也包含了比较完善的ACK机制，但在一些点上与RabbitMQ存在不同：**

    - **Redis Stream没有完善的后台管理；RabbitMQ拥有较为完善的后台管理及Api；**
    - **Redis的持久化策略取舍：默认的RDB策略极端情况下存在丢失数据，AOF策略则需要牺牲一些性能；RabbitMQ持久化方案更多，可对消息持久化也可对队列持久化；**
    - **RabbitMQ拥有更多的插件可以提供更完善的协议支持及功能支持；**
3. 什么时候使用Redis？什么时候使用RabbitMQ？

    **当你的队列使用比较单一或者比较轻量的时候，请选用 Redis Stream；当你需要一个比较完整的消息队列体系，包括需要利用交换机来绑定不同队列做一些比较复杂的消息任务的时候，请选择RabbitMQ；**

    **当然，如果你的队列使用也比较单一，但你需要用到一些管理后台相关系统化的功能的时候，又不想花费太多时间去开发的时候，也可以使用RabbitMQ；因为RabbitMQ提供了一整套后台管理的体系及 HTTP API 供开发者兼容到自己的管理后台中，不需要再消耗多余的时间去开发功能；**

    注：这里的 **轻量** 指的是 **无须将应用中的队列服务独立化，该队列服务是该应用独享的**

### 说明

[](#说明)

- 此文档为2.0，[1.0文档](https://github.com/workbunny/webman-rabbitmq/blob/1.x/README.md)
- 1.0已停止维护

简介
--

[](#简介)

RabbitMQ的webman客户端插件；

1. 支持5种消费模式：简单队列、workQueue、routing、pub/sub、exchange；
2. 支持延迟队列（rabbitMQ须安装插件）；
3. 异步无阻塞消费、异步无阻塞生产、同步阻塞生产；

### 概念

[](#概念)

#### 1. Builder

[](#1-builder)

- Builder为队列的抽象结构，每个Builder都包含一个BuilderConfig配置结构对象
- 当前进程的所有Builder公用一个对象池，对象池可用于减少连接的创建和销毁，提升性能
- 当前进程的所有Builder公用一个Connection连接对象池：
    - 当reuse\_connection=false时，Builder之间使用各自的Connection连接对象
    - 当reuse\_connection=true时，不同Builder复用同一个Connection连接对象

#### 2. Connection

[](#2-connection)

- Connection是抽象的连接对象，每个Connection会创建两个TCP连接：
    - `getAsyncClient()`获取AsyncClient 异步客户端连接
    - `getSyncClient()`获取SyncClient 同步客户端连接
- 一个Connection对象在RabbitMQ-server中等于两个连接
- 所有Builder的Connection连接对象在Builder的Connection池中进行统一管理
- 当reuse\_connection=true时，Connection对象在池中的key为空字符串

#### 3. Channel

[](#3-channel)

- Channel是基于RabbitMQ-server的连接对象的子连接
- Channel的上限默认根据RabbitMQ-server的channel limit配置
- Channel的生命周期与Connection一致，在Connection存续期间，Channel不会被销毁
- Channel池可以启用/关闭复用模式中：
    - 当reuse\_channel=true时，连接会使用Channel池中闲置通道进行发送，如当前不存在闲置通道，则创建新的通道；
    - 当reuse\_channel=false时，连接每次都会创建新的通道，建议在生产完成后调用连接关闭
- AsyncClient和SyncClient互相不共用TCP连接，所以Channel池也不公用
- 可以通过`getChannels`方法获取Channel对象池，自行管理释放

使用
--

[](#使用)

### 要求

[](#要求)

- php &gt;= 8.0
- webman-framework &gt;= 1.5
- rabbitmq-server &gt;= 3.10

### 安装

[](#安装)

```
composer require workbunny/webman-rabbitmq

```

### 配置

[](#配置)

#### app.php

[](#appphp)

```
