basis-company/nats
PHP NATS client with support for TLS and JWT auth, pub/sub and request/reply patterns, plus JetStream APIs (microservices, key-value storage). Configurable reconnect and retry delays. Install via Composer and connect with simple configuration.
Illuminate\Queue) but offer higher throughput and advanced features (e.g., message retention, batching, ephemeral consumers).database, redis) is simpler, this package enables JetStream-specific features (e.g., work queues, stream configurations, microservices routing) not natively supported in Laravel.app['nats']).NatsQueue).user.created).Event::dispatch(new UserCreated(...))).$client->getApi()->getStream('jobs')->getConsumer('worker')->handle(function ($job) {
dispatch(new ProcessJob($job->payload));
});
v1.users.*) to Laravel API endpoints or external services.| Risk Area | Mitigation Strategy |
|---|---|
| Connection Management | Use Laravel’s container binding to manage NATS client lifecycle (singleton). |
| Error Handling | Implement retry logic (exponential backoff) for failed publishes/acks. |
| Schema Mismatches | Validate NATS payloads against Laravel’s Form Requests or DTOs. |
| Performance Bottlenecks | Benchmark against Laravel’s default queues; optimize batching (e.g., fetchAll). |
| Security | Enforce TLS/JWT in NATS config; restrict Laravel routes to NATS-authenticated clients. |
| State Management | Use NATS key-value storage for shared state (e.g., cache, config) instead of Redis. |
php-nats (if using raw NATS).| Phase | Action | Tools/Libraries |
|---|---|---|
| Evaluation | Benchmark NATS vs. Laravel’s default queues (e.g., Redis). | phpbench, k6 |
| Pilot | Replace a non-critical queue (e.g., notifications) with NATS. | Laravel Service Provider, NATS PHP SDK |
| Core Integration | Extend Laravel’s queue system with NATS drivers (e.g., NatsQueue). |
Laravel Queue Workers, NATS Consumers |
| Event System | Replace bus or events with NATS subjects (e.g., user.created → NATS publish). |
Laravel Events, NATS Pub/Sub |
| Microservices | Route API requests via NATS (e.g., v1.users.*) to Laravel or external services. |
NATS Microservices API |
| Key-Value Store | Migrate Redis cache/config to NATS JetStream buckets. | NATS Key-Value API |
Illuminate\Queue\Queue with a NATS driver wrapping Basis\Nats\Client.$client = app('nats');
$client->getApi()->getStream('laravel-jobs')->getConsumer('worker')->handle(function ($job) {
dispatch(new ProcessJob($job->payload));
});
event(new UserCreated($user));
// In listener:
$client->publish('user.created', json_encode($user));
$client->subscribe('user.created', function ($message) {
Event::dispatch(new NatsUserCreated(json_decode($message->payload, true)));
});
$service = $client->service('LaravelAPI', 'Handles HTTP requests via NATS');
$v1 = $service->addGroup('v1');
$v1->addEndpoint('users', function ($payload) {
return response()->json(User::all());
});
basis-company/nats to composer.json.AppServiceProvider:
public function register()
{
$this->app->singleton('nats', function () {
return new Client(new Configuration(host: 'nats-service'));
});
}
RedisQueue with NatsQueue for non-critical jobs.App\Jobs to use NATS consumers.user.created).v1.*).nats-top, nats-sub).php artisan nats:stream:list).How can I help you explore Laravel packages today?