2017-05-05 5 views
0

Logstash를 통해 셀러리 작업을 트리거하는 방법을 설명 할 수 있습니까? 가능합니까?Logstash - RabbitMQ를 통해 샐러리 작업을 실행하는 방법

나는 'PHP-amqplib'라이브러리를 통해 PHP에서 그렇게하려고 그것을 잘 작동합니다 경우 : 셀러리 문서에 따르면 (Logstash를 사용하지 않고)

$connection = new AMQPStreamConnection(
    'rabbitmq.local', 
    5672, 
    'guest', 
    'guest' 
); 
$channel = $connection->channel(); 
$channel->queue_declare(
    'celery', 
    false, 
    true, 
    false, 
    false 
); 
$taskId = rand(1000, 10000); 
$props = array(
    'content_type' => 'application/json', 
    'content_encoding' => 'utf-8', 
); 

$body = array(
    'task'  => 'process_next_task', 
    'lang'  => 'py', 
    'args'  => array('ktest' => 'vtest'), 
    'kwargs' => array('ktest' => 'vtest'), 
    'origin' => '@'.'mytest', 
    'id'  => $taskId, 
); 

$msg = new AMQPMessage(json_encode($body), $props); 
$channel->basic_publish($msg, 'celery', 'celery'); 

:

http://docs.celeryproject.org/en/latest/internals/protocol.html

json 형식의 요청을 보내려고합니다.이 필터는 Logstash 필터입니다.

ruby 
{ 
    remove_field => ['headers', '@timestamp', '@version', 'host', 'type'] 
    code => " 
     event.set('properties', 
     { 
      :content_type => 'application/json', 
      :content_encoding => 'utf-8' 
     }) 
    " 
} 

그리고 셀러리 대답은 : 기본적으로

[2017-05-05 14:35:09,090: WARNING/MainProcess] Received and deleted unknown message. Wrong destination?! 
{content_type:None content_encoding:None delivery_info:{'exchange': 'celery', 'routing_key': 'celery', 'redelivered': False, 'consumer_tag': 'None4', 'delivery_tag': 66} headers={}} 

, 셀러리 내 메시지 형식 또는 디코딩 할 수 없습니다 더 나은 ... 내가 JSON 형식 :

그것은이다의 요청을 설정할 수 아니에요 날 미치게 어떤 단서가

그것을 잊으 :) 사전에 감사합니다,이 정보 제공하기에서 Logstash 내 출력 플러그인

rabbitmq 
      { 
       key    => "celery" 
       exchange  => "celery" 
       exchange_type => "direct" 
       user   => "${RABBITMQ_USER}" 
       password  => "${RABBITMQ_PASSWORD}" 
       host   => "${RABBITMQ_HOST}" 
       port   => "${RABBITMQ_PORT}" 
       durable   => true 
       persistent  => true 
       codec   => json 

      } 

답변

1

입니다 this question에서 편집 할 수 없습니다.

ruby ​​필터로 이벤트를 재생할 때 rabbitmq 헤더 및 메시지 속성을 설정하려는 동안 실제로 메시지 본문에 포함될 내용을 가지고 놀고 있습니다.

그 기능이 tackled이 될 때까지는 물론 당신이 직접 구현하지 않는 한 당신이 그것을 성취 할 수있을 것이라고 생각하지 않습니다. 결국 플러그인은 github에서 사용할 수 있습니다.

0

올리비에 (Olivier)가 말했듯이 지금 당장은 가능하지 않지만 공식 프로젝트에 끌어 오기 요청을했습니다.

https://github.com/useless-stuff/logstash-output-rabbitmq

당신은 그 코드 :

내가 멀리 완전히 해요 심각하게 두려워해야 https://github.com/logstash-plugins/logstash-output-rabbitmq/pull/59

것은 당신이 작업 버전을 찾고 있다면 나의 복제에 대해 살펴 루비 개발자가되기 위해

그러나 그것은 작동한다 :