activeMQ 与 php的结合使用

ActiveMQ与PHP扩展stomp.php深度集成实践 ActiveMQ是一个开源的,跨平台的消息代理服务器,实现了多种企业级消息服务协议。它支持的消息协议种类广泛,包括JMS, AMQP, STOMP等,使得不同类型的客户端和服务器能够进行消息交换。在消息队列领域,ActiveMQ因其稳定性和高性能,广泛应用于需要解耦、异步处理和流量削峰的场景中。它能够帮助企业实现复杂业务系统中的高可用、可扩展、健壮性的消息通信。 阅读详情

1、首先需要安装stomp的php扩展,stomp5.6,将该文件放入php的扩展库ext文件夹中。
2、在php.ini中加入扩展配置:extension=php_stomp.dll,然后重启服务。
3、activeMQ主要有两个操作,即生产端与消费端

生产端代码如下:

<?php

use Yii;
use app\components\Curl;

class ProductClass{
	private $user = "admin";
	private $password = "admin";
	private $host = "10.100.200.20";
	private $port = "8161";
	private $destination = "queue://smssykjyzmqueue"; // 目的地址
	private $apipubaddr = "/api/message?"; // api发布地址

	private $codeMsg = array(
		'20000'=>'发布成功',
		'20001'=>'发布内容不能为空',
		'20002'=>'发布内容格式不对',
		'20003'=>'stomp 未连接成功',
		'20004'=>'发布内容失败',
		'20005'=>'其它错误',
	);

	/**
	* @param $body  json 发送的数组内容
	* @param null $destination
	* @return string
	* @throws \app\components\InvalidParamException
	*/
	public function sendQueue($body,$destination=null){
		try {
			if(empty($body)){
				return $this->beJson('20001');
			}
			// 传输过来的不是json
			if(!Curl::is_json($body)){
				return $this->beJson('20002');
			}
			$to = ($destination && is_string($destination)) ? $destination : $this->destination;
			$url = 'http://' . $this->user . ':' . $this->password . '@' . $this->host . ":" . $this->port .$this->apipubaddr.'destination='. $to;
			$res = Curl::http($url, ['body'=>$body], 'post');
			if($res != 'Message sent'){
				return $this->beJson('20005');
			}
		} catch(StompException $e) {
			return $this->beJson('20003');
		}
		return $this->beJson('20000');
	}

	/**
	* 返回值
	* @param $code
	* @return string
	*/
	public function beJson($code){
		return json_encode(
			array(
				'errcode'=>$code,
				'errmsg'=>$this->codeMsg[$code]
			),JSON_UNESCAPED_UNICODE
		);
		exit;
	}
}

$body = '
{
    "platform":"6",
    "sign":"测试",
    "mobile":"15820786542",
    "content":"您好!您的验证码为122223",
    "type":"1",
    "callback":"http://lib.sms.com/v1/sms-api-send/sms-send",
    "taskid":"20161031111134170349"
}';
$obj = new ProductClass();
$obj->sendQueue($body);

消费端代码如下:

<?php
define('QUEUE', 'smssykjyzmqueue');
$user = getenv("ACTIVEMQ_USER");
if (!$user) $user = "admin";

$password = getenv("ACTIVEMQ_PASSWORD");
if (!$password) $password = "admin";

$host = getenv("ACTIVEMQ_HOST");
if (!$host) $host = "10.100.200.20";

$port = getenv("ACTIVEMQ_PORT");
if (!$port) $port = 61613;

$destination = '/queue/' . QUEUE;

try {
    $url = 'tcp://' . $host . ":" . $port;
    $stomp = new Stomp($url, $user, $password);
    $stomp->subscribe($destination);

    while (true) {
        if ($stomp->hasFrame()) {
            $frame = $stomp->readFrame();
            if ($frame != NULL) {
                // 收到的数据为 $frame->body
                $res = json_decode($frame->body, true);
                $url = $res['callback'];
                unset($res['callback']);
                $res = json_encode($res,JSON_UNESCAPED_UNICODE);
                $data = http($url, $res, "raw");     // 根据回调地址执行短信发送
                $dataArr = json_decode($data, true);
                if($dataArr['errcode'] == 20000) {
                    file_put_contents('./'.date('Y-m-d').'sykjyzmsmsSend.txt',date('Y-m-d H:i:s')."发送成功------ 参数".$res."--返回值--".$data."\r\n",FILE_APPEND);
                }else{
                    file_put_contents('./'.date('Y-m-d').'sykjyzmsmsSend.txt',date('Y-m-d H:i:s')."发送失败------ 参数".$res."--返回值--".$data."\r\n",FILE_APPEND);
                }
                $stomp->ack($frame);
            }
        }
    }

} catch(StompException $e) {
    echo $e->getMessage();
}

