首页 > 编程语言 >php操作rabbitmq实例

php操作rabbitmq实例

时间:2023-03-14 16:56:09浏览次数:81  
标签:AMQP 实例 队列 rabbitmq 交换机 ex cnn new php

title: PHP使用RabbitMQ实例
date: 2021-03-22 17:37:29
tags: php
categories: php

消费者代码consumer.php

	<?php
	/**
	 * Created by PhpStorm.
	 * User: wangyii.cn
	 * Time: 13:16
	 */
	//声明连接参数
	$config = array(
	    'host' => '192.168.75.132',
	    'vhost' => '/',
	    'port' => 5672,
	    'login' => 'test',
	    'password' => 'test'
	);
	//连接broker
	$cnn = new AMQPConnection($config);
	if (!$cnn->connect()) {
	    echo "Cannot connect to the broker";
	    exit();
	}
	//在连接内创建一个通道
	$ch = new AMQPChannel($cnn);
	//创建一个交换机
	$ex = new AMQPExchange($ch);
	//声明路由键
	$routingKey = 'key_1';
	//声明交换机名称
	$exchangeName = 'exchange_1';
	//设置交换机名称
	$ex->setName($exchangeName);
	//设置交换机类型
	//AMQP_EX_TYPE_DIRECT:直连交换机
	//AMQP_EX_TYPE_FANOUT:扇形交换机
	//AMQP_EX_TYPE_HEADERS:头交换机
	//AMQP_EX_TYPE_TOPIC:主题交换机
	$ex->setType(AMQP_EX_TYPE_DIRECT);
	//设置交换机持久
	$ex->setFlags(AMQP_DURABLE);
	//声明交换机
	$ex->declareExchange();
	//创建一个消息队列
	$q = new AMQPQueue($ch);
	//设置队列名称
	$q->setName('queue_1');
	//设置队列持久
	$q->setFlags(AMQP_DURABLE);
	//声明消息队列
	$q->declareQueue();
	//交换机和队列通过$routingKey进行绑定
	$q->bind($ex->getName(), $routingKey);
	//接收消息并进行处理的回调方法
	function receive($envelope, $queue) {
		//休眠两秒,
	    sleep(2);
		//echo消息内容
	    echo $envelope->getBody()."\n";
		//显式确认,队列收到消费者显式确认后,会删除该消息
	    $queue->ack($envelope->getDeliveryTag());
	}
	//设置消息队列消费者回调方法,并进行阻塞
	$q->consume("receive");
	//$q->consume("receive", AMQP_AUTOACK);//隐式确认,不推荐

Connections

生产者代码publisher.php

	<?php
	/**
	 * Created by PhpStorm.
	 * User: wangyii.cn
	 * Time: 13:15
	 */

	$config = array(
	    'host' => '',
	    'vhost' => '/',
	    'port' => 5672,
	    'login' => 'test',
	    'password' => 'test'
	);
	$cnn = new AMQPConnection($config);
	if (!$cnn->connect()) {
	    echo "Cannot connect to the broker";
	    exit();
	}
	$ch = new AMQPChannel($cnn);
	$ex = new AMQPExchange($ch);
	//消息的路由键,一定要和消费者端一致
	$routingKey = 'key_1';
	//交换机名称,一定要和消费者端一致,
	$exchangeName = 'exchange_1';
	$ex->setName($exchangeName);
	$ex->setType(AMQP_EX_TYPE_DIRECT);
	$ex->setFlags(AMQP_DURABLE);
	$ex->declareExchange();
	//创建10个消息
	for ($i=1;$i<=10;$i++){
		//消息内容
	    $msg = array(
	        'data'  => 'message_'.$i,
	        'hello' => 'world',
	    );
		//发送消息到交换机,并返回发送结果
		//delivery_mode:2声明消息持久,持久的队列+持久的消息在RabbitMQ重启后才不会丢失
	    echo "Send Message:".$ex->publish(json_encode($msg), $routingKey, AMQP_NOPARAM, array('delivery_mode' => 2))."\n";
		//代码执行完毕后进程会自动退出
	}

标签:AMQP,实例,队列,rabbitmq,交换机,ex,cnn,new,php
From: https://www.cnblogs.com/qjwlv/p/17215515.html

相关文章

  • uni-app+php:微信小程序登录:用code得到openid/unionid(hbuilderx 3.7.3)
    一,js代码:<template><view><buttonclass="login-wxpng"open-type="getUserInfo"@getuserinfo="xcxWxLogin">微信小程序登录......
  • PHP WEB项目文件夹上传下载解决方案
    一、功能性需求与非功能性需求要求操作便利,一次选择多个文件和文件夹进行上传;支持PC端全平台操作系统,Windows,Linux,Mac支持文件和文件夹的批量下载,断点续传。刷新页面......
  • RabbitMQ【尚硅谷】
    1.MQ的相关概念1.1什么是MQ​ MQ(messagequeue),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游......
  • 数据分享|PYTHON用决策树分类预测糖尿病和可视化实例|附代码数据
    全文下载链接:http://tecdat.cn/?p=23848最近我们被客户要求撰写关于决策树的研究报告,包括一些图形和统计输出。在本文中,决策树是对例子进行分类的一种简单表示。它是一种......
  • RabbitMQ实现延迟发送消息
    前言最近在做一个可以根据用户选择的时间,实现微信推送订阅消息的功能,突然想到rabbitmq好像可以实现这个功能,本着试试的心态开始研究,第一个想到的就是使用死信队列死信队列何......
  • TypeScript实例_手动编译与自动编译、类型注解、接口和类的详解
    一.认识TypeScriptTypeScript是一种由微软开发的开源、跨平台的编程语言。它是JavaScript的超集,最终会被编译为JavaScript代码。2012年10月,微软发布了首个公开版......
  • Kafka、RabbitMQ、RocketMQ差异
    消息中间件消息中间件是分布式系统中重要的组件,本质就是一个具有接收消息、存储消息、分发消息的队列,应用程序通过读写队列消息来通信。在电商中,如订单系统处理完订单后,把订......
  • windows10下安装与配置Apache2+PHP8
    win10下安装apache1+php8主要有四个步骤:一、下载apache2和php8;二、解压并放在指定目录下;三、编辑php8的配置文件php.ini;四、配置apache2的配置文件httpd.conf文件。下面详......
  • 亚马逊云使用ECS实例过程
    1注册 2申请linux实例并连接2.1选择地区打开控制台后,看到右上角可以选择创建实例所在的地区,根据自己的实际情况去选择。2.2添加安全组选择左侧目录网络与安全-......
  • 如何在centos环境中安装php7x ?php-fpm 7 ? php插件?
    如果你需要搭建一个LNMP的环境,来运行你的应用,如何来部署php的环境? 通过下面的部分,你将看到在centos7环境中,部署php环境的过程: 1、安装epepl和remi库yuminstall......