2016-03-02 84 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();