Redis / Lettuce / Stream - 如何在 xadd 中发送我自己的条目 ID
Redis / Lettuce / Stream - how to send my own entry id in xadd
我正在实施价格供稿,其中 Java 作为供料器,python 作为消费者。我 python 比 Java 多。我需要从 java 发送我自己的条目 ID(时间戳),但我没有找到关于如何执行此操作的示例和清晰的文档(我是入门级 Java)。
这是现在可用的 java 代码,但发送默认的 Redis 条目 ID,相当于发送:XADD stream_id * key_1 value_1 key_2 value_2.
public void onTick(Instrument instrument, ITick tick) throws JFException {
String _streamName = instrument.name() + ":tick";
long _tickDate = tick.getTime();
String _sTickDate = Long.toString(_tickDate);
double _ask = tick.getAsk();
double _bid = tick.getBid();
Map<String, String> _messageBody = new HashMap<>();
_messageBody.put( "ask", Double.toString(_ask) );
_messageBody.put( "bid", Double.toString(_bid) );
console.getOut().println("Sending to " + _streamName + " -> " + tick);
this.sync.xadd(_streamName, _messageBody);
}
在python中用redis-py做起来很简单。
def send_tick(self, instrument, bar_size, tick):
_stream_id = f"{instrument}:{bar_size}"
self.client.xadd(_stream_id, {"bid": tick[self.BID_KEY], "ask": tick[self.ASK_KEY]}, id=tick[self.TS_KEY])
它在 id= 命名参数中发送。
如有任何帮助,我将不胜感激
谢谢
呼吸新鲜空气后,根据此处找到的 XAddArgs 的描述找到了答案。
https://www.codota.com/code/java/classes/io.lettuce.core.XAddArgs
import io.lettuce.core.RedisClient;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.api.sync.RedisCommands;
import io.lettuce.core.XAddArgs;
.
.
.
public static XAddArgs id(long tsId) {
return new XAddArgs().id(Long.toString(tsId));
}
@Override
public void onTick(Instrument instrument, ITick tick) throws JFException {
String _streamName = instrument.name() + ":tick";
long _tickDate = tick.getTime();
String _sTickDate = Long.toString(_tickDate);
double _ask = tick.getAsk();
double _bid = tick.getBid();
Map<String, String> _messageBody = new HashMap<>();
_messageBody.put( "ask", Double.toString(_ask) );
_messageBody.put( "bid", Double.toString(_bid) );
_messageBody.put( "time", _sTickDate );
console.getOut().println("Sending to " + _streamName + " -> " + tick);
this.sync.xadd(_streamName, id(_tickDate), _messageBody);
}
我正在实施价格供稿,其中 Java 作为供料器,python 作为消费者。我 python 比 Java 多。我需要从 java 发送我自己的条目 ID(时间戳),但我没有找到关于如何执行此操作的示例和清晰的文档(我是入门级 Java)。
这是现在可用的 java 代码,但发送默认的 Redis 条目 ID,相当于发送:XADD stream_id * key_1 value_1 key_2 value_2.
public void onTick(Instrument instrument, ITick tick) throws JFException {
String _streamName = instrument.name() + ":tick";
long _tickDate = tick.getTime();
String _sTickDate = Long.toString(_tickDate);
double _ask = tick.getAsk();
double _bid = tick.getBid();
Map<String, String> _messageBody = new HashMap<>();
_messageBody.put( "ask", Double.toString(_ask) );
_messageBody.put( "bid", Double.toString(_bid) );
console.getOut().println("Sending to " + _streamName + " -> " + tick);
this.sync.xadd(_streamName, _messageBody);
}
在python中用redis-py做起来很简单。
def send_tick(self, instrument, bar_size, tick):
_stream_id = f"{instrument}:{bar_size}"
self.client.xadd(_stream_id, {"bid": tick[self.BID_KEY], "ask": tick[self.ASK_KEY]}, id=tick[self.TS_KEY])
它在 id= 命名参数中发送。
如有任何帮助,我将不胜感激
谢谢
呼吸新鲜空气后,根据此处找到的 XAddArgs 的描述找到了答案。
https://www.codota.com/code/java/classes/io.lettuce.core.XAddArgs
import io.lettuce.core.RedisClient;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.api.sync.RedisCommands;
import io.lettuce.core.XAddArgs;
.
.
.
public static XAddArgs id(long tsId) {
return new XAddArgs().id(Long.toString(tsId));
}
@Override
public void onTick(Instrument instrument, ITick tick) throws JFException {
String _streamName = instrument.name() + ":tick";
long _tickDate = tick.getTime();
String _sTickDate = Long.toString(_tickDate);
double _ask = tick.getAsk();
double _bid = tick.getBid();
Map<String, String> _messageBody = new HashMap<>();
_messageBody.put( "ask", Double.toString(_ask) );
_messageBody.put( "bid", Double.toString(_bid) );
_messageBody.put( "time", _sTickDate );
console.getOut().println("Sending to " + _streamName + " -> " + tick);
this.sync.xadd(_streamName, id(_tickDate), _messageBody);
}