0

我使用 Gearman 来分配不同的任务,因此我使用java-gearman-service来实现客户端和工作人员。

但是,我无法弄清楚我收到的数据

GearmanJobEventCallback<T>::onEvent

如何将event.getData()字节数组转换为我需要的数据?例如状态或返回的数据?当我发送 status(3,10) 它返回一个字节数组 [51,0,49,48] - 这对我的客户来说不是很有用。使用 ObjectInputStream 反序列化似乎并不成功。

与工作方法的返回数据相同,我该如何“解码”呢?

我如何从方法中“解码”data参数(字节数组)?workGearmanFunction

任何输入将不胜感激!

4

2 回答 2

1

好的,看来这个库的创建者似乎让用户有点需要处理......:D

我找到了解决这个问题的方法,希望它可以帮助遇到这个问题的任何人。

String numeratorStr = "";
String denominatorStr = "";
boolean writeNumerator = true;
for (byte b : event.getData()) {
    if (b == 0) {
        writeNumerator = false;
        continue;
    }
    if (writeNumerator) {
        numeratorStr += (char) b;
    } else {
        denominatorStr += (char) b;
    }
}
int numerator = Integer.parseInt(numeratorStr);
int denominator = Integer.parseInt(denominatorStr);

字节数组值似乎是 ASCII 表中的条目,并放在一个字节数组中,如下所示:http ://code.google.com/p/java-gearman-service/source/search?q=GEARMAN_JOB_STATUS&origq=GEARMAN_JOB_STATUS&btnG =搜索+主干

希望这可以帮助 :)

于 2012-07-09T19:36:03.560 回答
1

您的解决方案看起来很适合解码“状态”回调。状态数据包有点奇怪,不太适合 API,不幸的是,没有太多关于如何处理它的文档。

另一个想法可能是使用方法GearmanFunctionCallback#sendData(byte[])。使用 sendData 方法,您可以发送任何格式的任何类型的数据,并允许客户端解码该值。如果您已经在使用“数据”通道,您还可以使用“警告”通道将无类型数据发送回客户端。

于 2012-07-10T05:00:56.170 回答