SYMFONY RABBITMQ MESSENGER带有远程SSH不返回响应

发布于 2025-02-13 01:18:49 字数 2415 浏览 1 评论 0原文

我已经与RabbitMQ进行了少量集成,当我需要从MessengerHandler返回价值时,我会遇到问题。

从一开始:

  1. 我在API端点中,我通过:用户名,IP,密码和命令,以后我通过bus-> dispatch
namespace App\Controller\ApiFunctions;

use App\Message\SshShellQueue;
use phpseclib3\Net\SSH2;
use Symfony\Component\Messenger\Stamp\HandledStamp;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Process\Process;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class RabbitSshQueuingCalls extends AbstractController
{
  /**
   * @Route("/api/RabbitSsh",name="apiRabbitSsh")
   * @param MessageBusInterface $bus
   */
  function sendCommand(Request $request, MessageBusInterface $bus)
  {
      $ip = $request->get('ip');
      $username = $request->get('username');
      $password = $request->get('password');
      $command = $request->get('command');
      $strCommand = strval($command);
      $returnValue = $bus->dispatch(new SshShellQueue($strCommand,$password,$username,$ip));
      $handledStamp  = $returnValue->last(HandledStamp::class);

      return $this->json([
          'msg' => 'command has been queued',
          'status'=>$handledStamp //<-here i want to pass result of command that i passed
      ]);
  }
}

dispatch将数据推向此处, MessageHandler并通过RabbitMQ处理:


namespace App\Message\MessageHandler;
use App\Message\SshShellQueue;

use phpseclib3\Net\SSH2;
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;


class SshShellQueueHandler implements MessageHandlerInterface
{
    public function __invoke(SshShellQueue $queue){
        $ip = $queue->getIp();
        $ssh = new SSH2($ip);
        if (!$ssh->login($queue->getUsername(), $queue->getPassword())) {
            dump('Login Failed');
        }
        $variable = ($ssh->exec($queue->getContent()));
        var_dump($variable);
    }

在我的服务器中将正确的凭据传递给我的服务器后,我通过的命令正在正常工作,可以说我通过命令:pwd

,我可以在终端看到终端的结果。我的Messenger:消费正在工作 但是我想说的是将其传递给我的端点,我想通过返回$ this-&gt; json返回它。

I have made small integration with rabbitmq, and im getting problems when i need to return value from my messengerHandler.

From the start:

  1. I have in my API endpoint, where i pass: username,ip,password and command which later i pass them via bus->dispatch:
namespace App\Controller\ApiFunctions;

use App\Message\SshShellQueue;
use phpseclib3\Net\SSH2;
use Symfony\Component\Messenger\Stamp\HandledStamp;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Process\Process;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class RabbitSshQueuingCalls extends AbstractController
{
  /**
   * @Route("/api/RabbitSsh",name="apiRabbitSsh")
   * @param MessageBusInterface $bus
   */
  function sendCommand(Request $request, MessageBusInterface $bus)
  {
      $ip = $request->get('ip');
      $username = $request->get('username');
      $password = $request->get('password');
      $command = $request->get('command');
      $strCommand = strval($command);
      $returnValue = $bus->dispatch(new SshShellQueue($strCommand,$password,$username,$ip));
      $handledStamp  = $returnValue->last(HandledStamp::class);

      return $this->json([
          'msg' => 'command has been queued',
          'status'=>$handledStamp //<-here i want to pass result of command that i passed
      ]);
  }
}

and the dispatch is pushing data here, to the messageHandler and are processed via rabbitmq:


namespace App\Message\MessageHandler;
use App\Message\SshShellQueue;

use phpseclib3\Net\SSH2;
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;


class SshShellQueueHandler implements MessageHandlerInterface
{
    public function __invoke(SshShellQueue $queue){
        $ip = $queue->getIp();
        $ssh = new SSH2($ip);
        if (!$ssh->login($queue->getUsername(), $queue->getPassword())) {
            dump('Login Failed');
        }
        $variable = ($ssh->exec($queue->getContent()));
        var_dump($variable);
    }

and after ill pass correct credentials to my server the command that i pass is working, lets say i pass command: pwd

and i can see result in terminal when my messenger:consume is working
but i want to lets say pass it back to the my endpoint and i want to return it via return $this->json

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文