# 5.11 雜項
## 消息隊列
當前消息隊列支持Redis、RabbitMQ、Kafka,使用方法也很簡單,一般只需要關心set和get方法即可。
### Redis作為消息隊列
```php
//準備一個隊列
$redisQueue = $this->getObject(\PG\MSF\Queue\Redis::class, ['p1']);
// Enqueue入隊,默認隊列為default
$res = yield $redisQueue->set(string $data, string $queue = 'default');
// Dequeue出隊
$res = yield $redisQueue->get(string $queue = 'default');
```
### RabbitMQ消息隊列
```php
//首先需要配置自己的隊列
$config['amqp'] = [
'rabbit' => [
'host' => '127.0.0.1',
'port' => '5672'
]
];
//準備一個隊列,并配置路由key,默認為default
$rabbit = $this->getObject(PG\MSF\Queue\RabbitMQ::class,
['rabbit', $routing_key = 'default']);
// Enqueue入隊,默認隊列為default
$res = yield $rabbit->set(string $data, string $queue = 'default');
// Dequeue出隊,默認直接Ack,也可以手工Ack
$res = yield $rabbit->get(string $queue = 'default', $isAck = true);
```
### Kafka作為消息隊列
```php
//首先需要配置自己的隊列
$config['kafka'] = [
'local' => [
'socket.keepalive.enable' => true,
'bootstrap.servers' => '127.0.0.1:9092',
'group.id' => 'default'
]
];
//準備一個隊列
$kafka = $this->getObject(PG\MSF\Queue\Kafka::class, ['local']);
// Enqueue入隊,默認隊列為default
$res = yield $kafka->set(string $data, string $queue = 'default');
// Dequeue
$res = yield $kafka->get(string $queue = 'default');
```
## Shell Exec
在寫定時任務的時候,難免會使用到`shell_exec`這個php函數,但是這個函數是阻塞的,
所以我們提供了異步協程執行shell腳本的特性,使用方式也很簡單。
```php
//result為shell執行后屏幕的輸出,如果執行失敗,會返回false
$result = yield $this->getObject(\PG\MSF\Coroutine\Shell::class)->goExec('ps aux | grep msf');
```
- 0 文檔說明
- 1 為什么研發新框架
- 1.1 傳統php-fpm工作模式的問題
- 1.2 壓測數據對比
- 1.3 小結
- 2 微服務框架研發概覽
- 2.1 通信框架技術選型
- 2.2 swoole
- 2.3 協程原理
- 2.4 異步、并發
- 2.5 小結
- 3 框架運行環境
- 3.1 環境變量
- 3.2 運行代碼
- 3.3 docker
- 3.4 小結
- 4 框架結構
- 4.1 結構概述
- 4.2 控制器
- 4.3 模型
- 4.4 視圖
- 4.5 同步任務
- 4.6 配置
- 4.7 路由
- 4.8 小結
- 5 框架組件
- 5.1 協程
- 5.2 類的加載
- 5.3 異步Http Client
- 5.4 請求上下文
- 5.5 連接池
- 5.6 對象池
- 5.7 RPC
- 5.8 公共庫
- 5.9 RESTful
- 5.10 多語言
- 5.11 雜項
- 5.12 小結
- 6 常見問題
- 7 附錄