PHPackages                             maweibinguo/easyrabbitmq - 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. maweibinguo/easyrabbitmq

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

maweibinguo/easyrabbitmq
========================

对php-amqplib/php-amqplib包的二次封装，为常见功能提供一套开箱即用的生产解决方案

V1.0(5y ago)22431MITPHP

Since Apr 12Pushed 4y ago1 watchersCompare

[ Source](https://github.com/maweibinguo/easyrabbitmq)[ Packagist](https://packagist.org/packages/maweibinguo/easyrabbitmq)[ RSS](/packages/maweibinguo-easyrabbitmq/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (4)Versions (3)Used By (0)

[![Software License](https://camo.githubusercontent.com/d6bc2b26794002c24d023acaab01b6dbb953c57ab9cb80ba5b8aa2f2bd5de99a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c7565)](LICENSE)[![Package Version](https://camo.githubusercontent.com/f15abedef83fb6c2f52e0ebcb91d1bf5cf4260de760a84d4372011210d7bf86c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d56312e302d677265656e)](VERSION)

在项目中rabbitmq得到了广泛的时候，这里对rabbitmq的常规功能做了一个简单的总结，并封装成了composer包，[composer包地址](https://packagist.org/packages/maweibinguo/easyrabbitmq)、[github地址](https://github.com/maweibinguo/easyrabbitmq)，欢迎fork，由于水平有限，难免存在bug，欢迎提出宝贵意见

easy-rabbitmq 包简介
-----------------

[](#easy-rabbitmq-包简介)

对php-amqplib/php-amqplib包的二次封装，为常见功能提供一套开箱即用的生产解决方案 。目前支持的功能列表如下：

- 推送消息到直连交换机(含延迟消息)
- 推送消息到扇形交换机(含延迟消息)
- 推送消息到主题交换机(含延迟消息)
- 订阅模式下的可靠消费, 消费者消费失败后将会尝试继续消费，最多尝试5次。
- 拉取模式下的可靠消费, 消费者消费失败后将会尝试继续消费，最多尝试5次。

如果还有其它场景，欢迎继续补充，随后进行迭代！！

要求
--

[](#要求)

- 安装包对PHP版本对要求主要取决于php-amqplib/php-amqplib包本身对要求,这里为了兼顾php5.0的使用者,我们使用了php-amqplib/php-amqplib包V2.9.0的版本。 具体的要求参照[这里](https://packagist.org/packages/php-amqplib/php-amqplib#v2.9.0)。 不过笔者推荐使用php7.0及其以上版本, 这个开发包也是在7.0这个版本上面开发完成的！

安装
--

[](#安装)

```
	composer require maweibinguo/easyrabbitmq
```

使用
--

[](#使用)

在这里我们推荐php脚本+supervisor结合使用，用以保证消费进程的可靠性、增强worker的消费能力！ 如果你还没有听说过supervisor，可以[点击这里](http://www.supervisord.org/introduction.html)了解.

### 1、推送消息

[](#1推送消息)

#### 1-1、推送消息到直连交换机

[](#1-1推送消息到直连交换机)

```
	$config = [
	    "host" => "127.0.0.1",
            "port" => "5672",
            "user" => "guest",
            "password" => "guest",
            "vhost" => "/",
            "channel_max_num" => 10,
	];
	$instance = RabbitMq::getInstance($config);

	//延迟消息,30 秒中后才会到达指定的交换机
	$instance->pushToDirect(
				$msg = time(), //消息体内容
				$exchange = "easy_direct_exchange", //交换机名称
				$routingKey = "direct_test_queue", //消息的routingKey，consume(get) 方法到bingdingKey 要和routingKey保持一致
				$delaySec = 30 //延迟秒数
	);

	//无延迟，推入到指定到直链交换机
	$instance->pushToDirect(
				$msg = time(), //消息体内容
				$exchange = "easy_direct_exchange", //交换机名称
				$routingKey = "direct_test_queue", //消息的routingKey，consume(get) 方法到bingdingKey 要和routingKey保持一致
	);
```

#### 1-2、推送消息到扇形交换机

[](#1-2推送消息到扇形交换机)

```
	$config = [
	    "host" => "127.0.0.1",
            "port" => "5672",
            "user" => "guest",
            "password" => "guest",
            "vhost" => "/",
            "channel_max_num" => 10,
	];
	$instance = RabbitMq::getInstance($config);

	//延迟消息,30 秒中后才会到达指定的交换机
	$instance->pushToFanout(
				$msg = time(), //消息体内容
				$exchange = "easy_fanout_exchange", //交换机名称
				$delaySec = 30 //延迟秒数
	);

	//无延迟，推入到指定到直链交换机
	$instance->pushToFanout(
				$msg = time(), //消息体内容
				$exchange = "easy_fanout_exchange" //交换机名称
	);
```

#### 1-3、推送消息到主题交换机

[](#1-3推送消息到主题交换机)

```
	$config = [
	    "host" => "127.0.0.1",
            "port" => "5672",
            "user" => "guest",
            "password" => "guest",
            "vhost" => "/",
            "channel_max_num" => 10,
	];
	$instance = RabbitMq::getInstance($config);

	//延迟消息,30 秒中后才会到达指定的交换机
	$instance->pushToTopic(
				$msg = time(), //消息体内容
				$exchange = "easy_topic_exchange", //交换机名称
				/**
				 * routingKey 要同consum(get)方法的bindingKey相匹配
				 * bindingKey支持两种特殊的字符"*"、“#”，用作模糊匹配, 其中"*"用于匹配一个单词、“#”用于匹配多个单词(也可以是0个)
				 * 无论是bindingKey还是routingKey, 被"."分隔开的每一段独立的字符串就是一个单词, easy.topic.queue, 包含三个单词easy、topic、queue
				 */
				$routingKey = "easy.topic.queue",
				$delaySec = 30 //延迟秒数
	);

	//无延迟，推入到指定到直链交换机
	$instance->pushToTopic(
				$msg = time(), //消息体内容
				$exchange = "easy_topic_exchange", //交换机名称
				$routingKey = "easy.topic.queue"
	);
```

### 2、消费消息

[](#2消费消息)

消费支持自动重试，最多尝试重试5次，每次消费失败后该消息将会被重新投入到消费队列中。重新的时间将会随着失败的次数增多逐渐推移,本客户端支持的推移策略如下： 失败1次（1秒钟后会再被投递）, 失败2次（2秒钟后会再被投递）, 失败3次（4秒钟后会再被投递）, 失败4次（8秒钟后会再被投递）, 失败5次（16秒钟后会再被投递）

#### 2-1、订阅模式

[](#2-1订阅模式)

##### 订阅模式下的可靠消费

[](#订阅模式下的可靠消费)

```
	$config = [
	    "host" => "127.0.0.1",
            "port" => "5672",
            "user" => "guest",
            "password" => "guest",
            "vhost" => "/",
            "channel_max_num" => 10,
	];
	$instance = RabbitMq::getInstance($config);
	$instance->consume(
		$queueName = "direct_test_queue",//订阅的队列名称
		$consumerTag = "c1",//消费标记
		$exchange = "easy_direct_exchange",//交换机名称
		$bindingKey = "direct_test_queue",//bindingkey，如果是直链交换机需要同routingKey保持一致
		$callback = function($msg){
		    $body = $msg->body;
		    file_put_contents("./test.log", "time => " . time() . "\t" . " body => " . $body . PHP_EOL , FILE_APPEND);
		    //如果返回结果不绝对等于(===)true,那么将触发消息重试机制
		    return false;
		},
		//5次消费消费失败后，失败消息将会投递到的队列名称
		$failedQueue = "easymq@failed"
	);
```

#### 2-2、拉取模式

[](#2-2拉取模式)

##### 拉取模式下的可靠消费

[](#拉取模式下的可靠消费)

```
	$config = [
	    "host" => "127.0.0.1",
            "port" => "5672",
            "user" => "guest",
            "password" => "guest",
            "vhost" => "/",
            "channel_max_num" => 10,
	];
	$instance = RabbitMq::getInstance($config);
	$instance->get(
		$queue = "get_queue",
		$exchange = "easy_fanout_exchange",
		$bindingKey = "",
		$callback = function($msg){
		    $body = $msg->body;
		    file_put_contents("./test.log", "time => " . time() . "\t" . " body => " . $body . PHP_EOL , FILE_APPEND);
		    //如果返回结果不绝对等于(===)true,那么将触发消息重试机制
		    return false;
		},
		//5次消费消费失败后，失败消息将会投递到的队列名称
		$failedQueue = 'easymq@failed'
    	);
```

#### 3、意见反馈

[](#3意见反馈)

如果你对这个组件有什么建议或者想法，欢迎到[https://segmentfault.com/a/1190000039806384，提交评论进行反馈](https://segmentfault.com/a/1190000039806384%EF%BC%8C%E6%8F%90%E4%BA%A4%E8%AF%84%E8%AE%BA%E8%BF%9B%E8%A1%8C%E5%8F%8D%E9%A6%88)

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity15

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 63.2% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

1856d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/262939401f088206b93dd5638cbd81ec86303e5637d93a4d07eec7f20105cef4?d=identicon)[maweibinguo](/maintainers/maweibinguo)

---

Top Contributors

[![SurprisePhp](https://avatars.githubusercontent.com/u/59953612?v=4)](https://github.com/SurprisePhp "SurprisePhp (12 commits)")[![maweibinguo](https://avatars.githubusercontent.com/u/6221360?v=4)](https://github.com/maweibinguo "maweibinguo (7 commits)")

---

Tags

messagequeuerabbitmq

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/maweibinguo-easyrabbitmq/health.svg)

```
[![Health](https://phpackages.com/badges/maweibinguo-easyrabbitmq/health.svg)](https://phpackages.com/packages/maweibinguo-easyrabbitmq)
```

###  Alternatives

[php-amqplib/php-amqplib

Formerly videlalvaro/php-amqplib. This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.

4.6k125.3M879](/packages/php-amqplib-php-amqplib)[php-amqplib/rabbitmq-bundle

Integrates php-amqplib with Symfony &amp; RabbitMq. Formerly emag-tech-labs/rabbitmq-bundle, oldsound/rabbitmq-bundle.

1.3k20.1M65](/packages/php-amqplib-rabbitmq-bundle)[kdyby/rabbitmq

Integrates php-amqplib with RabbitMq and Nette Framework

30693.1k4](/packages/kdyby-rabbitmq)[convenia/pigeon

3233.0k](/packages/convenia-pigeon)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
