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);    
    }