• Возможна ли на RabbitMQ обработка нескольких очередей одним consumer'ом?

    @serega_chem Автор вопроса
    В результате поиска решения появился следующий класс
    use PhpAmqpLib\Connection\AMQPStreamConnection;
    
    class MessageConsumer
    {
        private $channel;
        private $exchange = "message";
        
        public function __construct()
        {
            $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
            $this->channel = $connection->channel();
        }
    
        public function listen()
        {
            $this->channel->exchange_declare($this->exchange, 'direct', false, true, false);
            while (true) {
                $this->channel->wait();
            }
        }
    
        public function addQueue($queue)
        {
            $this->channel->queue_declare($queue, false, false, false, false);
            $this->channel->queue_bind($queue, $this->exchange, $queue);
            $this->channel->basic_consume($queue, '', false, true, false, false, [$this, 'processMessage']);
        }
    
        public function processMessage($msg)
        {
            echo "[x] {$msg->delivery_info['routing_key']} : $msg->body \n";
        }
    }

    Клиентский код примерно таков
    use MessageConsumer;
    
    $consumer = new MessageConsumer();
    $consumer->addQueue('admin');
    $consumer->addQueue('user');
    $consumer->listen();


    Тут же возникает вопросы:
    1. Как и где хранить экземпляр класса MessageConsumer? Скорее экземпляр AMQPChannel текущего соединения
    2. Как восстановить работу чата при падении демона? обрыве соединения?
    Ответ написан
    Комментировать
  • LG K410 - как решить проблемы с usb-модемом на Ubuntu Mate 16.04 x64?

    @serega_chem Автор вопроса
    В файл /etc/network/interfaces добавляем
    auto enp0s29f7u6i3
    iface enp0s29f7u6i3 inet dhcp


    и перезапускаем сеть

    sudo service networking restart
    Ответ написан
    Комментировать