phpredis实现简单的消息队列详解编程语言

phpredis实现简单的消息队列

本来想用kafka 试用了下 感觉坑巨多 而且项目也不需要那么大的吞吐量所以放弃这个方案了

<?php 
require_once __DIR__ . '/phprediscaozuo.php'; 
$redis = /RedisClient::getInstance(); 
$ss = $redis->subscribe(array('xiaoxiduilie'), 'callback'); 
function callback($instance, $channelName, $message) 
{ 
$info     = unserialize($message); 
$url      = $info['url']; 
if (is_numeric(strpos(__FILE__, 'phpStudy'))) { 
$yuming  = 'bendilink'; 
} else { 
$yuming  = 'fuwuqilink'; 
}     
$url=$yuming.$url; 
$postdata = $info['postdata']; 
echo $channelName, "==>", $message, PHP_EOL; 
$info = httprepair($url, $postdata, 'post'); 
file_put_contents(__DIR__ . '/xiaoxiduilie.log', date("Y-m-d H:i:s") . " " . var_export($info, true) . PHP_EOL, FILE_APPEND | LOCK_EX); 
} 
/** 
* 发送HTTP请求方法,目前只支持CURL发送请求 
* @param  string $url    请求URL 
* @param  array  $data   POST的数据,GET请求时该参数无效 
* @param  string $method 请求方法GET/POST 
* @return array          响应数据 
*/ 
function httprepair($url, $data = '', $method = 'GET') 
{ 
$opts = array( 
CURLOPT_TIMEOUT        => 1000, 
CURLOPT_RETURNTRANSFER => 1, 
CURLOPT_SSL_VERIFYPEER => false, 
CURLOPT_SSL_VERIFYHOST => false, 
); 
/* 根据请求类型设置特定参数 */ 
$opts[CURLOPT_URL] = $url; 
if (strtoupper($method) == 'POST') { 
$opts[CURLOPT_POST]       = 1; 
$opts[CURLOPT_POSTFIELDS] = $data; 
if (is_string($data)) { 
//发送JSON数据 
$opts[CURLOPT_HTTPHEADER] = array( 
'Content-Type: application/json; charset=utf-8', 
'Content-Length: ' . strlen($data), 
); 
} 
} 
/* 初始化并执行curl请求 */ 
$ch = curl_init(); 
curl_setopt_array($ch, $opts); 
$data  = curl_exec($ch); 
$error = curl_error($ch); 
curl_close($ch); 
//发生错误,抛出异常 
if ($error) { 
file_put_contents(__DIR__ . '/error.log', date("Y-m-d H:i:s") . " " . var_export('<<<<< ' . json_encode($error), 'ERROR', true) . PHP_EOL, FILE_APPEND | LOCK_EX); 
} 
return $data; 
}

直接PHP 运行 常驻内存就可以了 php xx.php &  运行在后台了  这个几千的并发没什么问题的

 ps:一定要先subcribe 监听 频道 然后再publish 频道 不然会publish失败

我用url 请求 是为了以后更好的业务隔离

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/19003.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论