放入消息

/**
* 获取beanstalk实例
*
* @staticvar resource|bool $beanstalk
* @return resource
*/
function get_beanstalk() {
static $beanstalk = FALSE;
if ($beanstalk) {
return $beanstalk;
}
include_once APPPATH . 'libraries/beanstalkd/pheanstalk_init.php';
//加载配置文件
$CI =& get_instance();
$CI->config->load('beanstalkd');
$bean_config = $CI->config->item('beanstalk_server');
$beanstalk = new Pheanstalk_Pheanstalk($bean_config['host'], $bean_config['port']);
return $beanstalk;
} /**
* 发送到队列函数
*
* @param string $tube 队列名称
* @param string $info 写入到队列的信息
* @param int $priority 队列优先级
* @param int $delay 迁移到正式发送队列的延迟时间
* @param int $ttr 队列reserve后的过期时间
* @return bool
*/
function send2queue($tube, $info, $priority = , $delay = , $ttr = ) {
$pheanstalk = get_beanstalk();
$res = $pheanstalk->useTube($tube)->put( $info, $priority, $delay, $ttr );
return $res;
}

自动脚本读取队列,发送消息

   /**
* 發送邮件
*/
public function send_email() {
$pheanstalk = get_beanstalk();
while ( $job = $pheanstalk->watch(Queue::SEND_EMAIL)->ignore("default")->reserve() ) {
$res = $job->getData();
$res = json_decode($res, TRUE);
$email_cc = '';
$email_bcc = '';
if(isset($res['email_addr'],$res['email_title'],$res['email_content'])) {
if (isset($res['email_cc'])) $email_cc = $res['email_cc'];
if (isset($res['email_bcc'])) $email_bcc = $res['email_bcc'];
$ret = send_email($res['email_addr'],$res['email_title'],$res['email_content'],$email_cc,$email_bcc);
if(!$ret) {
log_msg('queue_send_email_error.log','email_addr:'.$res['email_addr'].' email_title:'.$res['email_title'].' email_cc:'.$email_cc.' email_bcc:'.$email_bcc.' email_content:'.$res['email_content']);
}
}
$pheanstalk->delete($job);
}
} function send_email($to, $subject, $content, $cc='', $bcc='') {
include_once APPPATH . 'libraries/swiftmailer/swift_required.php';
$transport = Swift_SmtpTransport::newInstance('mail.fastweb.com.cn', )
->setUsername('11@qq.com')
->setPassword('safasfafa');
$mailer =Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance()
->setSubject($subject)
->setFrom(array('11@qq.com' =>'qq管理员'))
->setTo($to)
->setContentType('text/html')
->setCharset('utf-8')
->setBody($content); $cc != '' && $message->setCc($cc);
$bcc != '' && $message->setBcc($bcc); return $mailer->send($message);
}

beanstalkd 消息队列发邮件的更多相关文章

  1. beanstalkd 消息队列

    概况:Beanstalkd,一个高性能.轻量级的分布式内存队列系统,最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟,支持过有9.5 million用户的Faceb ...

  2. Beanstalkd消息队列 -- php类Pheanstalk使用

    业务场景 商城订单生成30分钟后 如果未支付关闭订单 解决办法 可以使用延迟消息队列   这里我们用的是beanstalkd Beanstalkd介绍 Beanstalk,一个高性能.轻量级的分布式内 ...

  3. 【Beanstalkd】Beanstalkd消息队列的安装与使用

    一.Beanstalkd是什么? Beanstalkd是一个高性能,轻量级的分布式内存队列 二.Beanstalkd特性 1.支持优先级(支持任务插队)2.延迟(实现定时任务)3.持久化(定时把内存中 ...

  4. laravel5.6 基于redis,使用消息队列(邮件推送)

    邮件发送如何配置参考:https://www.cnblogs.com/clubs/p/10640682.html 用到的用户表: CREATE TABLE `recruit_users` ( `id` ...

  5. Beanstalkd消息队列的安装与使用

    一.Beanstalkd是什么? Beanstalkd是一个高性能,轻量级的分布式内存队列 二.Beanstalkd特性 1.支持优先级(支持任务插队)2.延迟(实现定时任务)3.持久化(定时把内存中 ...

  6. .Net下的MSMQ(微软消息队列)的同步异步调用

    一.MSMQ简介 MSMQ(微软消息队列)是Windows操作系统中消息应用程序的基础,是用于创建分布式.松散连接的消息通讯应用程序的开发工具.消息队列 和电子邮件有着很多相似处,他们都包含多个属性, ...

  7. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

    消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...

  8. 消息队列 ActiveMQ 、RocketMQ 、RabbitMQ 和 Kafka 如何选择?

    「 预计阅读 6 分钟 」 旁白:这是一篇拖更了N久的文章...0.0(看不见我~) 往期回顾 前端框架 jQuery 和 Vue 如何选择? 安全框架 Shiro 和 Spring Security ...

  9. 消息队列 RabbitMQ 与 Spring 整合使用

    一.什么是 RabbitMQ RabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗.消 ...

随机推荐

  1. nodejs实现读取文件

    今天后端同事下班,想让我读取一个文件的内容.我想这个是小忙啊,就立马答应了. 我知道这个是nodejs读取,可是我又想,平时我们都要起一个服务才能够运行node服务器, 比如如下代码 var http ...

  2. 虚拟机上CentOS7 配置NAT模式

    1. 虚拟机网络适配器选择NAT模式 2. 使用vi编辑/etc/sysconfig/network-scripts/ifcfg-ens32 vi /etc/sysconfig/network-scr ...

  3. [转载]Emmet (ZenCoding) 缩写语法

    Emmet 使用类似于 CSS 选择器的语法描述元素在生成的文档树中的位置及其属性. 元素 可以使用元素名(如 div 或者 p)来生成 HTML 标签.Emmet 没有预定义的有效元素名的集合,可以 ...

  4. day07 linux磁盘分区,ps,kill,df,top命令使用

    day07进入单用户模式删除密码不能进入系统问题: SELINUX=disabled 操作系统linux开机流程加电BIOS找到启动介质先读取第一个扇区(MBR)grup找到kernel加载到内存执行 ...

  5. 数组(Array)与 字符串(String)公用的属性与方法

    数组与字符串都有很多方法,有一些方法是公用的,在这里就将数组与字符串公用的方法提取出来,方便大家的记忆 1. length 可通过str.length与arr.length分别取到字符串与数组的长度: ...

  6. input 的 placeholder 样式修改

    input::-webkit-input-placeholder{ color:#999999; } input::-moz-placeholder{ /* Mozilla Firefox 19+ * ...

  7. css---switch开关

    html: <label><input class="mui-switch" type="checkbox"> 默认未选中</la ...

  8. VS2012 TFS 解决计算机改名无法连接TFS的问题

      闲着没事改了下计算机名字,结果造成TFS无法连接. 报错讯息如下: ---------------------------Microsoft Visual Studio-------------- ...

  9. CreateProcess函数详解及示例

    WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件. 函数原型: BOOL CreateProcess ( LPCTSTR lpApplic ...

  10. System.Web.Mvc.FileStreamResult.cs

    ylbtech-System.Web.Mvc.FileStreamResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, P ...