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;
}



ICG cell如何通过Latch结构消除与门clock gating中的glitch? 本文深入解析了ICG Cell如何利用Latch结构解决传统与门时钟门控中的毛刺问题。通过将电平敏感锁存器与门控与门结合,ICG Cell将使能信号的变化严格限制在时钟低电平的安全窗口内采样和锁存,从而在时钟有效沿期间提供稳定的控制信号,从根本上消除了因信号延迟不同步而产生的glitch,确保了门控时钟的纯净与电路功能的可靠性。 阅读详情

相关推荐

SPSS与SPSS Modeler,不一样的世界

1. SPSS软件的前世今生 1.1 IBM SPSS的由来 与数据打过交道的小伙伴们,应该对SPSS软件都不陌生。SPSS是世界上最早的统计分析软件,由斯坦福大学的三个研究生大牛于1968年研发,同时还成立了SPSS公司。SPSS最初的全称是Solutions Statistical Package for the Social Sciences(社会科学统计软件包),随着SPSS产品服务领...

qq_24339451的博客 3613

PHP使用消息队列ActiveMQ

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

weixin_43076374的博客 1597

手把手教你学Simulink——基于Simulink的前馈解耦SVPWM整流器仿真

本文详细介绍了基于Simulink的前馈解耦SVPWM整流器仿真方法。针对三相PWM整流器存在的dq轴交叉耦合问题,提出前馈解耦控制方案,通过在电流环中引入耦合电压补偿项,显著提升系统性能。文章包含完整的系统架构、核心算法、Simulink建模步骤及参数设置,仿真结果显示:电流跟踪误差<2%、动态响应时间<0.05s、THD<3%、功率因数>0.999。同时提供了可直接复用的MATLAB代码和工程优化建议,为电力电子工程师实现高精度AC/DC转换提供了实用解决方案。

MHD0815的博客 108

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

TPM 2.0实例探索2 —— LUKS磁盘加密(1)

本文对LUKS行了系统介绍

phmatthaus的专栏 1700

14、5G物理层的灵活解决方案:广义频分复用(GFDM)

广义频分复用(GFDM)作为一种高度灵活的5G物理层多载波调制方案,能够满足多样化应用场景的需求,包括高吞吐量的比特管道通信、低功耗高连接数的物联网、超低延迟的触觉互联网以及广覆盖的无线区域网。通过参数化配置,GFDM可适配LTE资源网格,实现与现有系统的兼容与共存。其支持多种解调方式、干扰消除技术、OQAM映射及预编码机制,兼具低带外发射、高频谱效率和强鲁棒性。GFDM还能统一描述OFDM、FBMC、FTN等多种经典与先进波形,成为5G及未来通信系统中极具潜力的通用波形框架。

gold8的专栏 108

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

完整复现YOLOv8:包括训练、测试、评估、预测阶段【本文源码已开源,地址在文章末尾】

(这里主要是在colab.research.google.com实现的,本地的配置也是类似的方法)YOLOv8是一种用于目标检测的深度学习算法。主要参考:https://github.com/ultralytics/ultralytics/blob/main/README.zh-CN.md。yolov8的权重:https://github.com/ultralytics/assets/releases。yolov8的文档:https://v8docs.ultralytics.com/

源代码杀手的博客 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

STM32F407上优化CAN总线通信(500kbps速率,多终端系统)需要从硬件设计、软件配置和实时性能三个方面进行综合优化

STM32F407上优化CAN总线通信(500kbps速率,多终端系统)需要从硬件设计、软件配置和实时性能三个方面进行综合优化

a_zxswer的博客 383

OpenClaw人人养虾:发现与传输

客户端需要先"发现"Gateway 的地址和端口,才能建立连接。OpenClaw 支持多种发现(Discovery)和传输(Transport)机制。

王国平的博客 572

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

rk3588平台USB 3.0 -OAK深度相机适配方法

摘要:本文记录了OAK摄像头设备的配置与测试流程。主要内容包括:1)添加USB设备udev规则;2)拉取相关依赖库;3)安装Python3和pip;4)安装项目依赖;5)安装FFmpeg工具;6)测试摄像头功能并转换视频格式;7)将测试视频拷贝到U盘查看。操作步骤涵盖了从设备驱动配置到功能测试的完整流程,提供了详细的命令行操作指引。通过该文档可快速完成OAK摄像头的环境搭建和基础功能验证。

yy_hear的博客 325

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

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

weixin_33895604的博客 455

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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、付费专栏及课程。

余额充值