改名
This commit is contained in:
+44
-6
@@ -6,6 +6,8 @@ namespace Kafka;
|
|||||||
|
|
||||||
use Snowflake\Exception\ConfigException;
|
use Snowflake\Exception\ConfigException;
|
||||||
use Snowflake\Snowflake;
|
use Snowflake\Snowflake;
|
||||||
|
use Swoole\Coroutine\Channel;
|
||||||
|
use Swoole\Coroutine\WaitGroup;
|
||||||
use Swoole\Process;
|
use Swoole\Process;
|
||||||
use Snowflake\Abstracts\Config as SConfig;
|
use Snowflake\Abstracts\Config as SConfig;
|
||||||
|
|
||||||
@@ -16,11 +18,14 @@ use Snowflake\Abstracts\Config as SConfig;
|
|||||||
class Kafka extends \Snowflake\Process\Process
|
class Kafka extends \Snowflake\Process\Process
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/** @var Channel */
|
||||||
|
protected $channel;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Process $process
|
|
||||||
* @throws ConfigException
|
* @throws ConfigException
|
||||||
*/
|
*/
|
||||||
public function onHandler(Process $process)
|
public function initConfig()
|
||||||
{
|
{
|
||||||
$kafka = SConfig::get('kafka');
|
$kafka = SConfig::get('kafka');
|
||||||
$config = \Kafka\ConsumerConfig::getInstance();
|
$config = \Kafka\ConsumerConfig::getInstance();
|
||||||
@@ -32,23 +37,56 @@ class Kafka extends \Snowflake\Process\Process
|
|||||||
$config->setBrokerVersion($kafka['version']);
|
$config->setBrokerVersion($kafka['version']);
|
||||||
$config->setTopics($kafka['topics']);
|
$config->setTopics($kafka['topics']);
|
||||||
|
|
||||||
|
$this->channel = new Channel(1000);
|
||||||
|
$this->initCoroutine();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Process $process
|
||||||
|
* @throws ConfigException
|
||||||
|
*/
|
||||||
|
public function onHandler(Process $process)
|
||||||
|
{
|
||||||
|
$this->initConfig();
|
||||||
|
|
||||||
$consumer = new \Kafka\Consumer();
|
$consumer = new \Kafka\Consumer();
|
||||||
$consumer->setLogger(new Logger());
|
$consumer->setLogger(new Logger());
|
||||||
$consumer->start(function ($topic, $part, $message) {
|
$consumer->start(function ($topic, $part, $message) {
|
||||||
|
$this->channel->push([$topic, $part, $message]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function initCoroutine()
|
||||||
|
{
|
||||||
|
$group = new WaitGroup();
|
||||||
|
while ([$topic, $part, $message] = $this->channel->pop()) {
|
||||||
try {
|
try {
|
||||||
$namespace = 'App\\Kafka\\' . ucfirst($topic) . 'Consumer';
|
$namespace = 'App\\Kafka\\' . ucfirst($topic) . 'Consumer';
|
||||||
if (!class_exists($namespace)) {
|
if (!class_exists($namespace)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$class = Snowflake::createObject($namespace);
|
$class = Snowflake::createObject($namespace);
|
||||||
if ($class instanceof ConsumerInterface) {
|
if (!($class instanceof ConsumerInterface)) {
|
||||||
$class->onHandler(new Struct($topic, $part, $message));
|
continue;
|
||||||
}
|
}
|
||||||
|
$group->add();
|
||||||
|
go(function () use ($group, $class, $topic, $part, $message) {
|
||||||
|
defer(function () use ($group) {
|
||||||
|
$group->done();
|
||||||
|
});
|
||||||
|
$class->onHandler(new Struct($topic, $part, $message));
|
||||||
|
});
|
||||||
} catch (\Throwable $exception) {
|
} catch (\Throwable $exception) {
|
||||||
$this->application->error($exception->getMessage());
|
$this->application->error($exception->getMessage());
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
$group->wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user