## 官方文档:
https://www.workerman.net/plugin/13
Stomp封装的Message Queue中间件
# 原理:
## 循环投递数据,然后投递完毕可以关闭浏览器---->然后让消费端去完成数据然后存入redis或者mysql里。
## 真正 实现了程序异步设计的思想
## 投递端
```
<?php
namespace app\controller;
use support\Request;
use Webman\Stomp\Client;
class Index
{
public function queue(Request $request)
{
// 队列
$queue = 'examples';
// 数据(传递数组时需要自行序列化,比如使用json_encode,serialize等)
$data = json_encode(['to' => 'tom@gmail.com', 'content' => 'hello']);
// 执行投递
Client::send($queue, $data);
return response('redis queue test');
}
}
```
## 消费消息端
```
<?php
namespace app\queue\stomp;
use Workerman\Stomp\AckResolver;
use Webman\Stomp\Consumer;
class MyMailSend implements Consumer
{
// 队列名
public $queue = 'examples';
// 连接名,对应 stomp.php 里的连接`
public $connection = 'default';
// 值为 client 时需要调用$ack_resolver->ack()告诉服务端已经成功消费
// 值为 auto 时无需调用$ack_resolver->ack()
public $ack = 'auto';
// 消费
public function consume($data, AckResolver $ack_resolver = null)
{
// 如果是数据是数组,需要自行反序列化
var_export(json_decode($data, true)); // 输出 ['to' => 'tom@gmail.com', 'content' => 'hello']
// 告诉服务端,已经成功消费
$ack_resolver->ack(); // ack为 auto时可以省略此调用
}
}
```
# 配置:
![](https://img.kancloud.cn/e7/fc/e7fcd4dc74eea025e0a6cb70c91d54c1_1008x853.png)
```
<?php
return [
'default' => [
'host' => 'stomp://127.0.0.1:61613',
'options' => [
'vhost' => '/',
'login' => 'guest',
'passcode' => 'guest',
'debug' => false,
],
'amqp' => [
'host' => '127.0.0.1',
'port' => 5672,
'namespace' => '',
'exchange_name' => 'exchange',
'exchange_delay' => true
]
]
];
```
- WebSocket协议
- 构造函数(6种协议)
- count(进程设置)
- name(链接名称)
- $daemonize(守护进程设置)
- logFile(日志路径)
- stdoutFile(守护进程记录文件)
- connections(获取链接数组的)
- worker的回调属性
- worker类的方法
- Connection类的方法
- getRemotePort获取端口方法
- getRemoteIp获取IP地址
- close 安全关闭连接
- 定时器
- Channel分布式通信组件
- 心跳检测程序
- liunx优化配置
- thinkphp5.1使用worerman
- thinkphp5.1中用Channel实现广播通信
- thinkphp5.1中使用定时器
- thinkphp5.1使用TcpConnection类
- Gateway类使用
- BusinessWorker使用
- Register类的使用
- Events类使用(业务逻辑层)
- Lib\Gateway 接口(经常用)
- webman中间件stomp
- Gateway在thinkphp5.1里使用