一、kafka 配置文件
<?php
// 测试topic
$common = [
"Appid" => env('WG_APPID', '111'), //appid 网关
"Appkey" => env('WG_APPKEY', 'test'), //appkey 网关
"Proxy" => env('KAFKA_PROXY', '10.13.1.1:8088'), //网关地址
"Broker" => env('KAFKA_BROKER', '10.13.1.2:9091,10.13.1.3:9091,10.13.1.4:9091'), //broker
"Timeout" => env('KAFKA_TIMEOUT', 3), //拉取数据超时时间
"Reset" => env('KAFKA_RESET', 'earliest'), //失败自动拉取最早的
"CommitTimeout" => env('KAFKA_COMMIT_TIMEOUT', 1000),//提交超时时间
"ConsumerTimeout" => env('KAFKA_CONSUMER_TIMEOUT', 1000),//拉消息时间
"MaxConsumeTimes" => env('KAFKA_MAX_CONSUMER_TIMES', 2), //最大重试消费次数
"CommitMode" => \TestMq\Mq\Consumer::COMMIT_MODE_OFFSET,
"AutoCommit" => env('KAFKA_AUTO_COMMIT', 1000),
];
// 回调通知1
$test_notify_1 = $common;
$test_notify_1['Queue'] = 'test_notify_1';
$test_notify_1['Group'] = 'test_notify_1_consumer_group_0';
// 回调通知2
$test_notify_2 = $common;
$test_notify_2['Queue'] = 'test_notify_2';
$test_notify_2['Group'] = 'test_notify_2_consumer_group_0';
return [
"test_notify_1_producer" => $test_notify_1,
"test_notify_1_consumer" => $test_notify_1,
"test_notify_2_producer" => $test_notify_2,
"test_notify_2_consumer" => $test_notify_2,
];
二、MQ监控平台,创建topic
- 创建主题,填写topic名称,默认参数即可
- 展示如下
三、数据写入生产者
$result = KafkaProducer::push('test_notify_1_producer', $data);
$result = KafkaProducer::push('test_notify_2_producer', $data);
四、消费者处理数据
<?php
/**
* 回调通知1消费逻辑
*/
namespace App\Exec\Consumer\TestNotify;
use App\Exec\Consumer\KafkaConsumer;
try {
require_once(dirname(dirname(dirname(__DIR__))) . '/../init.php');
} catch (\Exception $e) {
echo $e;
}
class TestNotify1 extends KafkaConsumer
{
public function __construct()
{
parent::__construct('test_notify_1_consumer');
}
public function handle($msg)
{
$this->dealFunc($msg);
return true;
}
}
$obj = new TestNotify1();
$obj->start();
五、启动kafka消费进程
1)编辑supervisor配置文件
vim /etc/supervisor/test-consumer.ini
# 回调1
[program:test_notify_1_consumer]
command=/usr/local/php7/bin/php /test/TestNotify1.php
process_name=%(process_num)02d
numprocs=1
priority=1000
autostart=true
startsecs=1
startretries=3
autorestart=true
stopasgroup=true
killasgroup=true
stopsignal=QUIT
stdout_logfile=/var/log/supervisor/test_notify_1_consumer_std.log
stderr_logfile=/var/log/supervisor/test_notify_1_consumer_err.log
# 回调2
[program:test_notify_2_consumer]
command=/usr/local/php7/bin/php /test/TestNotify2.php
process_name=%(process_num)02d
numprocs=1
priority=1000
autostart=true
startsecs=1
startretries=3
autorestart=true
stopasgroup=true
killasgroup=true
stopsignal=QUIT
stdout_logfile=/var/log/supervisor/test_notify_2_consumer_std.log
stderr_logfile=/var/log/supervisor/test_notify_2_consumer_err.log
2)启动supervisor进程
supervisorctl update // 修改配置后,更新启动的进程
3)查看supervisor 进程
supervisorctl status |grep test_notify
显示相应进程即可
MQ监控平台,消费者组列表也能看到对应进程