thefreshuk / pubsub-laravel
为 Laravel 应用提供 Pub/Sub 支持
Requires
- php: >=8.1
- aws/aws-php-sns-message-validator: 2.0.1
- aws/aws-sdk-php-laravel: ^3.1
- guzzlehttp/guzzle: ^7.0.1
- illuminate/collections: ^10.9
- illuminate/console: ^10.9
- illuminate/filesystem: ^10.9
- illuminate/routing: ^10.9
- illuminate/support: ^10.9
- symfony/console: ^6.2
Requires (Dev)
- mockery/mockery: ^1.2
- phpunit/phpunit: >=7.0
This package is not auto-updated.
Last update: 2024-09-21 11:31:09 UTC
README
此包通过基于内容的 Pub/Sub 模型将 Laravel 项目与发布/订阅提供者集成。
支持的提供者
- AWS SNS
安装
通过 composer
$ composer require thefreshuk/pubsub-laravel
配置
默认情况下,此包会查找以下环境变量
PUBSUB_PROVIDER=sns
PUBSUB_TOPIC=<insert topic name>
PUBSUB_ALLOW_HTTP=<true or false>
PUBSUB_SNS_HOST_PATTERN=<regex string e.g /yourdomain.com/>
您可以通过在项目中运行以下命令来覆盖此设置
php artisan vendor:publish
关于 PUBSUB_ALLOW_HTTP
,此配置将库配置为允许 HTTP 端点。目前,只有签名证书 URL 作为 SNS 消息验证的一部分进行检查。将此设置为 true
需要使用分叉包(AWS SNS 消息验证器默认情况下根本不允许 HTTP)。要设置此配置,请将以下内容添加到您的 composer.json
文件中
"repositories": [
{
"type": "vcs",
"url": "git@github.com:thefreshuk/aws-php-sns-message-validator.git"
}
]
然后运行
$ composer update
用法
订阅
有两种方式可以订阅一个主题
1. 扩展 SubscriptionServiceProvider
use TheFresh\PubSub\SubscriptionServiceProvider as ServiceProvider;
class MockSubscriptionServiceProvider extends ServiceProvider
{
public static $booted = false;
/**
* Like RouteServiceProvider, this namespace is applied to
* the routes generated by this service provider.
*
* @var string $namespace
*/
protected $namespace = 'App\Http\Controllers';
/**
* A mapping of message types to routes/controller actions that capture
* messages.
*
* @var string $subscribe
*/
protected $subscribe = [
'test_type1' => ['/subscriptions/test-type', 'MockController@onTestType']
];
public function boot()
{
parent::boot();
static::$booted = true;
}
}
这允许您指定 '类型' 到路由和控制器之间的映射。
类型是我们区分消息的方式。结合基于内容的筛选,这提供了一种感觉像多主题系统而没有在传统 SNS 中主题泛滥的系统。
2. 注入主题
Topic
类可以按照您希望的方式使用。通过提供 ClientInterface
对象和主题名称(字符串),您可以使用此库使用多个主题。
Laravel 将将默认的 Topic
注入到相关类型提示的构造函数中。由于库是为与基于内容的 Pub/Sub 系统一起使用而设计的,因此必须有一个 '默认' 主题,否则这将失败。
发布
Topic
类提供了一个接受消息的发布方法。对于给定的主题调用此方法就很简单。
$topic->publish($message);
消息
消息由发布者发送并由订阅者接收。每条消息都有一个 '类型' 和 '内容'
{
type: string,
content: {}
}
Pub/Sub 系统最好基于类型属性进行筛选。
使用 Messages
有两种方式
1. 分离的类
您可以使用以下命令生成消息类
$ artisan make:message ExampleMessage
这将在 <app_dir>/PubSub/Messages
中生成一个消息类。您可以实例化和发布这些消息。
2. DynamicMessage
您还可以使用 TheFresh\PubSub\Messages\DynamicMessage
类。它接受 $type
和 $content
构造函数参数。所有通过订阅接收到的消息都是 DynamicMessage
。