Laravel AMQP 项目教程
1、项目的目录结构及介绍
Laravel AMQP 项目的目录结构如下:
bschmitt/laravel-amqp/
├── config/
│ └── amqp.php
├── src/
│ ├── Amqp/
│ │ ├── Connectors/
│ │ ├── Contracts/
│ │ ├── Exceptions/
│ │ ├── Facades/
│ │ ├── Producers/
│ │ ├── Consumers/
│ │ ├── AmqpServiceProvider.php
│ │ └── AmqpManager.php
│ └── LaravelAmqpServiceProvider.php
├── tests/
│ ├── Integration/
│ └── Unit/
├── .gitignore
├── LICENSE
├── composer.json
├── phpunit.xml
└── README.md
目录结构介绍
config/
:包含项目的配置文件amqp.php
。src/
:项目的核心代码目录。Amqp/
:AMQP 相关的主要功能实现。Connectors/
:连接器相关代码。Contracts/
:接口定义。Exceptions/
:异常处理。Facades/
:门面类。Producers/
:生产者相关代码。Consumers/
:消费者相关代码。AmqpServiceProvider.php
:服务提供者。AmqpManager.php
:AMQP 管理器。
LaravelAmqpServiceProvider.php
:Laravel 服务提供者。
tests/
:测试代码目录。Integration/
:集成测试。Unit/
:单元测试。
.gitignore
:Git 忽略文件配置。LICENSE
:项目许可证。composer.json
:Composer 依赖管理文件。phpunit.xml
:PHPUnit 配置文件。README.md
:项目说明文档。
2、项目的启动文件介绍
项目的启动文件主要是 src/LaravelAmqpServiceProvider.php
和 src/Amqp/AmqpServiceProvider.php
。
LaravelAmqpServiceProvider.php
这个文件是 Laravel 服务提供者,负责注册和启动 AMQP 服务。
namespace Bschmitt\Amqp;
use Illuminate\Support\ServiceProvider;
class LaravelAmqpServiceProvider extends ServiceProvider
{
public function boot()
{
$this->publishes([
__DIR__.'/config/amqp.php' => config_path('amqp.php'),
]);
}
public function register()
{
$this->mergeConfigFrom(
__DIR__.'/config/amqp.php', 'amqp'
);
$this->app->singleton('amqp', function ($app) {
return new AmqpManager($app['config']['amqp']);
});
}
}
AmqpServiceProvider.php
这个文件是 AMQP 服务提供者,负责注册和启动 AMQP 管理器。
namespace Bschmitt\Amqp;
use Illuminate\Support\ServiceProvider;
class AmqpServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('amqp', function ($app) {
return new AmqpManager($app['config']['amqp']);
});
}
}
3、项目的配置文件介绍
项目的配置文件位于 config/amqp.php
。
配置文件内容
return [
'use' => 'production',
'properties' => [
'production' => [
'host' => 'localhost',
'port' => 5672,
'username' => 'username',
'password' => 'password',
'vhost' => '/',
'exchange' => 'amq.topic',
'exchange_type' => 'topic',
'consumer_tag' => 'consumer',
'ssl_options' => [], // 参考 https://secure.php.net/manual/en/context.ssl.php
'connect_options' => [], // 参考 https://github.com/php-amqplib/php-amqpl