Laravel 跨框架队列交互
公司大部分项目是laravel框架,但有些是yii框架,这两个框架之间有消息需要通信,比如在yii框架发布消息,laravel框架中的队列去处理,用redis作为消息连接纽带
laravel 队列原理是将类实例化后再序列化存到redis中(序列化的类只存储属性值)。消费的时候直接反序列化得到类和属性值再去相应的类中找到方法执行
直接上代码
lavavel 消费类
<?php
namespace App\Jobs; class TestJob extends BaseJob{
public $receipt;
public $queue = "receipt-to-stock";//定义队列名称 和生产队列中的queue保持一致
public function handle() {
\Log::debug("收到队列信息:", $this->receipt);
}
public function failed(){
\Log::info("队列执行失败");
}
}
yii 生产类
<?php
namespace App\Jobs; class TestJob extends BaseJob{
private $receipt;
public $queue = "receipt-to-stock"; //定义队列名称 和消费中的queue保持一致 /**
* @param array $receipt 单据
*/
public function __construct(array $receipt=[])
{
$this->receipt = $receipt;
}
}
yii 封装序列化方法
$receipt 是要处理的数据
$jobName 是消费和生产的类名如 "App\\Jobs\\TestJob" 两者保持一致,如果不一致请适当调整下面的代码
public function serializeForLaravelQueue($receipt, $jobName)
{
$result = [
"displayName" => $jobName,//消费的类名
"job" => "Illuminate\Queue\CallQueuedHandler@call",
"maxTries" => null,
"timeout" => null,
"timeoutAt" => null,
"id" => time(),
"attempts" => 0,
"type" => "job",
"tags" => [],
"pushedAt" => time(),
"data" =>
[
'commandName' => $jobName,//消费的类名
'command' => serialize(new $jobName($receipt))//生产的类名
]
];
return json_encode($result, JSON_UNESCAPED_UNICODE);
}
调用
$data = serializeForLaravelQueue(["hello world"], "App\\Jobs\\TestJob");
$redis->LPUSH("queues:receipt-to-stock", $data);//将序列化的类写入redis的List中
这个时候在yii框架中发布消息,laravel项目就会自动处理了!
注意事项:
1、确保redis在同一个库中
2、队列名保持一致,也就是redis中存储的key值
Laravel 跨框架队列交互的更多相关文章
- Laravel中的队列处理
Laravel中的队列处理 队列介绍 为什么要有消息队?这里先对其进行一个简单的介绍,方便还不了解的同学理解.在面向对象里,有一个很简单的概念--消息传递,而消息队列就可以在它上面扩展一下,把它说的更 ...
- laravel服务l队列资料整理
Laravel 队列系列 —— 基于 Redis 实现任务队列的基本配置和使用 1.概述 在Web开发中,我们经常会遇到需要批量处理任务的场景,比如群发邮件.秒杀资格获取等,我们将这些耗时或者高并发的 ...
- C++操作Kafka使用Protobuf进行跨语言数据交互
C++操作Kafka使用Protobuf进行跨语言数据交互 Kafka 是一种分布式的,基于发布 / 订阅的消息系统.主要设计目标如下: 以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 T ...
- .Net基础体系和跨框架开发普及
.net体系经过十几年发展,发生了很多变化.特别是在最近两年,随着开源和跨平台的发展,衍生出很多概念,像标准库,可移植库,.Net Core等,相信有不少同学对他们之间的关系是有一些困惑的,这里我从基 ...
- ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据的传递
前言 最近公司项目进行架构调整,由原来的三层架构改进升级到微服务架构(准确的说是服务化,还没完全做到微的程度,颗粒度没那么细),遵循RESTFull规范,使前后端完全分离,实现大前端思想.由于是初次尝 ...
- 10个技巧优化PHP程序Laravel 5框架
10个技巧优化PHP程序Laravel 5框架 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践www.itxdl.c ...
- laravel的消息队列剖析
laravel的消息队列剖析 这篇来自于看到朋友转的58沈剑的一篇文章:1分钟实现"延迟消息"功能 在实际工作中也不止遇见过一次这个问题,我在想着以前是怎么处理的呢?我记得当初在上 ...
- ASP.Net中关于WebAPI与Ajax进行跨域数据交互时Cookies数据的传递
本文主要介绍了ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据传递的相关知识.具有很好的参考价值.下面跟着小编一起来看下吧 前言 最近公司项目进行架构调整,由原来的三层架构改 ...
- (转).Net基础体系和跨框架开发普及
在园子里看到了一篇关于.net体系及框架开发的文章,感触颇深,身为一个.net程序员,发现自己在这方面的跟进和理解远远不够.转到自己这里,分享的同时方便日后查看. 原文链接: http://www.c ...
随机推荐
- iOS设计模式 - 责任链
iOS设计模式 - 责任链 原理图 说明 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链 ...
- UIImageView的animationImages动画
UIImageView的animationImages动画 UIImageView的animationImages,只有在做非常规动画的时候才有优势,比方说下图中左侧动画.如果用来做下图中的右侧动画, ...
- mysql的表和数据类型
一.查看当前数据库所有表 mysql> use db Database changed mysql> show tables; Empty set (0.00 sec) #表示db数据库下 ...
- 'Table is Marked as crashed and should be repaired Error'.Mysql表损坏解决方案
问题表现:由于服务器崩溃导致表损坏无法打开或者能打开但是无法写入数据(提示主键重复但实际没有该主键且该主键值在最大值范围内). 本文提供两种检查修复方式:mysqlcheck 和 myisamchk ...
- 关于print缩不缩进%有else没else的影响
关于print缩不缩进%有else没else的影响 if gender == "男": # = 赋值. == 判断print("上厕所")else: print ...
- 20165318 2017-2018-2 《Java程序设计》第一周学习总结
20165318 2017-2018-2 <Java程序设计>第一周学习总结 教材内容学习总结 第一章主要对Java平台进行了简单的介绍,并讲解了如何搭建Java环境. Java平台概论 ...
- C# 数字证书 RSA加密解密 加签验签
KeyValuePair<string, string> keyPair = Encrypter.CreateRSAKey(); string privateKey = keyPair.V ...
- Sequelize-nodejs-11-Raw queries
Raw queries原始查询 就是使用了原始的查询语句,如UPDATE users SET y = 42 WHERE x = 12 As there are often use cases in w ...
- P1353 [USACO08JAN]跑步Running
题目描述 The cows are trying to become better athletes, so Bessie is running on a track for exactly N (1 ...
- bat取时间间隔
@echo off echo 现在时间是%time:~,%点%time:~,%分%time:~,%秒 ,%%time:~,%%time:~,% pause echo 现在时间是%time:~,%点%t ...