PHP 封装一个简单的rabbitmq类业务


前言

很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家


提示:以下是本篇文章正文内容,下面案例可供参考

1.首先是账号密码配置 config.php

代码如下(示例):

<?php
    return $arr = [
        'RabbitMq' => [
            // Rabbitmq 服务地址
            'host' => '127.0.0.1',
            // Rabbitmq 服务端口
            'port' => '5672',
            // Rabbitmq 帐号
            'login' => 'guest',
            // Rabbitmq 密码
            'password' => 'guest',
            'vhost'=>'/'
        ]
    ];

2.基类 base.php

代码如下(示例):

<?php
include dirname(__FILE__).'/object.php';
include dirname(__FILE__).'/config.php';
class RabbitMq implements object
{
   
    //保存类实例的静态成员变量
    static private $_instance;
    static private $_conn;
    static private $amp ;
    static private $route = 'key_1';
    static private $q ;
    static private $ex ;
    static private $queue;
    public static function getInstance(){
   
        global $arr;
        if (!(self::$_instance instanceof self)) {
   
            self::$_instance = new self($arr['RabbitMq']);
            return self::$_instance;
        }
        return self::$_instance;
    }

    private function __construct($conn)
    {
   
        //创建连接和channel
        $conn = new AMQPConnection($conn);
        if(!$conn->connect()) {
   
            die("Cannot connect to the broker!\n");
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单RabbitMQ 帮助封装示例,使用 .NET 6: ```csharp using System; using System.Text; using RabbitMQ.Client; namespace RabbitMQHelper { public class RabbitMQHelper { private readonly string _hostName; private readonly int _port; private readonly string _userName; private readonly string _password; private readonly string _queueName; private readonly string _exchangeName; private readonly string _routingKey; private IConnection _connection; private IModel _channel; public RabbitMQHelper(string hostName, int port, string userName, string password, string queueName, string exchangeName, string routingKey) { _hostName = hostName; _port = port; _userName = userName; _password = password; _queueName = queueName; _exchangeName = exchangeName; _routingKey = routingKey; CreateConnection(); } private void CreateConnection() { var factory = new ConnectionFactory { HostName = _hostName, Port = _port, UserName = _userName, Password = _password }; _connection = factory.CreateConnection(); _channel = _connection.CreateModel(); _channel.ExchangeDeclare(_exchangeName, ExchangeType.Direct, durable: true); _channel.QueueDeclare(_queueName, durable: true, exclusive: false, autoDelete: false); _channel.QueueBind(_queueName, _exchangeName, _routingKey); } public void PublishMessage(string message) { var body = Encoding.UTF8.GetBytes(message); var properties = _channel.CreateBasicProperties(); properties.Persistent = true; _channel.BasicPublish(_exchangeName, _routingKey, properties, body); } public string ConsumeMessage() { var message = string.Empty; var consumer = new EventingBasicConsumer(_channel); consumer.Received += (model, ea) => { var body = ea.Body.ToArray(); message = Encoding.UTF8.GetString(body); }; _channel.BasicConsume(_queueName, true, consumer); return message; } public void CloseConnection() { _channel.Close(); _connection.Close(); } } } ``` 这个一个构造函数,需要传入 RabbitMQ 服务器的主机名、端口、用户名、密码、队列名、交换机名和路由键。然后,它会创建一个连接和一个通道,并使用这些参数声明交换机和队列,并将它们绑定在一起。`PublishMessage`方法可以用于发布消息,`ConsumeMessage`方法可以用于消费消息。最后,可以使用`CloseConnection`方法关闭连接。 使用示例: ```csharp using RabbitMQHelper; var rabbitMQHelper = new RabbitMQHelper("localhost", 5672, "guest", "guest", "my_queue", "my_exchange", "my_routing_key"); rabbitMQHelper.PublishMessage("Hello, RabbitMQ!"); var message = rabbitMQHelper.ConsumeMessage(); Console.WriteLine(message); rabbitMQHelper.CloseConnection(); ``` 这是一个简单的示例,你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值