如何为每个通过netty消息解码器的消息分配序列号?

时间:2017-12-07 14:36:11

标签: java netty sequence

我正在研究一个netty通道处理程序/解码器,它为每个到达处理程序的消息分配一个唯一的序列号。

我当前的方法定义了一个将AtomicLong作为计数器的属性,每当消息到达时,它会加1并分配给解码的消息:

@Override
protected void decode(ChannelHandlerContext ctx, TextWebSocketFrame frame, List<Object> out) {
    AttributeKey<AtomicLong> sequenceKey = AttributeKey.valueOf("message_sequence");
    AtomicLong sequence = ctx.channel().attr(sequenceKey).get();
    long curerntMessageId = sequence.incrementAndGet();

    Message message = decode(frame);
    message.setMessageId(curerntMessageId);

稍后,在消息编码器中,消息ID被传送到响应消息,从而通过唯一ID连接请求和响应。

采用这种方法的原因是,在Web套接字连接的上下文中,我需要一些机制来识别请求&lt; - &gt;响应周期。

我想知道这种方法是否有意义,因为我必须一直访问频道属性,或者是否已经有现有的解决方案,我可能不知道?

1 个答案:

答案 0 :(得分:1)

如果每个连接只需要唯一,你可以直接在解码器本身存储一个int / long并递增它。这适用于所有内容都是单线程的。因此,如果我正确理解你的用例,就没有必要使用属性和原子