function http($url, $params = null, $type = 'get')
{

    $curl = curl_init();
    switch ($type) {
        case 'get':
            is_array($params) && $params = http_build_query($params);
            !empty($params) && $url .= (stripos($url, '?') === false ? '?' : '&') . $params;
            break;
        case 'post':
            curl_setopt($curl, CURLOPT_POST, true);
            if (!is_array($params)) {
                throw new InvalidParamException("Post data must be an array.");
            }
            curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
            break;
        case 'raw':
            curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
            curl_setopt($curl, CURLOPT_POST, true);
            if (is_array($params)) {
                is_array($params) && $params = json_encode($params, JSON_UNESCAPED_UNICODE);
            }
            curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
            break;
        default:
            throw new InvalidParamException("Invalid http type '{$type}.' called.");
    }
    if (stripos($url, "https://") !== false) {
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1); // 微信官方屏蔽了ssl2和ssl3, 启用更高级的ssl
    }
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $content = curl_exec($curl);
    $status = curl_getinfo($curl);
    $errno = curl_errno($curl);
    curl_close($curl);
    if (isset($status['http_code']) && intval($status['http_code']) == 200) {
        return $content;
    }
    return false;
}



LTC3783 LED驱动控制器设计与效率优化详解 开关电源控制器是现代LED照明的核心器件,通过电流模式控制实现高效能量转换。其核心原理是通过采样电阻检测负载电流,配合误差放大器形成闭环调节,在汽车电子、显示背光等场景中确保±3%的电流精度。LTC3783作为典型代表,集成升压/降压-升压多拓扑支持,配合PWM调光技术可实现3000:1的无色偏调光范围。在工程实践中,需重点考量功率电感选型、MOSFET开关损耗与热管理设计,例如在38W功率方案中采用10μH/5A电感和4.5mΩ MOSFET可达成95%效率。该方案特别适用于需要应对9-36V宽输入电压波 阅读详情

相关推荐

解决ADS1.2报错Cannot obtain license

报错如下 将licenses文件下的license内容进行修改: 修改为如下内容即可。 # # Generated on 2021-dec-1 by licwizard # PACKAGE ads armlmd 1.200 E32F0DE5161D COMPONENTS="armasm compiler bats armulate axd adwu fromelf armlink codewarrior armsd" INCREMENT ads armlmd 1.200 permanent uncounte

qq_46110320的博客 3463

PHP使用消息队列ActiveMQ

消息队列中间件是分布式系统中的重要组件,主要解决应用耦合、异步消息、流量削锋等问题。可帮助实现高性能,高可用,可伸缩和最终一致性的架构。 消息队列应用场景 异步任务 假设场景:现在很多网站或App注册时都采用了验证码的机制,因此,当服务器收到客户端发起获取验证码的请求,有以下处理方式 在当前线程中立即发送短信(会阻塞当前线程一小会儿) 新建立一个线程发送短信 交由其他的服务来处理这个...

weixin_43076374的博客 1597

VASP能带计算避坑指南:从CHGCAR读取失败到成功解决的全过程

本文深度解析VASP能带计算中常见的“CHGCAR读取失败”报错,并提供从静态自洽到非自洽计算的全流程避坑指南。核心解决方案包括使用CONTCAR替代POSCAR、调整SYMPREC参数以处理对称性判定问题,并推荐利用vaspkit工具自动化生成输入文件,确保计算流程稳健高效。

weixin_29245767的博客 772

PHP用stomp对ActiveMQ连接

请注意,上述示例代码假设你已经有一个运行中的ActiveMQ实例,并且已经配置了相应的队列或主题。在PHP中使用STOMP协议连接ActiveMQ,你可以使用`Stomp-PHP`库,这是一个实现了STOMP 1.0和STOMP 1.1协议的PHP客户端。使用Stomp-PHP库创建一个连接到ActiveMQ的STOMP客户端实例。// 创建StatefulStomp实例,连接到ActiveMQ。// ActiveMQ服务器的地址和端口。// 连接到ActiveMQ。// 要发送消息的目的地。

云加速 278

银河麒麟V10 SP3离线安装Nginx1.21.5全记录(附11个rpm包下载清单)

本文详细记录了在银河麒麟V10 SP3操作系统上离线安装Nginx 1.21.5的全过程,包括11个必备rpm包的下载清单。通过分步骤的实战指南,帮助用户在国产化环境中高效部署Nginx服务,涵盖安装、配置、调优及故障排查等关键环节,特别适合金融、政务等对安全性要求高的场景。

weixin_30872337的博客 606

