2017-11-24 3 views
2

셀라리에서 다른 메시지 브로커를 사용할 수 있습니까?셀러리 : RabbitMQ 대신 PostgreSQL 사용

예 : RabbitMQ 대신 PostgreSQL을 사용하고 싶습니다. 그것은 AFAIK

만 결과 백엔드에서 지원됩니다 http://docs.celeryproject.org/en/latest/userguide/configuration.html#database-backend-settings

PostgreSQL의 9.5 이후 강력한 메시지/작업 큐를 구현할 수 SKIP LOCKED있다. https://blog.2ndquadrant.com/what-is-select-skip-locked-for-in-postgresql-9-5/

+0

브로커의 셀러리 문서를 읽었습니까? http://docs.celeryproject.org/ko/latest/userguide/configuration.html#broker-settings –

+2

데이터베이스 전송 지원 코드가 삭제되었지만 최근에 다시 추가되었습니다. https://github.com/celery/kombu/ tree/master/kombu/transport/sqlalchemy – georgexsh

+0

@RonanBoiteau 문서에 따르면 몇 가지 지원되는 전송 스키마가 있습니다. amqp : //, redis : //, sqs : // 및 qpid : //. PostgreSQL을 사용하는 것이 지원되지 않는 것처럼 보입니다. – guettli

답변

2

예, 당신이 할 수있는 rabbitmq 대신 broker로 postgres를 사용하십시오. 다음은 간단한 예제입니다.

from celery import Celery 


broker = 'sqla+postgresql://user:[email protected]/dbname' 

app = Celery(broker=broker) 

@app.task 
def add(x, y): 
    return x + y 

큐 작업

In [1]: from demo import add 

In [2]: add.delay(1,2) 
Out[2]: <AsyncResult: 4853190f-d355-48ae-8aba-6169d38fad39> 

노동자 결과 : 최신 (셀러리 == 4.1.0, 다시마 == 4.1.0에서 테스트

[2017-12-02 08:11:08,483: INFO/MainProcess] Received task: t.add[809060c0-dc7e-4a38-9e4e-9fdb44dd6a31] 
[2017-12-02 08:11:08,496: INFO/ForkPoolWorker-1] Task t.add[809060c0-dc7e-4a38-9e4e-9fdb44dd6a31] succeeded in 0.0015781960000822437s: 3 

, SQLAlchemy의의 == 1.1.1) 버전.

1

셀라리와 다른 메시지 브로커를 사용할 수 있습니까?

버전 4 이전에는 확실합니다. 나는 메시지 브로커 인 official document에이어서 mongodb를 사용했다.

그래서 브로커로 PostgreSQL을 사용하고 싶다면 셀러리도 SQLAlchemy을 지원한다. 당신이 셀러리 4.0에서 사용하려는 경우

그러나, 어쩌면 조금 어렵습니다, 내 마음 속에 하나의 방법은 다시마의 코드를 변경하고, 예, 다시마,하지 셀러리입니다!

관련 문제