2016-03-02 85 views
3

我有一个Java客户端,与芹菜使用RabbitMQ的通信,并将任务芹菜服务器添加2号Xÿ芹菜来管理Java任务

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插件添加这些数量,并由芹菜管理。

from celery import Celery 

app = Celery('tasks', broker='amqp://[email protected]//') 

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

我想用Java编写这add(x,y)功能芹菜莫名其妙地识别一个java add(x,y) method和管理。

注:我正在寻找一个没有webhooks的解决方案。

在此先感谢。

+0

如何如何使用[celery.execute.delay_tas(HTTP://docs.celeryproject .ORG/EN/2.1-存档/参考/ celery.execute.html#celery.execute.delay_task)。使用这个你可以使用任务名称调用任务 –

+0

芹菜怎么知道这个任务的名字是用于这个java函数的?这是原始问题 – Rupesh

+0

所以你想有一些java代码发送任务给rabbitmq,并且你希望芹菜能够将任务标识为正在用java编写一个运行适当的java代码? – scytale

回答

0

退房https://crabhi.github.io/celery-java/

这是一个(非常阿尔法的时刻)执行芹菜客户和员工的JVM的。

您可以标注你的任务等级:

​​

然后调用这样的任务:

Client client = new Client(rabbitConnectionChannel, rabbitBackend); 

Integer result = TestTaskProxy.with(client).sum(1, 7).get();