Zynq7000双核裸机开发实战:如何安全实现共享内存与乒乓RAM设计

本文深入探讨了Zynq7000双核裸机开发中的共享内存与乒乓RAM设计,重点解析了核间通信的Cache一致性处理机制和硬件级实现方案。通过实战代码示例和性能优化技巧,帮助开发者解决双核运行中的访问冲突问题,提升嵌入式系统开发效率。

weixin_29191669的博客 376

php activemq

<?php require_once("Stomp.php"); error_reporting(E_ALL); $config = array( 'active'=>array( //ActiveMQ 参数 'destination' => '/queue/test',//监听ID 'active_usr' => 'guest', 'active_ps

design321的专栏 1690

华为2022硬件逻辑笔试题

单选题(每题两分) 1.以下关于过程赋值的描述,不正确的是() A在非阻塞性过程赋值中,使用赋值符号“< =” B赋值操作符是“=”的过程赋值是阻塞性过程赋值 C在非阻塞性过程赋值中,对目标的赋值是非阻塞的(因为时延),但可预定在将来某个时间步发生(根据时延:如果是0时延,那么在当前时间步结束) D非阻塞性过程赋值在其后所有语句执行前执行 解:D 2.芯片的功耗和下列哪种不强相关_____________。 A资源利用率 B核电压 C组合逻辑级数 D翻转率 解:A 3.下列说

weixin_44072819的博客 1万+

activemq php java_PHP使用ActiveMQ实例

使用点对点(Point To Point)模型点对点模型特点:只有一个消费者可以接收到消息不能重复消费生产者producer.php代码:try {// 1.建立连接$stomp = new Stomp('tcp://47.52.119.21:61613');// 2.实例化类$obj = new Stdclass();// 3.获取数据for($i=0; $i<3; $i++){$obj-...

weixin_33937306的博客 452

LangGraph-StateGraph 和 Graph API 源码分析

摘要: StateGraph是LangGraph的核心API,用于构建有状态工作流图。本文分析了其实现原理,包括: 核心类关系:StateGraph(构建器)和CompiledStateGraph(继承自Pregel的可执行图) 关键流程:状态模式到通道的映射、节点到PregelNode的转换 实现特点: 支持TypedDict和Pydantic两种状态模式 自动选择通道类型(LastValue或BinaryOperatorAggregate) 通过映射函数处理节点输入输出 边实现基于通道写入机制 编译过程

838

001、专栏导论:为什么我们需要MLIR与算子中间表示

五年前,大家还在争论“TVM还是XLA”。现在回头看,TVM的Relay IR和XLA的HLO都是特定领域的IR,它们解决了各自的问题,但缺乏通用性。MLIR的出现,本质上是因为硬件异构化已经到了一个临界点——CPU、GPU、NPU、DSP、FPGA,每个硬件都有自己的指令集和内存层次,没有一个统一的IR能同时高效表达所有硬件的计算模式。MLIR的“方言+渐进式lowering”模式,恰好提供了这种灵活性。你可以为每个硬件定制一套方言,然后共享公共的lowering路径。

Jack010169的博客 488

php+activemq实践(亲测可用)

1.查看activemq配置(conf/activemq.xml) <transportConnector name="stomp" uri="stomp://0.0.0.0:61605?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 确保stomp协议可用 2.使用composer安装p...

白白手游专栏(cocos2d-x) 993

AI测试:手把手教你用AI生成测试用例并支持导出Excel「喂饭教程」

如果我告诉你,有一种方法,你只需要输入需求内容,AI就能自动帮你设计出结构清晰、覆盖全面的测试用例,并直接生成一份精美的Excel表格,你会不会心动?

blues_C的博客 3885

php 利用activeMq+stomp实现消息队列

php 利用activeMq+stomp实现消息队列 一、activeMq概述   ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。 二、特性列表 ⒈ 多种语言和协议编写客户...

weixin_33895604的博客 455

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

php 实现 activemq,activeMQ+stomp+php实现消息队列

** 一、ActiveMQ的安装与配置**1、安装JDK2、安装ActiveMQ3、配置ActiveMQ,使其支持stomp在配置文件/usr/local/activemq/conf/activemq.xml,添加4、启动ActiveMQ/usr/local/activemq/bin/activemq start二、安装php的stomp扩展查看最新的stomphttp://pecl.php.ne...

weixin_39793189的博客 294

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

php如何使用activemq,PHP如何使用ActiveMQ实例分享

点对点模型特点:只有一个消费者可以接收到消息,不能重复消费。本文主要和大家分享PHP如何使用ActiveMQ实例分享,希望能帮助到大家。生产者producer.php代码:phptry {// 1.建立连接 $stomp = new Stomp('tcp://47.52.119.21:61613');// 2.实例化类 $obj = new Stdclass();// 3.获取数据 ...

weixin_39565910的博客 553

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

php activemq queue,PHP如何使用ActiveMQ

本文主要和大家分享关于PHP使用ActiveMQ的实例,我们分享了实例代码,并做了相关要点的解释,需要的朋友参考下吧。希望能帮助到大家。使用点对点(Point To Point)模型点对点模型特点:只有一个消费者可以接收到消息不能重复消费生产者producer.php代码:try {// 1.建立连接$stomp = new Stomp('tcp://47.52.119.21:61613');//...

weixin_29432421的博客 279

php与activemq,ActiveMQ的PHP、Python客户端

ActiveMQ这款开源消息服务器提供了多语言支持,除了一般的Java客户端以外,还可以使用C/C++、PHP、Python、JavaScript(Ajax)等语言开发客户端。最近由于项目需要,需要提供PHP和Python的主题订阅客户端。这里作为总结,列出这两种语言客户端的简单安装和使用。对于PHP和Python,可以通过使用STOMP协议与消息服务器进行通讯。在ActiveMQ的配置文件act...

weixin_39922394的博客 163

php activemq queue,队列 activeMQ

在web开发过程中,我们会使用到队列。先进先出的特点。在最开始接触的是张宴的HTTPSQS,后来在使用Redis的时候,使用过reids作为队列,同时memcache也可以作为队列。今天主要是说一下Apache出品,最流行的,能力强劲的开源消息总线,ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,多种语言和协议客户端。语言: JAVA、C、C++...

weixin_39883129的博客 133

php与activemq,PHP和ActiveMQ集成

假设你喜欢用PHP构建WEB应用,然后还有一些外围的应用,包括移动终端APP,mobile web等,由于mobile app等是非PHP语言所编写如ObjectiveC、Java等,然后你想在这些客户端应用程序之间共享某些基础服务,希望这些基础服务以一种松耦合,高扩展性,高性能的方式来提供,那么一个比较好的解决方案是使用跨平台的消息中间件ActiveMQ。基于rest是无状态的,而基于Stomp...

weixin_39961943的博客 248

php activemq queue,php使用activemq

一、下载:http://activemq.apache.org/activemq-5140-release.html二、安装tar -zxvf apache-activemq-5.15.3-bin.tar.gzcd apache-activemq-5.14.0cd bin./activemq start三、防火墙端口8161(web管理页面端口)61616(activemq服务监控端口)四、web...

weixin_34268617的博客 294

ActiveMQ 简介、安装、与 Maven 项目基本使用

目录 ActiveMQ 简介 ActiveMQ 5.15.9 安装 ActiveMQ 基本使用 ActiveMQ 简介 1、ActiveMQ 是 Apache 推出的一款开源免费的,完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现的消息中间件(Message Oriented Middleware,MOM) 2、ActiveMQ 最主要的功能是实现 ...

蚩尤后裔-汪茂雄 9593

php+activemq+定时,ActiveMQ如何在PHP中使用

ActiveMQ如何在PHP中使用发布时间:2020-12-22 14:44:52来源:亿速云阅读:104作者:Leah这期内容当中小编将会给大家带来有关ActiveMQ如何在PHP中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。使用点对点(Point To Point)模型点对点模型特点:只有一个消费者可以接收到消息不能重复消费生产者producer.ph...

weixin_32848617的博客 159

activemq php java_PHP使用ActiveMQ实现消息队列的方法详解

本文实例讲述了PHP使用ActiveMQ实现消息队列的方法。分享给大家供大家参考,具体如下:前面我们已经学了如何部署ActiveMQ,我们知道通过ActiveMQ的一个管理后台可以查看任务队列。今天 用PHP来操作ActiveMQ,我们可以借助一个第三方扩展。下载:composer require fusesource/stomp-php:2.0.*然后新建test.php:require __D...

weixin_35717941的博客 272

ActiveMQ使用与部署

1 JMS与MQ  1.1 JMS JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,中文称Java消息服务。JMS是一种与厂商无关的 API,用来访问消息收发系统消息;就像JDBC(Java Database Connec

阿智的专栏 5959

php activemq 类库,php activemq

require_once("Stomp.php");error_reporting(E_ALL);$config = array('active'=>array(//ActiveMQ 参数'destination' => '/queue/test',//监听ID'active_usr' => 'guest','active_psw' => 'password','stomp...

weixin_39891317的博客 192
上一篇: 定时任务crontab
下一篇: Workerman WebSocket示例
进击者
博客等级 码龄13年 1粉丝 7原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值