【发布时间】:2016-03-02 05:15:59
【问题描述】:
我有一个 java 客户端,它使用 rabbitmq 与 celery 通信,并将任务发送到 celery 服务器以添加 2 个数字 x 和 y
String QUEUE_NAME = "celery";
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
String x = "5";
String y = "10";
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
String ID = UUID.randomUUID().toString();
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
String message = "{\"id\":\""+ID+"\", \"task\": \"tasks.add\", \"args\": ["+x+","+y+"], \"kwargs\": {}, \"retries\": 0, \"eta\": \"2009-11-17T12:30:56.527191\"}";
channel.basicPublish("", QUEUE_NAME, new AMQP.BasicProperties.Builder()
.contentType("application/json").contentEncoding("utf-8")
.build(), message.getBytes("utf-8"));
System.out.println(" [x] Sent '" + message + "'");
channel.close();
connection.close();
我们有一个 python api add 来添加这些数字,它由 celery 管理。
from celery import Celery
app = Celery('tasks', broker='amqp://guest@localhost//')
@app.task
def add(x, y):
return x + y
我想在 java 中编写这个 add(x,y) 函数,芹菜以某种方式识别 java add(x,y) method 并管理它。
注意:我正在寻找没有 webhook 的解决方案。
提前致谢。
【问题讨论】:
-
如何使用 [celery.execute.delay_tas] (docs.celeryproject.org/en/2.1-archived/reference/…)。使用它,您可以使用任务名称调用任务
-
celery 怎么知道这个任务名是给这个 java 函数的?这是原来的问题
-
所以你想要一些 java 代码将任务发送到 rabbitmq,并且你想让 celery 将任务识别为用 java 编写并运行适当的 java 代码?
-
我已经有 java 代码向 celery 发送任务,它是一个 json 任务并且有要执行的方法名称,现在我希望 celery 读取方法名称并将其链接到相应的 java 方法和执行那个方法。
标签: java python rabbitmq celery