# 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 附录