Skip to content

Commit 28dbc74

Browse files
committed
Filesystem transport
1 parent cd785d4 commit 28dbc74

File tree

3 files changed

+138
-2
lines changed

3 files changed

+138
-2
lines changed

.settings.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,15 @@
1111
],
1212
'services' => [
1313
'value' => [
14-
'Proklung\Redis\Samples\FooRedisProcessor' =>
15-
[
14+
'Proklung\Redis\Samples\FooRedisProcessor' => [
1615
'className' => \Proklung\Redis\Samples\FooRedisProcessor::class,
1716
'tags' => ['name' => 'enqueue.topic_subscriber', 'client' => 'default']
1817
],
18+
// Пример клиента на файловой системе
19+
'Proklung\Redis\Samples\FooFsProcessor' => [
20+
'className' => \Proklung\Redis\Samples\FooFsProcessor::class,
21+
'tags' => ['name' => 'enqueue.topic_subscriber', 'client' => 'filesystem']
22+
],
1923
],
2024
'readonly' => false,
2125
],

lib/Samples/FooFsProcessor.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace Proklung\Redis\Samples;
4+
5+
use Interop\Queue\Message;
6+
use Interop\Queue\Context;
7+
use Interop\Queue\Processor;
8+
use Enqueue\Client\TopicSubscriberInterface;
9+
10+
/**
11+
* Class FooRedisProcessor
12+
* @package Proklung\Redis\Samples
13+
*/
14+
class FooFsProcessor implements Processor, TopicSubscriberInterface
15+
{
16+
public function process(Message $message, Context $session)
17+
{
18+
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/fs-bitrix.log', $message->getBody());
19+
20+
return self::ACK;
21+
// return self::REJECT; // when the message is broken
22+
// return self::REQUEUE; // the message is fine but you want to postpone processing
23+
}
24+
25+
public static function getSubscribedTopics()
26+
{
27+
return ['bitrix-fs'];
28+
}
29+
}

readme.MD

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,109 @@ return [
189189
php bin/enqueue
190190
```
191191

192+
## Другие транспорты
193+
194+
### Файловая система
195+
196+
#### Настройка
197+
198+
`.settings.php` Битрикса:
199+
200+
```php
201+
// ... предыдущее
202+
203+
'proklung.redis' => [
204+
'value' => [
205+
'enqueue' => [
206+
// ... предыдущее
207+
'filesystem' => [
208+
// $_SERVER['DOCUMENT_ROOT'] - важно!
209+
'transport' => 'file:///' . $_SERVER['DOCUMENT_ROOT'] . '/bitrix/cache/s1/fs',
210+
'client' => [
211+
'default_queue' => 'default',
212+
'prefix' => 'fs',
213+
'app_name' => 'fedy',
214+
],
215+
],
216+
]
217+
]
218+
],
219+
```
220+
221+
#### Клиент
222+
223+
Класс:
224+
225+
```php
226+
use Interop\Queue\Message;
227+
use Interop\Queue\Context;
228+
use Interop\Queue\Processor;
229+
use Enqueue\Client\TopicSubscriberInterface;
230+
231+
class FooFsProcessor implements Processor, TopicSubscriberInterface
232+
{
233+
public function process(Message $message, Context $session)
234+
{
235+
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/fs-bitrix.log', $message->getBody());
236+
237+
return self::ACK;
238+
}
239+
240+
public static function getSubscribedTopics()
241+
{
242+
return ['bitrix-fs'];
243+
}
244+
}
245+
```
246+
247+
`.settings.php` модуля:
248+
249+
```php
250+
return [
251+
'services' => [
252+
'value' => [
253+
// ... предыдущие клиенты
254+
'Proklung\Redis\Samples\FooFsProcessor' => [
255+
'className' => \Proklung\Redis\Samples\FooFsProcessor::class,
256+
'tags' => ['name' => 'enqueue.topic_subscriber', 'client' => 'filesystem']
257+
],
258+
],
259+
'readonly' => false,
260+
],
261+
];
262+
```
263+
264+
#### Отправка сообщений
265+
266+
```php
267+
$services = new Proklung\Redis\DI\Services();
268+
$container = $services->boot();
269+
270+
$producerFs = $container->get('enqueue.client.filesystem.lazy_producer');
271+
$producerFs->sendEvent('bitrix-fs', 'FS');
272+
```
273+
274+
#### Получение сообщений
275+
276+
```bash
277+
php bin/enqueue enqueue:consume --client=filesystem
278+
```
279+
280+
Где `filesystem` - название клиента, определяемое в `.settings.php` Битрикса.
281+
282+
Или так:
283+
284+
```php
285+
/** @var Context $context */
286+
$context = $container->get('enqueue.transport.filesystem.context');
287+
288+
$fooQueue = $context->createQueue('fs.fedy.default'); // См. .settings.php, свойства клиента.
289+
$consumer = $context->createConsumer($fooQueue);
290+
$message = $consumer->receiveNoWait(); // Для примера, чтобы скрипт не зацикливался. В нормальной среде - $consumer->receive().
291+
292+
$consumer->acknowledge($message);
293+
```
294+
192295
## Credits
193296

194297
Данный модуль представляет собой адаптацию [пакета](https://github.com/php-enqueue/enqueue-bundle) для работы

0 commit comments

Comments
 (0)